Mitmproxy - Python抓包神器
做App爬虫、Web接口调试的时候,你是不是经常遇到这些痛点?
- Fiddler:主打Windows,Mac/Linux体验一般,扩展性有限;
- Charles:功能全面但收费不菲;
- tcpdump/Wireshark:纯命令行操作,手动筛选HTTP/HTTPS流量繁琐且不直观。
Mitmproxy 完美填补了这些空白——它是一款基于Python编写的免费开源、跨平台、支持Python脚本深度定制的交互式HTTP/HTTPS代理。无论是临时抓接口,还是搭建自动化爬取/流量修改管线,它都是开发者与爬虫er的首选神器。
本文将带你从安装、基础模式,到动手打造一个App定向流量拦截脚本,最后分享一些实战中总结出的最佳实践,一次搞定Mitmproxy的核心用法。
一、安装与三种运行模式
Mitmproxy 核心提供了三个独立工具,覆盖从可视化操作到自动化脚本的不同场景:
1.1 安装
只需一条 pip 命令即可,建议使用 Python 3.8 及以上版本:
1.2 模式一览
三种模式各有侧重:mitmweb 适合新手快速查看请求;mitmproxy 让老手在终端中高效操作;mitmdump 则是自动化处理流量的基石。下面我们通过脚本实战深入第三种模式。
二、实战脚本:App定向流量拦截与分析
下面这个脚本是一个为App爬虫量身打造的核心工具,它具备以下能力:
- 自动识别包含
api、mobile、app、sdk、analytics等关键词的请求; - 完整提取请求与响应数据(包括 JSON、Headers、Query 参数);
- 自动将结果保存到本地 JSON 文件;
- 统计 API 调用次数及异常状态码。
将代码保存为 app_traffic_analyzer.py 即可使用。
三、完整使用流程
从启动代理到查看结果,只需三步。
3.1 启动脚本代理并配置设备
(1)启动 mitmdump
在终端执行以下命令,载入刚才编写的脚本并监听 8080 端口:
请牢记代理运行的设备 IP:
- 如果在本机抓浏览器流量,IP 就是
127.0.0.1; - 如果要抓手机 App,需要填写电脑在局域网中的 IP(Windows 用
ipconfig,Mac/Linux 用ifconfig查看)。
(2)为浏览器或手机配置代理
- 浏览器:进入浏览器设置 → 网络 → 代理,选择手动配置 HTTP/HTTPS 代理,填入 IP 和端口
8080。 - 手机:
- iOS:
设置→无线局域网→ 点击当前连接的 Wi-Fi 右侧的ⓘ→配置代理→手动,填入 IP 和端口。 - Android:
设置→WLAN→ 长按当前 Wi-Fi →修改网络→高级选项→代理→手动,填入 IP 和端口。
- iOS:
3.2 安装并信任 Mitmproxy CA 证书(抓取 HTTPS 必做)
配置好代理后,在浏览器或手机浏览器中访问 mitm.it,按提示下载对应平台的证书并进行信任。
-
iOS 特别注意:
- 安装描述文件后,前往
设置→通用→VPN 与设备管理信任该描述文件。 - 再到
设置→通用→关于本机→证书信任设置,完全信任 Mitmproxy CA 证书。
- 安装描述文件后,前往
-
Android 7.0+ 特别注意: 系统默认不信任用户安装的证书,有两种主流方案:
- 非 Root 友好型:使用 VirtualXposed、太极等虚拟环境,将目标 App 放入虚拟环境中,仅信任虚拟环境的用户证书。
- Root 方案:将下载的证书文件放入
/system/etc/security/cacerts/目录,权限设为644。
3.3 开始抓包并查看结果
配置完成后,正常操作目标 App 或网页。mitmdump 的终端会实时打印出捕获的请求与响应日志。
抓包结束后,按 Ctrl+C 停止脚本,前往 mitmproxy_analysis 目录,就能看到按时间戳命名的 JSON 文件,里面包含了所有命中的请求和响应数据,方便进一步分析。
四、进阶与最佳实践
-
精准定制目标特征
脚本中的target_features涵盖了常见 App 接口特征,但在实际场景中建议根据具体目标微调。可以先在mitmweb中快速抓一波流量,锁定目标 App 的固定域名、UA 特征或路径关键词,再将其填入脚本中,避免干扰。 -
功能扩展
你可以在request或response方法中添加更多逻辑,例如:- 动态修改请求头或参数,测试接口边界;
- 自动提取 JSON 中的关键字段(如 Token、商品列表、用户信息);
- 将数据实时写入 MongoDB、MySQL 等数据库,构建立持续积累的分析库。
-
移动端抓包避坑指南
- iOS 设备务必与代理机器在同一局域网,并已完成证书信任;
- Android 应用如果开启了 SSL Pinning(证书绑定),常规代理将无法抓取 HTTPS 请求。此时可尝试使用 Frida 脱壳并 Hook SSL Pinning 验证函数,或借助 VirtualXposed 等工具绕过。
掌握以上方法,Mitmproxy 就能成为你手中最灵活的网络分析利器。无论是临时调试接口,还是构建自动化爬虫管线,它都能提供强大而自由的网络流量分析能力。快打开终端,用一段 Python 脚本解锁你的专属抓包体验吧!

