编辑
2026-04-23
vibe coding
00

目录

mitm-proxy
功能特性
工作原理
安装
方式一:从源码构建
方式二:Docker
快速开始
1. 启动代理
2. 安装 CA 证书
3. 配置客户端代理
4. 查看流量
Web UI 使用说明
命令参考
API
构建命令
CA 证书存储位置
iOS 设备使用指南
第一步:获取电脑 IP
第二步:启动代理(监听所有网卡)
第三步:iOS 配置 Wi-Fi 代理
第四步:安装 CA 证书(HTTPS 抓包必须)
4.1 下载证书到 iOS
4.2 安装描述文件
4.3 信任 CA 证书(关键步骤)
第五步:验证抓包
注意事项

mitm-proxy

HTTP/HTTPS 中间人(MITM)代理,内置实时 Web UI,支持流量拦截与分析。单文件部署,无需额外依赖。

功能特性

  • 拦截 HTTP 和 HTTPS 流量,查看完整的请求/响应头和 Body
  • 实时 Web UI,通过 WebSocket 推送新流量,无需刷新页面
  • 支持按 Host、Method、Status Code 及关键词过滤流量
  • 自动生成 CA 证书,支持一键安装到系统信任库
  • 内存环形缓冲区管理流量记录,可配置最大容量
  • React 前端通过 go:embed 嵌入到 Go 二进制,零依赖运行
  • 支持 Docker 部署

工作原理

客户端(浏览器) ↓ 配置代理 http://localhost:8080 代理服务器(mitm-proxy) ├── HTTP 请求:直接拦截并转发 └── HTTPS 请求(CONNECT 隧道): 动态签发目标域名证书 → 与客户端建立 TLS → 与真实服务器建立 TLS 解密流量 → 记录到 Store → 重新加密发回客户端 ↓ 真实服务器

代理使用 ECDSA P-256 自签名 CA 证书,为每个访问的域名动态签发证书,实现 HTTPS 流量的透明解密。

安装

方式一:从源码构建

前提条件:

  • Go 1.22+
  • Node.js 18+、npm
bash
git clone https://git.woa.com/johnezhou/mitm-proxy.git cd mitm-proxy # 构建(自动编译前端 + Go 二进制) make build # 二进制输出到 bin/mitm-proxy ./bin/mitm-proxy --help

方式二:Docker

bash
# 构建镜像 make docker # 运行容器 make docker-run # 等价于: # docker run -p 8080:8080 -p 8081:8081 \ # -v ~/.mitm-proxy:/root/.mitm-proxy \ # mitm-proxy:latest

快速开始

1. 启动代理

bash
# 默认配置启动(代理端口 8080,Web UI 端口 8081) ./bin/mitm-proxy start # 自定义端口 ./bin/mitm-proxy start --proxy-port 9090 --ui-port 9091 # 增加流量记录容量 ./bin/mitm-proxy start --max-flows 50000

启动后输出:

Proxy listening on :8080 Web UI at http://localhost:8081 CA cert: /root/.mitm-proxy/ca.crt (install with: mitm-proxy cert install)

2. 安装 CA 证书

HTTPS 流量解密需要将 CA 证书加入系统信任库:

bash
# 自动安装(推荐) ./bin/mitm-proxy cert install # 查看证书路径 ./bin/mitm-proxy cert export # 输出:~/.mitm-proxy/ca.crt

也可以通过 Web UI 下载:访问 http://localhost:8081,点击工具栏中的 CA 按钮下载证书后手动导入。

手动导入:

macOS:

bash
security add-trusted-cert -d -r trustRoot \ -k /Library/Keychains/System.keychain \ ~/.mitm-proxy/ca.crt

Linux:

bash
sudo cp ~/.mitm-proxy/ca.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates

3. 配置客户端代理

命令行(临时):

bash
export http_proxy=http://localhost:8080 export https_proxy=http://localhost:8080 curl https://example.com

浏览器: 在系统网络设置或浏览器代理设置中,将 HTTP/HTTPS 代理设置为 localhost:8080

4. 查看流量

打开浏览器访问 http://localhost:8081,即可实时查看所有拦截到的流量。

Web UI 使用说明

┌──────────────────────────────────────────────────────────────┐ │ mitm-proxy │ [host] [method] [status] [Clear] [CA] N flows│ ├────────────────────┬─────────────────────────────────────────┤ │ 流量列表(左侧) │ 流量详情(右侧) │ │ │ Headers | Request | Response | Raw │ │ GET 200 /api/v1 │ │ │ POST 404 /login │ 请求头、响应头、Body、完整 JSON │ └────────────────────┴─────────────────────────────────────────┘

