抓包工具 mitmproxy
同学们大家好,这个章节我们来介绍一款非常强大的抓包代理工具——mitmproxy。
简介
mitmproxy 是一款开源、免费的代理工具,支持 mac、windows、linux。相比于其他代理工具,可以通过 python 和 mitmproxy 工具本身的插件机制实现通过脚本对 mitmproxy 的完全控制。强大的可拓展性和可定制型,可以让测试工程师以 mitmproxy 工具为基础,进行二次开发,打造更适合自己业务的 mock 工具。
官方网站:https://mitmproxy.org/

先简单介绍下 mitmproxy,它本质上是一个中间人代理(man-in-the-middle),可以拦截浏览器或 APP 与服务器之间的请求和响应。和其他抓包工具比,它最大亮点是可以通过 Python 插件完全控制流程,做脚本化处理,这对测试工程师做自动化调试或搭建业务定制化 mock 环境非常有用。大家如果需要更多的示例可以到官网查看,这里给大家提供了官网的地址。
安装
- 安装包安装
- python 安装:安装好 python 环境(最低要求 python3.6)
pip install pipxpipx install mitmproxy

要使用这个工具,首先需要先安装。我们来看看怎么安装这个工具。它的安装支持很多种方式,第一种可以直接用系统的安装包,也可以在已有 Python 环境里用 pipx 安装(推荐用 pipx 把工具隔离开)。如果用 pipx,先 pip install pipx,再 pipx install mitmproxy。这个方法跨平台方便,便于升级和管理依赖。这里大家要注意,Python 的版本一定要在 3.6 以上。
安装结果验证
输入命令验证是否安装成功:mitmdump --version
# 如果有如下的返回信息,证明环境已经安装成功:
Mitmproxy: 5.2
Python: 3.8.7
OpenSSL: OpenSSL 1.1.1g 21 Apr 2020
Platform: macOS-10.15-x86_64-i386-64bit
安装完可以验证一下:在终端输入 mitmdump --version,如果能看到版本信息输出,就说明安装成功并且运行环境没问题。这一步很重要。如果遇到问题也不要慌,可以看这条输出里有没有缺少依赖或版本不兼容的提示。
证书配置
mitmproxy 的证书配置过程与 charles 类似。
接下来还有非常重要的一个步骤。因为 mitmproxy 要拦截 HTTPS 流量,需要在客户端信任它的根证书,没有安装证书就抓不到 HTTPS 内容。证书安装整个流程和 Charles 很像,需要先启动代理、在客户端访问证书下载地址下载证书并安装信任。下面我们来看看具体流程。
pc 端配置网络代理
- ip 配置:
127.0.0.1 - 端口配置:8080(mitmproxy 默认监听端口)
Windows 配置
macOS 配置
第一步,先在电脑上把系统或浏览器的代理设置指向 127.0.0.1、端口指定为 mitmproxy 监听的端口,默认 8080。在 Windows / macOS 上设置方法有差别,但思路一致:让流量先经过 mitmproxy。演示时最好现场切换一个浏览器代理,展示网络请求被中间人拦截的效果。
下载证书
- 启动 mitmprxy 工具。
- 在浏览器输入地址 mitm.it,显示效果如果和图中类似,证明前面的步骤都成功了。
- 选择对应系统下载证书。

启动 mitmproxy 后,在浏览器地址栏打开 mitm.it,页面会展示不同平台的证书下载链接。选择对应系统下载并安装。我们这里点击 macOS 的按钮下载和我的系统匹配的证书。
MacOS 证书安装信任
打开证书(Mac 系统为钥匙串访问)->点击证书->双击名称含有 mitmproxy 的选项->点击信任->选择始终信任。

在 macOS 上下载证书后,会在「钥匙串访问」中打开证书,双击证书名称,然后把信任设置改为“始终信任”。如果不把证书设为信任,浏览器仍然会提示证书不受信任,从而无法正常抓取 HTTPS 内容。而且 macOS 的隐私与系统更新有时会影响证书信任,遇到问题先检查钥匙串里的设置。
Windows 证书安装信任

