真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java應(yīng)用如何實(shí)現(xiàn)劫持HTTP請(qǐng)求-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)Java應(yīng)用如何實(shí)現(xiàn)劫持HTTP請(qǐng)求,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

創(chuàng)新互聯(lián)2013年至今,先為曲靖等服務(wù)建站,曲靖等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為曲靖企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

背景

全鏈路追蹤中,針對(duì)部分特殊的流量,希望將它引導(dǎo)到特定服務(wù)上(這個(gè)特定服務(wù)不在正常請(qǐng)求的鏈路上)——問(wèn)題可以被抽象為解決進(jìn)程間通信過(guò)程中目標(biāo)進(jìn)程的選擇。

進(jìn)程間通信方式很多,本篇只關(guān)注 Java 進(jìn)程間套接字通信下 HTTP 形式的請(qǐng)求劫持,引導(dǎo)特定流量到特定進(jìn)程。

解決方案

可行的處理方案繁多。自頂向下從應(yīng)用、框架、JVM、Container Runtime、System Call、網(wǎng)絡(luò)協(xié)議棧等級(jí)別,均可著手解決。侵入性最強(qiáng)的操作就是要求所有業(yè)務(wù)應(yīng)用都主動(dòng)實(shí)現(xiàn) HTTP 請(qǐng)求分流邏輯;次一級(jí)是提供二方庫(kù)供業(yè)務(wù)應(yīng)用主動(dòng)集成;或者從系統(tǒng)層面進(jìn)行改造,基于改寫(xiě)系統(tǒng)調(diào)用對(duì)請(qǐng)求進(jìn)行劫持。

回顧兩年前的所學(xué),JVM TI 為劫持 HTTP 請(qǐng)求提供了一個(gè)全新的解決思路。通過(guò) Agent 改寫(xiě)應(yīng)用啟動(dòng)時(shí)加載的類的字節(jié)碼,劫持類的實(shí)例并完成目標(biāo)功能。

由于 Java 項(xiàng)目間調(diào)用大量的使用了 Apache 的 http-client 庫(kù),改寫(xiě)變得相當(dāng)簡(jiǎn)單。識(shí)別流量,并對(duì)特定流量改寫(xiě)請(qǐng)求的 Host 即可。

Demo

由于 http-client 對(duì)所有請(qǐng)求目標(biāo)都統(tǒng)一由 org.apache.http.HttpHost 維護(hù),控制變得極為簡(jiǎn)單。只需在 HttpHost 實(shí)例化時(shí),改寫(xiě)類的構(gòu)造方法,即完成了對(duì)目標(biāo)的劫持工作(下例中強(qiáng)制將所有請(qǐng)求指向 163.com

public class Agent implements ClassFileTransformer {

  public static void premain(String args, Instrumentation instrumentation) {
    instrumentation.addTransformer(new Agent());
  }

  @Override
  public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
    if ("org/apache/http/HttpHost".equals(className)) {
      ClassPool pool = ClassPool.getDefault();
      try {
        CtClass httpHost = pool.get("org.apache.http.HttpHost");
        CtClass string = pool.get("java.lang.String");
        CtConstructor constructor = httpHost.getDeclaredConstructor(new CtClass[]{string, CtClass.intType, string});
        constructor.insertBefore("hostname = \"www.163.com\";");
        byte[] bytes = httpHost.toBytecode();
        FileOutputStream fos = new FileOutputStream("/Users/fangfeng/a.class");
        fos.write(bytes);
        return bytes;
      } catch(NotFoundException | CannotCompileException | IOException e){
        e.printStackTrace();
      }
    }
    return classfileBuffer;
  }
}

本文題目:Java應(yīng)用如何實(shí)現(xiàn)劫持HTTP請(qǐng)求-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://weahome.cn/article/cdjijo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部