过滤栏:

  • Host:模糊匹配域名
  • Method:按请求方法过滤(GET、POST 等)
  • Status:按状态码过滤

工具栏按钮:

  • Clear:清空所有流量记录
  • CA:下载 CA 证书

详情面板标签:

  • Headers:请求头和响应头
  • Request:请求 Body
  • Response:响应 Body
  • Raw:完整 JSON 数据

命令参考

mitm-proxy start [flags] --proxy-port int 代理监听端口(默认:8080) --ui-port int Web UI 监听端口(默认:8081) --max-flows int 内存中保留的最大流量条数(默认:10000) mitm-proxy cert install 安装 CA 证书到系统信任库 mitm-proxy cert export 输出 CA 证书路径

API

端点方法说明
/api/flowsGET列出流量,支持过滤和分页
/api/flowsDELETE清空所有流量
/api/flows/{id}GET获取单条流量详情
/api/certGET下载 CA 证书(PEM 格式)
/api/statusGET获取代理状态
/api/wsWebSocket实时接收新流量推送

过滤参数(GET /api/flows):

?host=example.com&method=GET&status=200&q=keyword&limit=50&offset=0

构建命令

bash
make build # 编译前端 + Go 二进制 make web # 仅构建前端 make test # 运行测试 make clean # 清理构建产物 make docker # 构建 Docker 镜像 make docker-run # 运行 Docker 容器

CA 证书存储位置

~/.mitm-proxy/ ├── ca.crt # CA 证书(PEM 格式) └── ca.key # CA 私钥(权限 0600)

首次启动时自动生成,有效期 10 年。

iOS 设备使用指南

在 iPhone/iPad 上抓包小程序或 App 请求,需要完成两步:设置 Wi-Fi 代理 + 安装 CA 证书。

前提: iOS 设备和运行 mitm-proxy 的电脑必须连接同一 Wi-Fi

第一步:获取电脑 IP

在电脑上查看本机局域网 IP:

bash
# macOS ipconfig getifaddr en0 # Linux ip addr show | grep 'inet ' | grep -v 127.0.0.1

记下 IP,例如 192.168.1.100

第二步:启动代理(监听所有网卡)

mitm-proxy 默认只监听 localhost,需要改为监听所有网卡,iOS 设备才能访问:

bash
./bin/mitm-proxy start --proxy-addr 0.0.0.0:8080

如果 --proxy-addr 不支持,可以用 --proxy-port 8080,代理默认已绑定 0.0.0.0。

第三步:iOS 配置 Wi-Fi 代理

  1. 打开 设置 → Wi-Fi
  2. 点击当前连接的 Wi-Fi 右侧的
  3. 滚动到底部,点击 配置代理
  4. 选择 手动
  5. 填写:
    • 服务器192.168.1.100(电脑局域网 IP)
    • 端口8080
  6. 点击右上角存储

第四步:安装 CA 证书(HTTPS 抓包必须)

4.1 下载证书到 iOS

在 iOS Safari 中访问(必须用 Safari,其他浏览器无法触发安装):

http://192.168.1.100:8081

点击 Web UI 右上角 CA 按钮,Safari 会弹出"此网站正在尝试下载一个配置描述文件",点击允许,然后关闭

4.2 安装描述文件

  1. 打开 设置,顶部会出现"已下载描述文件"的提示,点击进入
  2. 点击右上角安装,输入设备密码确认

4.3 信任 CA 证书(关键步骤)

iOS 安装证书后默认不信任,还需要手动开启 SSL 信任:

  1. 打开 设置 → 通用 → 关于本机
  2. 滚动到最底部,点击证书信任设置
  3. 找到 mitm-proxy CA(或类似名称),将开关打开
  4. 弹出警告,点击继续

第五步:验证抓包

完成以上配置后,用 Safari 或目标 App 发起请求,在电脑浏览器打开 http://localhost:8081 即可看到 iOS 设备的流量。

注意事项

  • 抓包结束后 记得关闭 iOS Wi-Fi 代理设置,否则电脑关闭代理后 iOS 无法上网
  • 微信小程序:微信有自己的证书验证,需确保 CA 证书已正确信任;部分小程序启用了 SSL Pinning 无法抓包
  • 部分 App 使用 Certificate Pinning 技术,即使安装了 CA 证书也无法解密,属于 App 的安全机制
  • iOS 14+ 对企业证书有额外限制,但自签 CA 走"配置描述文件"方式不受影响

本文作者:瓜儿爸

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!