久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何劫持Java應(yīng)用的HTTP請(qǐng)求

瀏覽:31日期:2022-08-22 13:56:19

背景

全鏈路追蹤中,針對(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í)加載的類(lèi)的字節(jié)碼,劫持類(lèi)的實(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ě)類(lèi)的構(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; }}

將整個(gè)項(xiàng)目打包為 agent.jar 的過(guò)程不做太多介紹,詳見(jiàn) ffutop/http-client-plugin

針對(duì)需要劫持的項(xiàng)目,在啟動(dòng)參數(shù)中增加 -javaagent:${PATH_TO}/http-client-plugin.jar

以上就是如何劫持Java應(yīng)用的HTTP請(qǐng)求的詳細(xì)內(nèi)容,更多關(guān)于劫持Java應(yīng)用的HTTP請(qǐng)求的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 九九热在线视频免费观看 | 手机看片1| 日韩午夜免费视频 | 欧美日韩激情在线一区二区三区 | 最近的中文字幕在线看视频 | 国内精品国产三级国产在线专 | 最新中文字幕在线 | 中文字幕在线免费 | 亚洲精品三级 | 玖玖爱视频在线 | 免费视频一区二区 | 美女主播精品视频一二三四 | 黄网在线免费观看 | 亚洲欧洲一区二区 | 国产综合欧美 | 艹逼逼视频 | 成人免费一区二区三区 | 久久99精品久久久久久琪琪 | 91视频黄色| jav成人av免费播放 | 国产精品视频一区二区三区 | 自拍偷拍第一页 | www久久精品 | 青青操av | 欧美一级片在线 | 黄色免费网址大全 | 欧美一级黄视频 | 欧美精品综合 | 成人爽a毛片一区二区免费 亚洲自拍偷拍精品 | 久久99这里只有精品 | 精品一二三区在线观看 | 蜜桃视频麻豆女神沈芯语免费观看 | 久久久久久久久99精品 | 九九热视频在线 | 黄色一级视频 | 男人天堂网av | 欧美亚洲日本 | 亚洲aⅴ| 91在线一区二区 | 亚洲欧美中文日韩v在线观看 | 日韩欧美在线不卡 |