本文对比了一系列抓包工具最后得出一个惊天结论。
一、都有哪些抓包工具?
除了程序员们用得最多的finddler、charles,还有系统级抓包的Wireshark,其它更多的直接用浏览器抓包,亦或一些小众的。
二、哪个最好用?
用得多不代表好用,小众里亦有黄金。
好不容易出了个charles,虽然win和mac都支持,但竟然要收费,一般公司用用破解版的没问题,但涉及到涉密等级高的公司和体制内的公司你敢用破解版软件吗?一般情况下,它确实蛮好用的,颜值高能完全替代finddler,但抓包手机app会出现一些unknow的情况,相信不少小伙伴被整怕了。
抓包工具基本上都是finddler和charles之争,更专业的Wireshark其实大多数人接触不到,只是听过其赫赫威名,有个有意思的现象是,很多同学一旦用过charles再换不回finddler了。
三、哪个适合自动化、爬虫?
上述提到的几个抓包工具都属于exe文件,是需要安装的。可一旦需要在自动化、爬虫领域里规模化应用,那它们都不适用了。
用什么呢?有今天的主角:mitmproxy
mitmproxy 是一款强大的开源抓包工具,支持命令行、Web 界面和 Python 脚本扩展,适合高级用户和开发者进行 HTTP/HTTPS 流量的拦截、分析和修改。以下是其核心功能和使用方法。
四、mitmproxy安装与启动
-
安装(需 Python 3.6+):
pip install mitmproxy
-
三种启动模式:
-
/* by 01022.hk - online tools website : 01022.hk/zh/websocket.html */ mitmproxy
:命令行交互界面(推荐新手)。 -
/* by 01022.hk - online tools website : 01022.hk/zh/websocket.html */ mitmweb
:Web 界面(浏览器访问http://localhost:8081
)。 -
mitmdump
:无界面模式,用于自动化脚本(类似 Tcpdump)。
-
五、基本抓包流程
1. 配置手机 / 浏览器代理
-
确保手机与电脑在同一局域网,获取电脑 IP(如
192.168.1.100
)。 -
手机 Wi-Fi 设置 → 代理 → 手动 → 服务器主机名(电脑 IP)→ 端口(默认
8080
)。
2. 安装证书
-
启动 mitmproxy:
mitmproxy
或mitmweb
。 -
手机浏览器访问: http://mitm.it
,下载对应系统的证书并安装:
-
iOS:设置 → 通用 → 描述文件与设备管理 → 安装证书 → 关于本机 → 证书信任设置 → 信任。
-
Android:设置 → 安全 → 加密与凭据 → 从存储设备安装 → 选择证书。
-
3. 查看流量
-
在 mitmproxy 界面中,使用方向键浏览请求,按
Enter
查看详情,按q
返回列表。 -
在 mitmweb 界面中,浏览器会显示请求列表、响应内容、时间线等可视化数据。
六、Python 脚本扩展
mitmproxy 最强大的功能是通过 Python 脚本实现自动化拦截和修改。
示例 1:修改请求头
创建脚本 modify_headers.py
:
def request(flow): # 添加自定义请求头 flow.request.headers["User-Agent"] = "MitmProxy/1.0" # 重定向请求 if "example.com" in flow.request.url: flow.request.url = flow.request.url.replace("example.com", "test.com")
运行脚本:mitmproxy -s modify_headers.py
示例 2:篡改响应内容
创建脚本 modify_response.py
:
def response(flow): if "json" in flow.response.headers.get("Content-Type", ""): # 修改 JSON 响应 data = flow.response.json() data["modified"] = True flow.response.text = str(data)
示例 3:模拟弱网环境
创建脚本 slow_internet.py
:
from mitmproxy import ctx def request(flow): # 延迟所有请求 2 秒 ctx.master.commands.call("flow.sleep", [flow], 2)
七、高级用法
1. 抓包 HTTPS
-
默认情况下,mitmproxy 会自动解密 HTTPS 流量,需确保:
-
手机已安装并信任 mitmproxy 证书。
-
脚本中未禁用 SSL 验证(如
verify=False
)。
-
2. 多设备同时抓包
-
在电脑上启动 mitmproxy,多个手机 / 设备配置相同的代理(电脑 IP + 8080 端口),流量会汇总显示。
3. 导出数据
-
使用mitmdump将流量保存为 JSON 或 CSV:
mitmdump -w output.json # 保存为 JSON
mitmdump -s "print(request.url)" # 自定义输出
4. 与其他工具集成
-
通过 Python API 将 mitmproxy 集成到自动化测试框架(如 pytest):
from mitmproxy import http def request(flow: http.HTTPFlow) -> None: if flow.request.url.endswith("/api/data"): flow.response = http.HTTPResponse.make( 200, b'{"mitmproxy": "intercepted"}', {"Content-Type": "application/json"})
八、常见问题与解决
-
证书安装失败:
-
确保手机与电脑在同一网络,mitmproxy 正在运行。
-
尝试在手机浏览器中直接访问
http://mitm.it
重新下载证书。
-
-
HTTPS 请求显示为乱码:
-
检查证书是否正确安装并信任。
-
确认应用未使用证书锁定(SSL Pinning),可通过 Frida 等工具绕过。
-
-
性能问题:
-
使用过滤表达式减少不必要的流量(如
~u /api
)。 -
大流量场景建议使用
mitmdump
+ 脚本处理,避免界面卡顿。
-
总结
最强抓包工具非mitmproxy莫属,mitmproxy 适合需要深度定制和自动化的场景,通过 Python 脚本可实现复杂的流量控制和测试逻辑。相比 Fiddler 和 Charles,它更适合技术能力较强的开发者和测试人员。如果需要图形界面和快速上手,可优先使用 Charles;如果需要跨平台和脚本扩展,mitmproxy 是更好的选择。