跳转到内容
Guides 2 分钟阅读 1536 次浏览

mitmproxy

了解 mitmproxy,高效拦截并分析 HTTP/S 流量。适合调试、安全测试以及优化开发流程。

Security
mitmproxy

mitmproxy 是一款免费开源的交互式控制台工具、Web 界面和 Python 库,用于拦截、检查、修改和重放 HTTP/S 流量。对于处理 Web 应用、API 和移动端流量的开发者、安全研究人员和 QA 工程师来说,它是一个功能强大的中间人(man-in-the-middle)代理。

mitmproxy 概述

mitmproxy 作为代理服务器运行,位于客户端与目标服务器之间。所有经过该代理的 HTTP 和 HTTPS 流量都可以实时查看、过滤和修改。其核心功能支持深入检查请求与响应的头部、正文及其他属性。工具套件包括:

  • mitmproxy:用于实时流量分析的交互式终端界面。
  • mitmweb:基于浏览器的图形界面,功能与 mitmproxy 相似,但通过 Web 浏览器访问。
  • mitmdump:用于以编程方式修改和记录流量的命令行工具,适合脚本化和自动化。

核心功能

SSL/TLS 拦截

mitmproxy 会即时生成自己的 SSL/TLS 证书,从而解密并检查加密的 HTTPS 流量。这要求客户端信任 mitmproxy 的 CA 证书。

交互式界面

mitmproxymitmweb 都提供交互式环境来查看和管理流量。您可以过滤流量、搜索内容、编辑请求/响应,并标记特定流量以便后续分析。

流量修改

可以通过交互式界面或 Python 脚本即时修改请求和响应。这样便可测试边界情况、注入头部、篡改数据或模拟不同的服务器响应。

重放功能

mitmproxy 支持把已录制的客户端请求重放给服务器,或把服务器响应重放给客户端。这有助于在无需重复执行客户端操作的情况下测试特定场景,或模拟服务器行为。

脚本与自动化

mitmdump 提供 Python API,用于开发自定义脚本。这些脚本可按既定逻辑以编程方式检查、修改、重定向或丢弃流量,便于自动化测试和复杂的流量操作。

透明代理模式

mitmproxy 可以运行在透明代理模式下,此时客户端无需显式配置代理。网络流量在网络层被重定向到 mitmproxy,通常通过路由器规则或防火墙配置实现。

安装

可以使用 pip 安装 mitmproxy:

pip install mitmproxy

针对特定操作系统,mitmproxy 官网提供预编译的二进制文件,也可以通过 macOS 上的 Homebrew 等包管理器安装。

基本用法

启动 mitmproxy

启动交互式控制台界面:

mitmproxy

启动 Web 界面:

mitmweb

默认情况下,mitmproxy 监听 localhost:8080

客户端配置

必须把客户端配置为使用 mitmproxy 作为其 HTTP/S 代理。

浏览器示例(Firefox):
1. 打开 Firefox 设置。
2. 进入网络设置或代理设置。
3. 选择“手动配置代理”。
4. 将 HTTP 代理设为 127.0.0.1,端口设为 8080
5. 将 SSL 代理设为 127.0.0.1,端口设为 8080
6. 确保勾选“为所有协议使用此代理服务器”,或对其他协议进行同样的配置。

操作系统(macOS):
1. 进入“系统设置 > 网络 > Wi-Fi > 详细信息”。
2. 选择“代理”。
3. 启用“网页代理(HTTP)”和“安全网页代理(HTTPS)”。
4. 两者的服务器均设为 127.0.0.1,端口均设为 8080

SSL/TLS 证书安装

要解密 HTTPS 流量,客户端必须信任 mitmproxy 的 CA 证书。
1. 在 mitmproxy 运行时,用已配置好的客户端浏览器访问 http://mitm.it
2. 下载并安装适用于该客户端操作系统或浏览器的 CA 证书。
3. 在 Android 或 iOS 等系统上需要特定的安装步骤,通常需要下载证书并在安全设置中手动将其标记为受信任。

