在 macOS 下用 mitmproxy 做 HTTP/HTTPS 抓包
大家好,我是jobleap.cn的小九。
在 macOS 下用 mitmproxy 做 HTTP/HTTPS 抓包,可以分成四步:安装、启动代理、配置系统/浏览器代理、安装并信任证书(HTTPS 必须)。 下面用最常用的 mitmweb 图形界面举例,顺带给出终端版 mitmproxy 的用法。[1][2][3]
安装 mitmproxy(macOS)
- 使用 Homebrew(推荐):在终端执行
安装完成后会有brewinstall--cask mitmproxymitmproxy / mitmweb / mitmdump三个命令可用。 - 如果不想用 Homebrew,也可以到官网下载独立二进制包,解压后直接运行对应可执行文件即可。
启动 HTTP/HTTPS 代理
mitmproxy 默认监听 8080 端口,对 HTTP/HTTPS 都生效(代理层面不区分协议)。
- 启动浏览器 GUI:
启动后会监听mitmweb -p8080127.0.0.1:8080,并在浏览器打开一个控制台,所有经过的 HTTP/HTTPS 请求都会在这里显示,可点选查看请求头、响应体等。 - 启动终端交互界面:
这是 TUI 版本,通过键盘操作进行流量查看和拦截修改,适合习惯键盘流的场景。mitmproxy -p8080
只抓 HTTP 的话,到这一步 + 配好代理已经够用,因为 HTTP 无须证书。HTTPS 再看后两节。
配置 macOS / 浏览器代理(HTTP + HTTPS)
目标是让要抓的流量都走到127.0.0.1:8080。下面以抓桌面浏览器为例。
在 macOS 系统层配置(影响所有走系统代理的应用):
- 打开「系统设置」→「网络」。
- 选择当前使用的网络(如 Wi‑Fi),点「详情」或「高级」。
- 找到「代理」页签,勾选:
- HTTP 代理
- HTTPS 代理
- 服务器填
127.0.0.1,端口填8080(需与 mitmweb/mitmproxy 实际监听端口一致)。
单独在浏览器里配置(只影响该浏览器):
- Chrome/Edge:通常跟随系统代理;如用了 SwitchyOmega 之类插件,就在插件里将 HTTP/HTTPS 代理都设为
127.0.0.1:8080。 - Firefox:可在「设置 → 网络设置 → 手动代理配置」里单独指定 HTTP / HTTPS 代理为
127.0.0.1:8080。
- Chrome/Edge:通常跟随系统代理;如用了 SwitchyOmega 之类插件,就在插件里将 HTTP/HTTPS 代理都设为
此时访问纯 HTTP 网站(如http://example.com),mitmweb/mitmproxy 中已经可以看到完整请求/响应,无须额外配置,这就是完整的 HTTP 抓包流程。
HTTPS 抓包:安装并信任 mitmproxy 证书
要解密 HTTPS,关键是让系统/浏览器信任 mitmproxy 的根证书。流程概括为:通过代理访问http://mitm.it→ 下载证书 → 导入钥匙串并设为「始终信任」。
- 确认代理已生效:
- 确保 mitmweb/mitmproxy 正在运行,且 macOS/浏览器代理已指向
127.0.0.1:8080。
- 确保 mitmweb/mitmproxy 正在运行,且 macOS/浏览器代理已指向
- 在要抓包的浏览器中访问:
- 打开
http://mitm.it(注意是 http,不是 https)。 - 页面会出现各平台的证书下载按钮,选择「macOS」或「Other」并下载证书文件(一般是
.pem或.crt)。
- 打开
- 导入到 macOS 钥匙串:
- 双击下载的证书,会自动打开「钥匙串访问」。
- 建议导入到「系统」或「登录」钥匙串。导入后在证书列表中找到它(一般名字包含
mitmproxy)。
- 设置为信任:
- 在「钥匙串访问」中双击该证书,展开「信任」设置。
- 将「使用此证书时」改为「始终信任」,关闭窗口时会要求输入密码确认。
- 设置完成后,浏览器/系统会信任 mitmproxy 作为根 CA,从而允许它解密 HTTPS。
完成以上步骤后,再访问 HTTPS 网站(如https://www.baidu.com),mitmweb/mitmproxy 中就能看到解密后的请求和响应内容,包括 URL、头、Body 等,这就是完整的 HTTPS 抓包流程。
常用操作与脚本扩展
- 在 mitmweb 中可以对流量做:
- 按域名/路径过滤,只看特定服务。
- 点选某条流量查看详细请求/响应头与 Body。
- 拦截请求或响应,修改参数后重放,用来模拟各种场景。
- 命令行脚本扩展:
- mitmproxy 支持用 Python 写插件,对请求/响应做自动处理,例如自动加头、记录日志、Mock 返回等。
- 插件通过
-s your_script.py挂载,适合自动化测试或爬虫场景。
