點(diǎn)擊訪問(wèn)原文
您還可以加入全棧技術(shù)交流群(QQ群號(hào):254842154)
HTTP抓包分析工具有比較多,如Fiddler,F(xiàn)ireBug良漱,HttpWatch愧口,Tcpdump睦番,PAW(mac)等。在做移動(dòng)開(kāi)發(fā)時(shí)耍属,找到一款合適自己的能進(jìn)行移動(dòng)設(shè)備HTTP抓包的工具也是非常重要的托嚣。正所謂,工欲善其事必先利其器厚骗。
個(gè)人非常喜歡Fiddler示启,功能強(qiáng)大,而且還支持替換文件领舰,對(duì)于調(diào)試線上的js/css文件非常方便夫嗓〕俾荩可惜,沒(méi)有MAC版本啤月。于是我只能另尋利器煮仇。
今天給大家介紹一款強(qiáng)大的支持手機(jī)端抓包的工具:mitmproxy。官網(wǎng)地址:http://mitmproxy.org/ 谎仲。這是mitmproxy官網(wǎng)的自述:
an interactive, SSL-capable man-in-the-middle proxy for HTTP with a console interface
它是開(kāi)源的浙垫,托管在github上,使用python開(kāi)發(fā)郑诺,跨平臺(tái)夹姥。
https://github.com/mitmproxy/mitmproxy
下面以android為例做介紹,iOS的調(diào)試類(lèi)似辙诞,關(guān)鍵是設(shè)置好代理辙售。
下載
下載地址:
http://mitmproxy.org/download/osx-mitmproxy-0.11.3.tar.gz
喜歡折騰的可以自己編譯安裝。
電腦端設(shè)置
電腦和手機(jī)連接到同一個(gè)wifi環(huán)境下飞涂。運(yùn)行時(shí)旦部,需要指定電腦的ip地址,并約定一個(gè)端口號(hào):
/Applications/ProgramFiles/mitmproxy-0.11.3/mitmproxy -b 10.0.1.6 -p 2386
手機(jī)端設(shè)置
手機(jī)和電腦連接同一個(gè)wifi较店,然后設(shè)置代理士八。進(jìn)入WLAN,找到當(dāng)前連接的wifi梁呈,長(zhǎng)按婚度,彈出的框中選擇“修改網(wǎng)絡(luò)”,進(jìn)入后官卡,選擇“顯示高級(jí)選項(xiàng)”蝗茁,代理選擇為“手動(dòng)”,代理服務(wù)器主機(jī)名設(shè)置為mac端的ip地址寻咒,端口號(hào)是跟剛剛設(shè)置的2386哮翘,設(shè)好后保存。如下圖:
此時(shí)毛秘,手機(jī)端的所有http請(qǐng)求都會(huì)被mitmproxy檢測(cè)到饭寺,并顯示在控制臺(tái)中。鍵盤(pán)的上下鍵可以控制黃色箭頭 >> 的移動(dòng)熔脂,回車(chē)直接進(jìn)入請(qǐng)求詳情佩研。
mitmproxy基本操作
詳細(xì)操作在這里可以找到:http://mitmproxy.org/doc/mitmproxy.html 。我在這里只列出一些經(jīng)常用到的命令霞揉。
其實(shí)命令基本和vi一致旬薯。
C 清空控制臺(tái)
tab 請(qǐng)求/響應(yīng)切換
q 返回上一個(gè)界面
m 在響應(yīng)結(jié)果中,輸入m可以選擇body的呈現(xiàn)方式适秩,比如json绊序,xml等
e 編輯請(qǐng)求硕舆、響應(yīng)
a 發(fā)送編輯后的請(qǐng)求、響應(yīng)
攔截HTTP請(qǐng)求
mitmproxy是一個(gè)支持SSL的HTTP中間人代理工具骤公,它允許你檢查HTTP和HTTPS流量并支持直接改寫(xiě)請(qǐng)求抚官。它位于客戶(hù)端和Server端之間,它可以獲取客戶(hù)端的Request阶捆,然后修改再發(fā)送給Server端凌节;Server端得到Request之后再發(fā)出相應(yīng)的Response,又會(huì)被mitmproxy攔截洒试,如果你想修改response倍奢,便可修改后再發(fā)給客戶(hù)端。
這個(gè)強(qiáng)大的功能曾經(jīng)在一些有關(guān)iOS應(yīng)用的隱私丑聞中都出現(xiàn)過(guò)垒棋,包括Path的地址簿上傳丑聞卒煞。它的直接改寫(xiě)請(qǐng)求的能力也被用來(lái)針對(duì)iOS平臺(tái),其應(yīng)用包括在GameCenter中偽造一個(gè)虛假的高分?jǐn)?shù)值叼架。感興趣的可以閱讀:
http://mitmproxy.org/doc/tutorials/gamecenter.html
下面我要做的就是攔截android的http請(qǐng)求畔裕,然后修改請(qǐng)求url,等待服務(wù)器返回后再修改響應(yīng)體乖订。
在默認(rèn)情況下mitmproxy是過(guò)濾抓包的URL扮饶,例如我想攔截所有url中含有cmd=200的請(qǐng)求,操作如下:
在請(qǐng)求列表界面垢粮,輸入i(代表Intercept filter)進(jìn)入命令行贴届,輸入cmd=200
然后在android客戶(hù)端發(fā)起請(qǐng)求靠粪,我們可以看到被攔截的請(qǐng)求被標(biāo)紅高亮了
使用鍵盤(pán)的上下箭頭移動(dòng)黃色的>>蜡吧,到被攔截的請(qǐng)求那一行,回車(chē)進(jìn)入詳情占键,使用tab鍵切換Request和Response昔善,現(xiàn)在請(qǐng)求還沒(méi)有發(fā)出去。輸入e畔乙,按提示可以編輯相應(yīng)的請(qǐng)求體君仆。編輯完畢后回車(chē),然后輸入a(accept)發(fā)送給服務(wù)器牲距。
服務(wù)器響應(yīng)后返咱,會(huì)有Response,此時(shí)牍鞠,響應(yīng)還沒(méi)有發(fā)給android客戶(hù)端咖摹,可以看到是Response intercepted,代表是被攔截了难述。假如想編輯響應(yīng)萤晴,一樣是輸入e編輯吐句,進(jìn)入編輯模式后,就是跟vi的操作一樣了店读,編輯完后需要wq保存退出嗦枢。然后再輸入a,這時(shí)android客戶(hù)端就會(huì)收到響應(yīng)了屯断。
其他攔截命令:
~q 攔截所有的請(qǐng)求
~c 404 攔截特定的響應(yīng)碼404
~m POST 攔截所有POST請(qǐng)求
更多攔截命令看這里:
https://mitmproxy.org/doc/features/filters.html
更詳細(xì)的抓包過(guò)程也可以看這里:
http://greenrobot.me/devpost/how-to-debug-android-http-get-started/
HTTPS抓包
調(diào)試https請(qǐng)求稍微麻煩一點(diǎn)文虏,需要安裝自定義的SSL證書(shū)≈逞荩可以參考官網(wǎng)的這篇文章:
https://mitmproxy.org/doc/certinstall/android.html
3G/4G抓包
官方?jīng)]有給出解決方案择葡,在網(wǎng)上找了一下,有人通過(guò)手機(jī)的移動(dòng)熱點(diǎn)來(lái)實(shí)現(xiàn)剃氧,需要用到兩臺(tái)安卓手機(jī)敏储,假如為A和B,電腦為C∨蟀埃現(xiàn)在要對(duì)A手機(jī)的HTTP進(jìn)行抓包已添。
①在B中啟用WLAN熱點(diǎn)功能
②A和C連接到B
③在A中設(shè)置代理IP(A的IP地址,通常是192.168.43.xxx )
參考:
http://greenrobot.me/devpost/how-to-debug-http-and-https-traffic-on-android/