进阶用法

修改请求与响应

mitmproxymitmweb 界面中:
1. 选择一条流量记录。
2. 按 e(edit)修改请求或响应。
3. 选择要编辑的部分(例如头部、正文、URL)。
4. 完成修改后按 q 保存并让流量继续。

使用 mitmdump 编写脚本

可以把 Python 脚本传给 mitmdump,实现流量操作的自动化。

示例:修改请求头

modify_header.py

from mitmproxy import http

def request(flow: http.HTTPFlow):
    if "example.com" in flow.request.pretty_host:
        flow.request.headers["X-Modified-By"] = "mitmproxy-script"
        print(f"Modified header for {flow.request.url}")

mitmdump 运行:

mitmdump -s modify_header.py

该脚本会为发往 example.com 的请求添加自定义头部 X-Modified-By

示例:修改响应正文

modify_response.py

from mitmproxy import http

def response(flow: http.HTTPFlow):
    if "api.example.com/data" in flow.request.url and flow.response.content:
        # 假设响应为 JSON
        data = flow.response.json()
        data["status"] = "modified_by_mitmproxy"
        flow.response.set_json(data)
        print(f"Modified response body for {flow.request.url}")

mitmdump 运行:

mitmdump -s modify_response.py

该脚本会拦截来自 api.example.com/data 的响应,将其解析为 JSON,修改其中一个字段,再把修改后的 JSON 发回客户端。

重放流量

mitmproxy 允许重放已捕获的 HTTP 流量。

重放客户端请求:
1. 在 mitmproxymitmweb 中选择一条流量记录。
2. 按 r 将客户端请求重放给服务器。这会原样重发该请求,无需客户端参与。

重放服务器响应:
1. 选择一条流量记录。
2. 按 R(shift+r)将服务器响应重放给客户端。这会把已录制的服务器响应发回客户端,跳过与真实服务器的交互。适合用特定的服务器响应测试客户端行为。

使用场景

  • API 开发与调试:检查请求和响应,以了解 API 行为、验证数据格式并排查集成问题。
  • 安全测试:通过篡改请求(例如注入 SQL、XSS 载荷)发现漏洞,测试身份验证机制,并分析加密流量。
  • 移动应用分析:拦截并分析移动应用的流量,了解其后端通信、数据处理方式以及潜在的安全缺陷。
  • 逆向工程:通过观察网络通信来剖析私有协议,或了解应用如何与远程服务器交互。
  • 自动化测试:用 mitmdump 脚本模拟特定网络状况、模拟 API 响应,或对应用行为执行自动检查。

mitmproxy 与其他代理工具对比

虽然多款工具都提供 HTTP/S 拦截能力,但 mitmproxy 凭借开源属性、强大的脚本能力和灵活的界面脱颖而出。

功能 mitmproxy Burp Suite Community Edition Fiddler(Windows)
许可证 开源(MIT) 专有(免费/付费版本) 专有(免费/付费版本)
脚本能力 Python API(mitmdump 有限(通过 Java/Python/Ruby 扩展) FiddlerScript(JScript.NET)、.NET 扩展
界面 控制台(mitmproxy)、Web UI(mitmweb 桌面 GUI 桌面 GUI
SSL/TLS 完整拦截 完整拦截 完整拦截
流量修改 支持 支持 支持
重放 支持(客户端/服务器) 支持(Repeater) 支持(Composer)
透明代理 支持 支持 支持
目标用户 开发者、安全研究人员、自动化 渗透测试人员、Web 应用安全 开发者、测试人员、Web 应用安全
平台 跨平台(Linux、macOS、Windows) 跨平台(基于 Java) Windows、macOS(通过 Fiddler Everywhere)

这一对比凸显了 mitmproxy 在自动化和开源灵活性方面的优势,使其成为需要深度掌控流量分析流程的技术用户的可靠之选。

已更新: 04.03.2026
返回分类

试用我们的代理

遍布 100+ 国家的 20,000+ 代理

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.