本篇文章給大家分享的是有關(guān)Java應(yīng)用如何實現(xiàn)劫持HTTP請求,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)2013年至今,先為曲靖等服務(wù)建站,曲靖等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為曲靖企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。背景
全鏈路追蹤中,針對部分特殊的流量,希望將它引導(dǎo)到特定服務(wù)上(這個特定服務(wù)不在正常請求的鏈路上)——問題可以被抽象為解決進(jìn)程間通信過程中目標(biāo)進(jìn)程的選擇。
進(jìn)程間通信方式很多,本篇只關(guān)注 Java 進(jìn)程間套接字通信下 HTTP 形式的請求劫持,引導(dǎo)特定流量到特定進(jìn)程。
解決方案
可行的處理方案繁多。自頂向下從應(yīng)用、框架、JVM、Container Runtime、System Call、網(wǎng)絡(luò)協(xié)議棧等級別,均可著手解決。侵入性最強(qiáng)的操作就是要求所有業(yè)務(wù)應(yīng)用都主動實現(xiàn) HTTP 請求分流邏輯;次一級是提供二方庫供業(yè)務(wù)應(yīng)用主動集成;或者從系統(tǒng)層面進(jìn)行改造,基于改寫系統(tǒng)調(diào)用對請求進(jìn)行劫持。
回顧兩年前的所學(xué),JVM TI 為劫持 HTTP 請求提供了一個全新的解決思路。通過 Agent 改寫應(yīng)用啟動時加載的類的字節(jié)碼,劫持類的實例并完成目標(biāo)功能。
由于 Java 項目間調(diào)用大量的使用了 Apache 的 http-client 庫,改寫變得相當(dāng)簡單。識別流量,并對特定流量改寫請求的 Host 即可。
Demo
由于 http-client 對所有請求目標(biāo)都統(tǒng)一由 org.apache.http.HttpHost
維護(hù),控制變得極為簡單。只需在 HttpHost
實例化時,改寫類的構(gòu)造方法,即完成了對目標(biāo)的劫持工作(下例中強(qiá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)用如何實現(xiàn)劫持HTTP請求-創(chuàng)新互聯(lián)
文章源于:http://www.muchs.cn/article20/cdjijo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、ChatGPT、品牌網(wǎng)站設(shè)計、網(wǎng)站設(shè)計、移動網(wǎng)站建設(shè)、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容