一、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的深度集成,开发者可以构建从流量捕获、修改到分析的完整处理链路,显著提升研发效率。建议结合具体业务场景,逐步构建企业级流量处理平台。