LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

[点晴永久免费OA]mitmproxy像黑客一样看网络流量

admin
2026年7月30日 10:25 本文热度 49

mitmproxy 完全上手指南:像黑客一样看网络流量

想象一下:你点了一杯奶茶,店员把制作过程全透明地展示给你看——mitmproxy 就是网络世界的"透明厨房"。它让你看清每一个 HTTP/HTTPS 请求从发出到返回的完整旅程,还能随时"动手脚"。


一、mitmproxy 是什么?

mitmproxy(Man-In-The-Middle Proxy,中间人代理)是一套开源的交互式网络流量拦截与分析工具。简单来说,它就像一个网络世界的翻译官兼窃听器——所有经过它的 HTTP/HTTPS/WebSocket 流量,你都能看、能改、能保存、能回放。

它包含三个核心工具,对应三种使用场景:

工具
界面类型
适用场景
mitmproxy
终端交互界面(TUI)
喜欢键盘操作、需要快速交互修改的极客
mitmweb
浏览器图形界面(Web UI)
习惯鼠标操作、喜欢可视化界面的用户
mitmdump
纯命令行输出
自动化脚本、后台记录、批量处理

打个比方:mitmproxy 像 Vim(高效但需学习),mitmweb 像 VS Code(直观易用),mitmdump 像 curl(命令行利器)。


二、安装:一分钟搞定

