这篇文章主要介绍了 mitmproxy 这款功能强大且免费开源的网络抓包工具。它通过本地建立透明代理,拦截并解密客户端与服务端之间的 HTTP/HTTPS 流量,支持实时查看、修改和重放请求与响应数据。mitmproxy 提供了三种交互模式:终端界面 mitmproxy、可视化界面 mitmweb 和命令行工具 mitmdump,同时支持 Python 脚本扩展,适合自动化测试和复杂逻辑处理。
文章详细介绍了 mitmproxy 的功能特色,包括全方位的流量拦截与分析、深度的交互式篡改与重放、强大的脚本自动化扩展、灵活的多模式交互方案以及多协议与透明代理支持。此外,mitmproxy 还具备开源与跨平台兼容性,能够在 Windows、macOS 和 Linux 上完美运行。
文章还提供了 mitmproxy 的使用简介,包括启动软件、配置代理、安装 CA 证书等关键步骤,并列举了其在移动端 APP 开发与调试、接口逆向工程与数据爬取、前端与后端数据实时篡改以及自动化测试等多个场景中的应用。最后,更新日志部分提到了一些重要的修复和优化。
作为一名开发者,我觉得 mitmproxy 的功能非常强大,尤其是它支持 Python 脚本扩展和多协议流量分析的特点,对于进行接口测试和安全漏洞挖掘非常有帮助。

