一、Mitmproxy簡介
Mitmproxy是一款開源的交互式HTTPS代理工具,支持攔截、修改和重放HTTP/HTTPS流量。其核心優勢在于:
- 多平臺支持:兼容Windows、macOS、Linux
- 三端工具:提供命令行(mitmproxy)、Web界面(mitmweb)、數據流處理(mitmdump)
- Python集成:通過API可實現高度定制化的流量處理
- SSL/TLS支持:自動生成證書實現HTTPS解密
二、安裝與配置
2.1 環境準備
# 安裝Python 3.8+(以Windows為例)
# 官方下載地址:https://www.python.org/downloads/
# 配置環境變量后執行
pip install mitmproxy
mitmdump --version # 驗證安裝
2.2 證書安裝
- 啟動代理服務:
mitmdump -p 8080
- 移動端配置:
- 手機連接與PC同網段的WiFi
- 設置代理:IP為PC地址,端口8080
- 瀏覽器訪問http://mitm.it下載對應平臺證書
三、核心功能詳解
3.1 流量攔截與修改
基礎模板:
from mitmproxy import http, ctxclass RequestModifier:def request(self, flow: http.HTTPFlow):# 修改請求頭flow.request.headers["User-Agent"] = "MitmProxy/1.0"# 修改GET參數if "orderNo" in flow.request.query:flow.request.query["orderNo"] = "NEW_ORDER_ID"def response(self, flow: http.HTTPFlow):# 篡改響應內容if "error" in flow.response.text:flow.response.text = '{"status":"success"}'addons = [RequestModifier()]
3.2 數據持久化存儲
import json
from mitmproxy import httpclass DataLogger:def response(self, flow: http.HTTPFlow):data = {"url": flow.request.url,"method": flow.request.method,"status": flow.response.status_code,"content": json.loads(flow.response.text)}with open("api_logs.json", "a") as f:json.dump(data, f)f.write("\n")
3.3 自動化測試用例生成
import csv
from mitmproxy import httpclass TestCaseGenerator:def __init__(self):self.csvfile = open('test_cases.csv', 'w', newline='')writer = csv.writer(self.csvfile)writer.writerow(["URL", "Method", "Request", "Expected"])def response(self, flow: http.HTTPFlow):writer = csv.writer(self.csvfile)writer.writerow([flow.request.url,flow.request.method,flow.request.text,flow.response.status_code])def done(self):self.csvfile.close()
四、實戰場景
4.1 電商API壓力測試
from mitmproxy import http
import timeclass StressTester:def __init__(self):self.start_time = time.time()def response(self, flow: http.HTTPFlow):elapsed = time.time() - self.start_timectx.log.info(f"API {flow.request.url} 響應時間: {elapsed:.2f}s")if flow.response.status_code >= 500:ctx.log.error(f"服務異常: {flow.response.text}")
4.2 社交APP數據脫敏
import re
from mitmproxy import httpclass DataMasker:PHONE_RE = re.compile(r'1\d{10}')def response(self, flow: http.HTTPFlow):if "user_profile" in flow.request.url:mask_text = self.PHONE_RE.sub("138****0000", flow.response.text)flow.response.text = mask_text
五、高級技巧
5.1 流量重放攻擊
# 保存流量到文件
mitmdump -w traffic.dump# 后續重放
mitmdump -n -r traffic.dump -s replay_script.py
5.2 混合使用BurpSuite
# BurpSuite配置upstream代理
mitmdump --mode upstream:http://localhost:8080 --set upstream_cert=true
六、最佳實踐
-
安全建議:
- 測試環境使用自簽名證書
- 生產環境禁用Mitmproxy
- 定期輪換CA證書
-
性能優化:
# 使用并發處理提升性能 from mitmproxy.script import concurrentclass ConcurrentHandler:@concurrentdef response(self, flow):# 高并發場景下的處理邏輯
-
調試技巧:
# 啟動時增加日志級別 mitmweb -v --set console_eventlog_verbosity=debug
七、總結
Mitmproxy作為功能強大的流量分析工具,在以下場景展現獨特價值:
- 接口測試:自動化生成測試用例
- 安全審計:發現敏感信息泄露
- 性能優化:定位慢查詢接口
- 協議分析:研究未知API結構
通過Python API的深度集成,開發者可以構建從流量捕獲、修改到分析的完整處理鏈路,顯著提升研發效率。建議結合具體業務場景,逐步構建企業級流量處理平臺。