Windows(推荐)

  1. 访问 mitmproxy.org(https://mitmproxy.org/) 下载安装包
  2. 安装后自动加入系统 PATH
  3. 强烈建议同时安装 Windows Terminal(https://aka.ms/terminal) 以获得最佳终端显示效果
# 验证安装
mitmproxy --version

macOS

brew install --cask mitmproxy

Linux

推荐下载官方独立二进制包(避免发行版仓库版本滞后):

# 或使用 uv 安装(推荐)
uv tool install mitmproxy

Docker(跨平台通用)

docker run --rm -it -p 8080:8080 mitmproxy/mitmproxy

三、核心概念:先搞懂这些再动手

3.1 代理模式:mitmproxy 的"工作姿势"

mitmproxy 支持多种代理模式,就像同一个人可以穿不同衣服干不同活:

模式
启动方式
适用场景
常规代理
(默认)
mitmproxy
浏览器/应用可手动设置代理的场景
本地捕获mitmproxy --mode local
捕获本机指定进程流量(无需配置代理)
WireGuardmitmweb --mode wireguard
捕获手机/外部设备流量
反向代理mitmdump --mode reverse:https://example.com
放在服务器前面做流量分析
透明代理mitmdump --mode transparent
网络层拦截,客户端零配置

新手建议:从常规代理模式开始,配置简单、最稳定。

3.2 证书:HTTPS 拦截的"通行证"

HTTPS 流量是加密的,mitmproxy 要"看懂"内容,必须扮演"中间人"角色——它自己生成证书,分别与客户端和服务器建立 TLS 连接。

首次使用必做

  1. 启动 mitmproxy
  2. 配置浏览器代理为 127.0.0.1:8080
  3. 浏览器访问 http://mitm.it
  4. 按页面提示下载并安装对应系统的 CA 证书

这个证书安装过程,就像你给 mitmproxy 发了一张"网络交警证",浏览器才会信任它出具的"临时通行证"。

证书文件位置~/.mitmproxy/

文件名
用途
mitmproxy-ca-cert.pem
Linux/macOS 安装
mitmproxy-ca-cert.p12
Windows 安装
mitmproxy-ca-cert.cer
Android 设备

四、快速上手:从启动到抓到第一个包

4.1 启动 mitmproxy(终端交互版)

# 默认启动,监听 8080 端口
mitmproxy

# 指定端口
mitmproxy -p 8888

# 只拦截特定域名
mitmproxy --set intercept="~d example.com"

启动后你会看到一个终端界面:

  • 上下方向键
    :浏览请求列表
  • Enter
    :查看请求详情
  • ?
    :查看当前界面的快捷键帮助
  • q
    :返回/退出
  • i
    :设置拦截规则

4.2 启动 mitmweb(浏览器图形版)

mitmweb

自动打开浏览器,访问 http://127.0.0.1:8081,即可看到图形界面。左侧是请求列表,右侧是详情面板。

4.3 启动 mitmdump(命令行记录版)

# 实时查看流量
mitmdump

# 保存到文件
mitmdump -w traffic.mitm

# 只显示特定流量
mitmdump "~d api.example.com"

4.4 配置浏览器代理

Chrome/Edge(命令行启动)

# Windows
chrome.exe --proxy-server="127.0.0.1:8080"

# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --proxy-server="127.0.0.1:8080"

Firefox: 设置 → 网络设置 → 手动代理配置 → HTTP 代理填 127.0.0.1,端口 8080

系统全局代理(Windows): 设置 → 网络和 Internet → 代理 → 手动设置代理 → 地址 127.0.0.1,端口 8080

4.5 验证是否成功

  1. 确保 mitmproxy 正在运行
  2. 浏览器已配置代理
  3. 访问 https://mitmproxy.org
  4. 在 mitmproxy/mitmweb 界面中应该能看到这条请求

五、实用技巧:让 mitmproxy 为你干活

5.1 过滤流量:大海捞针的筛子

mitmproxy 的过滤器非常强大,语法简洁:

~d example.com        # 匹配域名
~m GET                # 匹配 HTTP 方法
~u /api/v1            # 匹配 URL 路径
~s                    # 只显示有响应的请求
~q                    # 只显示请求(无响应)
~b "password"         # 匹配 body 内容
~h "Content-Type"     # 匹配 header
~c 200                # 匹配状态码

组合使用:

~d api.example.com & ~m POST    # api.example.com 的 POST 请求
~d google.com | ~d github.com   # google 或 github 的请求
!(~q & ~t "text/html")         # 排除 text/html 的请求

5.2 修改请求/响应:实时"动手脚"

在 mitmproxy 交互界面中:

  1. 选中一个请求,按 Enter 进入详情
  2. 按 e 编辑,选择 request headers 或 response body
  3. 修改内容后保存,mitmproxy 会自动发送修改后的请求/响应

命令行批量修改(无需交互):

# 修改请求头
mitmdump --modify-headers "/~q/Host/example.org"

# 修改响应体,将 foo 替换为 bar
mitmdump --modify-body "/~s/foo/bar"

# 添加自定义响应头
mitmdump --modify-headers "/~s/X-Debug/enabled"

5.3 Map Local:用本地文件替换线上资源

前端开发神器——把线上 JS/CSS 替换为本地修改版:

# 将 example.com/main.js 替换为本地文件
mitmdump --map-local "|example.com/main.js|~/projects/fix/main.js"

# 将整个静态目录映射到本地
mitmdump --map-local "|example.com/static|~/local-static"

5.4 Map Remote:请求转发到另一个地址

# 把所有 .jpg 请求重定向到占位图
mitmdump --map-remote "|.*\.jpg$|https://placedog.net/640/480?random"

# 把测试环境 API 指向本地
mitmdump --map-remote "|//api.example.org/|//localhost:3000/"

5.5 录制与回放:时间的"倒带键"

# 录制流量
mitmdump -w session.mitm

# 回放客户端请求(模拟用户操作)
mitmdump -nC session.mitm

# 服务端回放(用保存的响应直接返回,不访问真实服务器)
mitmdump --server-replay session.mitm

# 过滤后保存
mitmdump -nr session.mitm -w filtered.mitm "~m POST"

5.6 使用 Python 脚本:无限扩展

mitmproxy 最强大的地方在于可以用 Python 脚本自定义行为:

# add_header.py
from mitmproxy import http

def response(flow: http.HTTPFlow) -> None:
    flow.response.headers["X-Proxy-By"] = "mitmproxy"

运行:

mitmdump -s add_header.py

常用脚本场景

  • 自动添加/删除请求头
  • 响应内容动态修改
  • 特定条件触发报警
  • 流量数据导出到数据库

六、高级模式:按需选用

6.1 本地捕获模式(Local Capture)

无需配置浏览器代理,直接捕获本机进程流量:

# 捕获本机所有流量
mitmproxy --mode local

# 只捕获 curl 的流量
mitmproxy --mode local:curl

# 捕获指定 PID 的进程
mitmproxy --mode local:1234

# 排除特定进程
mitmproxy --mode local:!chrome

这个模式就像给指定 App 装了一个"专属监控",其他应用的流量完全不受影响。

6.2 WireGuard 模式:手机抓包神器

mitmweb --mode wireguard
  1. 启动后会在 ~/.mitmproxy/wireguard.conf 生成配置
  2. 手机安装 WireGuard App
  3. 扫码或导入配置文件
  4. 手机所有流量自动经过 mitmproxy

无需在手机上安装证书到系统目录(部分手机需 Root),也无需配置代理,是最优雅的手机抓包方案。

6.3 反向代理模式

# 把访问本地 8080 的请求转发到 example.com
mitmdump --mode reverse:https://example.com

# 同时监听 80 和 443
mitmdump --mode reverse:https://example.com@80 --mode reverse:https://example.com@443

适用场景:

  • 在本地调试线上域名的问题
  • 给没有 HTTPS 的服务快速加上 TLS
  • 分析特定服务器的入站流量

七、避坑指南:新手常见问题

7.1 看不到任何流量

  • 检查浏览器/系统代理是否配置正确
  • 确认 mitmproxy 监听的 IP 和端口与代理设置一致
  • 查看 mitmproxy 事件日志,确认有 client connect 消息
  • 检查网络是否启用了客户端隔离(client isolation)

7.2 HTTPS 网站显示证书错误

  • 确认已访问 mitm.it(http://mitm.it) 并正确安装 CA 证书
  • iOS 设备:安装后还需在"设置 → 通用 → 关于本机 → 证书信任设置"中启用完全信任
  • Android 7.0+:应用默认不信任用户安装的证书,需使用 WireGuard 模式或 Root 后安装到系统证书目录

7.3 某些 App 无法代理

  • 部分 App 会绕过系统代理设置(尤其是 Android App)
  • 解决方案:使用 --mode local 或 --mode wireguard
  • 部分 App 使用证书固定(Certificate Pinning),需额外工具绕过

7.4 内存占用过高

  • mitmproxy/mitmweb 默认将所有流量保存在内存中
  • 长时间抓包请使用 mitmdump 并配合 -w 写入文件
  • 使用 --set stream_large_bodies=5m 开启大文件流式传输

八、常用命令速查表

# ========== 基础启动 ==========
mitmproxy                    # 终端交互界面
mitmweb                      # Web 界面
mitmdump                     # 命令行输出

# ========== 常用选项 ==========
-p 8888                      # 指定监听端口
--set intercept="~d api.example.com"   # 设置拦截规则
-w file.mitm                 # 保存流量到文件
-r file.mitm                 # 从文件读取流量
-n                           # 不启动代理(仅处理文件)

# ========== 修改流量 ==========
--modify-headers "/~q/Host/example.com"
--modify-body "/~s/old/new"
--map-local "|url|local-path"
--map-remote "|url|new-url"

# ========== 回放 ==========
-C file.mitm                 # 客户端回放
--server-replay file.mitm    # 服务端回放

# ========== 脚本 ==========
-s script.py                 # 加载 Python 脚本

# ========== 代理模式 ==========
--mode local                 # 本地捕获
--mode wireguard             # WireGuard VPN
--mode reverse:https://target.com   # 反向代理
--mode transparent           # 透明代理(Linux/macOS)

小结

mitmproxy 是网络调试领域的"瑞士军刀"——它不仅能清流量,还能流量、流量、放流量。无论是前端调试 API、安全研究员分析通信协议,还是开发者排查网络问题,mitmproxy 都能胜任。

一句话总结:装一个 mitmproxy,等于同时拥有抓包工具 + 代理服务器 + 请求修改器 + 自动化测试框架。


参考资料

  • mitmproxy 官方文档(https://docs.mitmproxy.org/stable/)
     - 权威参考,本文主要来源
  • mitmproxy GitHub(https://github.com/mitmproxy/mitmproxy)
     - 源码与 Issue 讨论
  • mitmproxy 安装包下载(https://mitmproxy.org/)
     - 官方下载页面

人生忠告:工具再强大,也比不上你动手试一次的收获。打开终端,输入 mitmproxy,配置好浏览器代理,访问一个网站——你会发现,网络世界从未如此透明。


阅读原文:点击这里


该文章在 2026/7/30 10:25:06 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-2  粤公网安备44030602007207号