功能特色
【全方位的流量拦截与分析】
能够实时捕获 HTTP、HTTPS、HTTP/2 以及 WebSocket 流量。通过其强大的解密能力,用户可以深入观察请求与响应的所有细节,包括 Header、Cookie、查询参数以及 Payload。
【深度的交互式篡改与重放】
用户可以在请求发送给服务器之前,或响应返回给客户端之前手动拦截并修改数据。同时支持“重放”功能,无需重新操作客户端即可多次触发同一网络请求,极大地方便了接口调试。
【强大的脚本自动化扩展】
这是其区别于同类工具的最大亮点。它提供了一套完整的 Python API,允许开发者编写自定义脚本来处理流量。无论是自动篡改特定字段、记录统计数据,还是模拟复杂的服务器行为,都可以通过 Python 插件轻松实现。
【灵活的多模式交互方案】
提供了三种不同的使用体验。终端界面适合键盘流高效操作;基于浏览器的 UI 界面适合习惯图形化操作的用户;则专门用于命令行流水线和后台自动化任务。
【多协议与透明代理支持】
除了基础的正向代理,它还支持透明代理、反向代理以及上游代理模式。这使得它能够轻松接入各种复杂的网络环境,甚至在无法手动配置代理的设备上进行流量抓取。
【开源与跨平台兼容性】
作为一款成熟的开源工具,它在 Windows、macOS 和 Linux 上均能完美运行,且安装配置流程简洁,配合自签名的 CA 证书即可快速搭建起安全的调试环境。
mitmproxy使用简介
1、启动软件
推荐使用 mitmweb 模式,它会启动一个网页界面,操作最直观:
启动: 打开CMD或PowerShell,输入mitmweb并回车。
访问: 程序会自动打开浏览器跳转至http://127.0.0.1:8081(这是管理界面)。
代理端口: 软件默认监听 8081 端口进行 Web 展示,监听 8080 端口接收流量。
2、配置代理(关键步骤)
要让流量经过 mitmproxy,必须设置客户端的代理服务器:
本机浏览器: 将系统代理或浏览器代理插件设置为 127.0.0.1:8080。
移动端 (Android/iOS): 确保手机与电脑在同一 Wi-Fi 下,在手机 Wi-Fi 设置中手动配置代理,IP 为电脑的局域网 IP,端口为 8080。
3、安装 CA 证书(解密 HTTPS)
如果不安装证书,所有的 HTTPS 流量都会显示为“加密连接错误”:
在配置好代理的设备上,访问网页:mitm.it。
根据你的操作系统(Windows, Android, iOS)下载对应的证书。
安装并信任: Windows需放入“受信任的根证书颁发机构”。
Android 需在安全设置中安装(部分高版本系统需 Root 权限移动证书至系统区)。
iOS 需在“设置 -> 通用 -> 关于本机 -> 证书信任设置”中手动开启。
4、核心操作
在mitmweb的网页界面中,你可以执行以下操作:
查看流量: 左侧列表显示所有请求,点击可查看具体的 Request(请求)和 Response(响应)详情。
过滤: 在顶部的 Filter 框输入关键词(如 google),只看特定域名的请求。
断点调试: * 在 Intercept 框输入过滤规则。
当符合条件的请求发出时会“暂停”,你可以手动修改数据包的内容,然后点击 Resume 继续发送。
重放: 选中一个请求,点击 Replay 按钮(通常是一个循环箭头图标),可以不通过操作手机直接重新发起该请求。
使用场景
1、移动端 APP 开发与调试
这是它最常用的场景。当你开发手机 APP 时,需要观察 APP 与后端服务器的通信:
查看 API 调用: 检查请求参数(Headers, JSON Body)是否正确,验证服务器返回的数据格式是否符合预期。
模拟弱网/异常环境: 通过脚本模拟网络延迟、丢包,或者强制服务器返回 404、500 等错误码,测试 APP 在极端情况下的稳定性。
排查加密数据: 即使 APP 使用了 HTTPS,通过安装证书也能轻松查看明文数据。
2、接口逆向工程与数据爬取
如果你想了解某个第三方 APP(如外卖、社交软件)的数据是如何传输的:
协议分析: 分析加密算法、签名逻辑(Sign)或隐藏的 API 接口。
自动化采集: 配合 mitmdump 和 Python 脚本,可以在流量经过时自动过滤并保存你感兴趣的数据(如商品价格、用户信息)到数据库,实现“边用 APP 边爬虫”。
3、前端与后端数据的“实时篡改”
这正是其“交互式”特色的体现:
Mock 数据: 无需修改后端代码,直接拦截服务器返回的 JSON,修改其中的数值(如将账户余额从 0 改为 999999),查看前端 UI 的显示效果。
参数绕过测试: 在发送请求前,拦截并修改前端发出的参数(例如修改订单金额、修改用户等级),测试后端是否存在安全校验漏洞。
4、自动化测试与集成
脚本化工作流: 利用 Python 插件,可以实现完全自动化的测试。例如:自动拦截所有包含特定 Token 的请求并替换为过期的 Token,测试系统的鉴权逻辑。
流量回放: 记录一段真实的操作流量,然后在测试环境下反复重放,确保新版本的代码没有破坏原有的接口逻辑。
更新日志
v12.2.2版本
GHSA-527g-3w9m-29hv:修复@yueyueL报告的LDAP注入漏洞。(#8178,@mhils)
将CERT_EXPIRY缩短至199天。(#8142,@opstic)
默认情况下,将所有内容编码压缩算法切换为使用最快设置。这会在分配给`message.content`时显著提高插件的运行时性能。(#8055,@Prinzhorn)
修复了插件选项未包含在 --options 输出中的问题。(#4423,@emanuele-em)
修复`view.settings.setval.toggle`命令,使其正确使用提供的`key`参数,而不是硬编码的字符串`"key"`。(#8167,@nameearly)
修复了使用大写方案(例如HTTP://)的HTTP请求返回400错误请求的问题。(#8174,@emanuele-em)
修复了控制台命令面板因传入流量(如WebSocket消息)而失去焦点的问题。(#8173,@emanuele-em)
mitmdump:修复了未显示的失败CONNECT请求。(#7083,@Prinzhorn)
mitmweb:将FlowTable Redux订阅从O(行数)降低到O(1)。(#8104, @ariel42)
mitmweb:修复编辑器不允许将内容清空为空字符串的问题(#8149,@ariel42)
更新optmanager值解析异常,以包含选项名称(#8016,@zdwg42)
mitmweb:在底部显示默认选项的拦截过滤器标签(#8026,@xBZZZZ)
修复了mitmweb在Windows上显示空白页的错误。(#8041,@Prinzhorn)
mitmweb:在页脚中添加选定流的数量(#8057,@skrattara)
修复了当替换字符串包含反斜杠序列时,modify_body函数崩溃的问题。(#8046,@HueCodes)
在mitmproxy控制台中,新增了对单个流程添加和编辑评论的支持。(#7944,@lups2000)
允许使用“H”键在mitmproxy控制台中隐藏快速帮助用户界面。(#8095,@seroperson)
使用Skylos移除了几个无用的函数。(#8136,@duriantaco)














共有 0条评论