抓包工具之MitmProxy
前言
作為一名app后端程序員,經常需要對app抓包。說起抓包工具,一般用的是Charles或Fiddler,這兩個非常著名的工具。但有些情況下這兩個工具並不能滿足需求。
場景一:產品或者運營反饋問題時一般都是截圖給開發,然后開發去復現、抓包、解決問題。很多時候開發希望產品或者運營能夠直接給出抓包鏈接便於分析,但是很顯然叫產品或運營去配置這些工具顯然很麻煩,實際情況是寫了文檔照着配依然可能會出錯。
場景二:如果要對抓包的返回結果做進一步的批量處理,此時用Charles或者Fiddler就顯得不太方便了。例如之前很火的沖頂大會,在抓包到請求后能看到答題的題目,此時需要編寫程序去百度搜索答案,給出結果。
MitmProxy是一個能夠在服務器上24小時運行的Linux端抓包工具,支持Python對抓包結果進行處理,可以對特定的網址過濾,支持HTTPS抓包,MitmProxy的抓包結果還能轉換為Charles能打開的文件,便於進一步分析。
安裝
MitmProxy安裝需要python環境,至少是3.5版本的python.一般CentOS自帶的python版本都是2.7,快速安裝python3環境只需要如下幾行命令即可:
CentOS6用戶:
sudo yum install -y https://centos6.iuscommunity.org/ius-release.rpm
sudo yum install -y python35u python35u-pip
CentOS7用戶:
sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm
sudo yum install -y python35u python35u-pip
之后就是安裝MitmProxy,MitmProxy安裝時最好指定版本,不同的版本雖然基本功能是一樣的,但是一些腳本的使用還是有不同,推薦安裝穩定版本。
pip3.5 install mitmproxy==3.0.3
使用
-
啟動mitmproxy
mitmproxy 默認代理端口是8080,可以使用 -p 命令指定一個端口並啟動$ mitmproxy -p 8090
-
配置瀏覽器和手機
- 和手機連接到同一個wifi環境下
- 修改瀏覽器代理服務器地址為運行mitmproxy的那台機器(本機)ip地址,端口設定為你啟動 mitmproxy時設定的端口,如果沒有指定就使用8080。
- 手機做同樣操作,修改wifi鏈接代理為 【手動】,然后指定ip地址和端口
以手機配置為例:
-
安裝CA證書(https抓包用)
在手機或pc機上打開瀏覽器訪問 mitm.it 這個地址,選擇你當前平台的圖標,點擊安裝證書。操作
按鍵 | 說明 |
---|---|
q | 退出(相當於返回鍵,可一級一級返回) |
d | 刪除當前(黃色箭頭)指向的鏈接 |
D | 恢復剛才刪除的請求 |
G | 跳到最新一個請求 |
g | 跳到第一個請求 |
C | 清空控制台(C是大寫) |
i | 可輸入需要攔截的文件或者域名(逗號需要用\來做轉譯,栗子:feezu.cn) |
a | 放行請求 |
A | 放行所有請求 |
? | 查看界面幫助信息 |
^ v | 上下箭頭移動光標 |
enter | 查看光標所在列的內容 |
tab | 分別查看 Request 和 Response 的詳細信息 |
/ | 搜索body里的內容 |
esc | 退出編輯 |
e | 進入編輯模式 |
抓包截圖:
其他
Mitmproxy支持編寫Python腳本對結果進行處理,具體的腳本可以參考github上的官方腳本。
https://github.com/mitmproxy/mitmproxy/tree/master/examples
以har_dump.py這個腳本為例,他的作用是將mitmproxy的抓包結果導出到har文件,以便於Charles能分析,運行以下命令即可一邊抓包,一邊導出文件:
mitmdump -s examples/complex/har_dump.py -w dump.mitm --set hardump=dump.har
更多的用法請參考官方腳本,值得一提的是官方腳本與MitmProxy版本強相關,如果不成功,不妨換個版本試試。
參考鏈接
https://docs.mitmproxy.org/archive/v3
https://github.com/mitmproxy/mitmproxy/tree/master/examples
https://www.jianshu.com/p/0cc558a8d6a2
https://stackoverflow.com/questions/8087184/installing-python-3-on-rhel
鏡像地址
http://www.zhangwei.wiki/#/posts/7