引言:阿里開源功能強(qiáng)大的代理服務(wù)器欠气,可用于移動(dòng)端測(cè)試抓包等操作。
時(shí)間:2017年11月01日
作者:JustDo23
官網(wǎng):https://github.com/alibaba/anyproxy
01. 簡(jiǎn)介
代理服務(wù)器站在客戶端和服務(wù)端的中間侠坎,它可以收集雙方通信的每個(gè)比特庄新。一個(gè)完整的代理請(qǐng)求過(guò)程為:客戶端首先與代理服務(wù)器創(chuàng)建連接偿短,接著根據(jù)代理服務(wù)所使用的代理協(xié)議,請(qǐng)求對(duì)目標(biāo)服務(wù)器創(chuàng)建連接或者獲取目標(biāo)服務(wù)器的指定資源凯旋。一些代理協(xié)議允許代理服務(wù)器改變客戶端的原始請(qǐng)求呀潭、目標(biāo)服務(wù)器的原始響應(yīng)。
AnyProxy 是完全可以靈活配置的代理服務(wù)器至非。它支持 https明文代理 钠署,且提供了 Web 界面便于觀測(cè)請(qǐng)求情況,同時(shí)支持二次開發(fā)睡蟋,可以用
JavaScript
來(lái)控制代理的全部流程踏幻,搭建前端個(gè)性化調(diào)試環(huán)境枷颊。
02. 安裝
-
安裝 Node.js
$ brew update $ brew install node $ node --version
-
安裝 AnyProxy
# 安裝穩(wěn)定正式版 $ npm install -g anyproxy # 最新測(cè)試版戳杀,需要使用最新版本 node 進(jìn)行安裝 $ npm install -g anyproxy@beta # 有時(shí)需要添加 sudo
-
啟動(dòng) AnyProxy
$ anyproxy
-
啟動(dòng)瀏覽器
http://192.168.0.195:8002/
http://127.0.0.1:8002/
-
客戶端設(shè)置代理
- 服務(wù)器 IP
- 端口 8001
-
網(wǎng)絡(luò)請(qǐng)求并觀測(cè)
在公司不知為何抓不到包。問(wèn)了下同事夭苗,原來(lái)公司路由器做了攔截操作無(wú)法抓包信卡,插網(wǎng)線沒問(wèn)題。
03. 配置 Https
原理:AnyProxy 解析 Https 的原理是自制根證書 rootCA 在終端信任這份證書之后题造,再用它簽發(fā)各個(gè)域名的二級(jí)證書傍菇,此時(shí)二級(jí)證書可以重新對(duì)各個(gè)頁(yè)面進(jìn)行解析。
-
?生成 rootCA
# 穩(wěn)定版本生成方法 $ sudo anyproxy --root # 最新版本生成方法 $ anyproxy-ca
-
打開 rootCA.crt
生成命令執(zhí)行后會(huì)彈出證書所在目錄界赔,或者根據(jù)提示找到該目錄后丢习,雙擊打開。
-
信任 rootCA.crt
-
以支持 Https 方式重新啟動(dòng) AnyProxy
$ anyproxy --intercept # 簡(jiǎn)寫 $ anyproxy -i
-
移動(dòng)端安裝證書
- 瀏覽器打開地址 http://localhost:8002/fetchCrtFile 進(jìn)行證書下載
- 掃描二維碼地址 http://localhost:8002/qr_root 進(jìn)行證書下載
-
網(wǎng)絡(luò)請(qǐng)求并觀測(cè)
04. 其他
-
卸載
$ npm uninstall anyproxy
-
清除證書
$ anyproxy --clear
05. 規(guī)則文件
AnyProxy 提供了二次開發(fā)的能力淮悼,可以使用 js 編寫自己的規(guī)則模塊咐低,來(lái)自定義網(wǎng)絡(luò)請(qǐng)求的處理邏輯。
控制完整的請(qǐng)求頭袜腥、請(qǐng)求體见擦、響應(yīng)頭、響應(yīng)體,可以在客戶端與服務(wù)端都無(wú)感知的情況下介入處理所有的流程鲤屡。
-
把網(wǎng)絡(luò)通信過(guò)程分解為三個(gè)階段:
- 在收到客戶端請(qǐng)求后损痰,允許開發(fā)者直接從本地提供返回
- 在轉(zhuǎn)發(fā)請(qǐng)求到服務(wù)器前,允許開發(fā)者對(duì)發(fā)送的請(qǐng)求進(jìn)行修改
- 在收到服務(wù)器響應(yīng)后酒来,允許開發(fā)者對(duì)響應(yīng)內(nèi)容進(jìn)行修改卢未,再返回給客戶端
-
開發(fā)步驟
-
編寫規(guī)則文件
rule.js
// 允許 Https 解析 module.exports = { shouldInterceptHttpsReq : function(req){ return true; } };
-
啟動(dòng)并加載規(guī)則
$ anyproxy --rule ./rule.js
-
測(cè)試規(guī)則
使用客戶端請(qǐng)求并觀測(cè)
-
使用 curl 測(cè)試
# 直接請(qǐng)求服務(wù)器 $ curl https://github.com # 通過(guò)代理服務(wù)器請(qǐng)求 $ curl https://github.com --proxy http://127.0.0.1:8001
-
-
加載線上規(guī)則
$ anyproxy --rule https://sample.com/rule.js
更多規(guī)則使用方式參考官方文檔。