Windows 证书安装的流程也类似:下载证书后导入到受信任的根证书颁发机构(Trusted Root Certification Authorities)。导入的时候需要管理员权限,这点大家需要注意。
手机端证书(安卓系统 7.0 以下)
- 在手机配置代理,ip 配置为电脑的 ip 地址,端口配置为 mitmproxy 监听端口,默认 8080。
- 启动 mitmprxy。
- 在手机浏览器输入地址 mitm.it。
- 选择 Android,下载并安装,即可成功抓取手机端的 https 的数据包。

如果是在移动端安装证书,如果是 Android 7.0 以下的系统版本,可以按照这个步骤。首先需要先配置手机上的网络代理,然后在手机浏览器打开 mitm.it 下载 Android 证书并安装。这个操作要注意这几点:第一,确保手机和电脑在同一局域网;第二,安卓 7+ 对用户证书限制更严格,某些应用会屏蔽用户 CA,需要额外处理或用调试构建的 APK。
mumu 模拟器(7.0 +)证书安装
- 电脑下载 Android 证书:
mitmproxy-ca-cert.cer - 执行命令:
openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer - 将证书改名为:c8750f0d.0

adb kill-server
# Windows 系统执行
# adb connect 127.0.0.1:7555
adb devices
adb push c8750f0d.0 /system/etc/security/cacerts
adb shell "chmod 664 /system/etc/security/cacerts/c8750f0d.0"
三大核心工具
mitmproxy 有三大核心工具,分别为 mitmproxy、mitmweb、mitmdump。mitmdump 是 mitmproxy 相比于其他代理工具最独一无二的部分,所以会以 mitmdump 的介绍为主。

根据前面的步骤,我们就已经把工具安装好了,证书也配置好了,接下来我们来认识一下安装好的工具。mitmproxy 家族有三把利器:mitmproxy 是交互式终端,mitmweb 是基于浏览器的可视化界面,而 mitmdump 才是我们最需要的命令行模式,适合脚本化与批处理。这些工具可以使用在不同的场景下:日常手工调试可用 mitmweb,交互式修改用 mitmproxy,而自动化与插件开发重度依赖 mitmdump。接下来我们分别查看一下这些工具。
mitmproxy
是一款交互式的命令行工具,通过命令mitmproxy启动,需要注意的是 mitmproxy 不支持 windows 系统。下图为 mitmproxy 启动后的效果图:

mitmproxy 是一个交互式 CLI 工具,可以在终端里查看请求、修改内容并实时恢复。它支持键盘交互,适合在终端中快速浏览和手动修改流量。不过要注意,mitmproxy 客户端本身并不支持 Windows,在 Windows 上通常使用 mitmweb 或 mitmdump。
mitmweb
在 mitmweb 的图形界面中使用 mitmproxy 的主要功能,通过命令mitmweb启动。它和 Chrome 开发者工具中的 network 比较类似。下图为 mitmweb 启动后的效果图:

mitmweb 启动后会在本地打开一个网页界面,它在体验上更像浏览器的 Network 面板,界面直观,便于查看请求详情和响应内容,适合不熟悉命令行的同学。下面我们来看下 mitmweb 中搜索请求、查看 headers、保存 HAR、甚至回放请求。
mitmdump
用 mitmdump 编写强大的插件和脚本。 mitmproxy 脚本 API 提供了对 mitmproxy 的完全控制,可以自动修改消息、重定向流量、可视化消息或实现自定义命令。后面会通过实战具体介绍 mitmdump 的使用。

mitmdump 是 mitmproxy 中最强大的部分之一:我们写 Python 写脚本来自动修改请求/响应、记录流量、实现复杂的 mock 逻辑,并在命令行里运行这些脚本。对做自动化测试或需要按业务规则改写请求的场景特别有价值。具体的用法,我们会在后面的章节给大家做介绍。
总结
- 工具安装
- 证书配置
- 工具界面
好了,关于 mitmproxy 就先给大家介绍这么多。我们来总结一下。使用 mitmproxy 的流程主要包括三步 —— 安装工具、配置并信任证书、选择合适的界面或组件(mitmproxy/mitmweb/mitmdump)来完成抓包、分析和脚本化处理。它适合从单次抓包调试到搭建复杂自动化 mock 平台的各种需求,是测试工程师非常值得掌握的一把利器。