介紹
mitmproxy是Python編寫的一款功能完善的代理工具,mitmproxy是一款支持攔截HTTP和HTTPS請求和響應並即時修改它們的交互式中間人代理工具。同時它提供了Python API給開發者編寫插件用來自定義對流量進行處理和修改。
為什么選擇 mitmproxy
- 相對於我們常用的 fiddle 代理工具,它是可以跨平台;
- 相對於跨平台的 charles 代理工具,它是開源免費的;
- 最重要的一點,也是為什么我們采用 mitmproxy 來進行做 Mock,它支持使用 Python 進行二次開發,這樣就可以結合業務進行靈活拓展了。
mitmproxy 構成
- mitmproxy:是一個控制台工具,允許交互式檢查和修改 HTTP 流量;
- mitmweb:mitmproxy 是基於 Web 的用戶界面,它允許交互式檢查和修改 HTTP 流量;
- mitmdump:mitmproxy 的命令行版本。它提供了類似 tcpdump 的功能,可查看、記錄和以編程方式轉換 HTTP 流量。
安裝
pip3 install mitmproxy
啟動
mitmproxy #或者指定端口 mitmproxy -p 8888
啟動 mitmproxy 之后,默認開啟8080端口, mitmproxy 命令不支持Windows平台,需要使用 mitmdump 或者 mitmweb 命令代替。Windows系統也可以在官網下載它的EXE文件進行安裝。
快速部署
設置本地代理
export http_proxy="127.0.0.1:8080"
拉取mitmproxy鏡像
docker pull mitmproxy/mitmproxy
運行鏡像
docker run --rm -it -p 8080:8080 mitmproxy/mitmproxy mitmproxy
mitmproxy 控制台
快速測試
curl http://readtest.cn/
訪問結果:

注意:現在訪問https無法劫持,需要訪問http://mitm.it 來安裝證書,選擇匹配的平台,下載 HTTPS 證書。並按照對應的步驟進行安裝
mitmproxy 快捷鍵
? 幫助文檔 q 返回/退出程序 b 保存response body f 進入編輯模式,可在最下面輸入過濾條件,ESC或Enter退出編輯
!(~c 200)#顯示所有返回不是200的請求!(~c 200) & ~d safecode#顯示域名包含safecode,返回不是200的請求~m post & ~u safe#顯示請求的鏈接里面包含safe的post請
k 上
j 下
h 左
l 右
space 翻頁
enter 進入接口詳情
z 清屏
e 編輯
r 重新請求
mitmweb
$ mitmweb
啟動 mitmweb 命令后,會有一個類似Chrome開發者工具的Web頁面,功能上類似mitmroxy,一樣可以查看每個請求的詳情,包括請求、響應,還可以對請求和響應內容進行修改,包括過濾、重新發送請求等常用功能。
mitmdump
$ mitmdump -s script.py
mitmdump 命令最大的特點就是可以自定義腳本,你可以在腳本中對請求或者響應內容通過編程的方式來控制,實現數據的解析、修改、存儲等工作
# script.py
from mitmproxy import http def request(flow: http.HTTPFlow) -> None: # 將請求新增了一個查詢參數 flow.request.query["mitmproxy"] = "rocks" def response(flow: http.HTTPFlow) -> None: # 將響應頭中新增了一個自定義頭字段 flow.response.headers["newheader"] = "foo" print(flow.response.text)
官網: https://mitmproxy.org
文檔:http://docs.mitmproxy.org/en/v0.18.2/introduction.html
