在 Mac 上调试
在 Mac 上,Chute 和你要看的流量在同一台机器上,所以 iPhone 那篇指南里花掉好几步的东西——一根线、一个监听器、一个密码——这里都不需要。取而代之的是另一个问题:流量到底有没有到 Chute,因为在 macOS 上,一个应用完全可以不理会代理。
1. 让流量走 Chute
两套机制,彼此独立,菜单里都能看到:
- 系统代理 —— 菜单顶部的开关。把 Chute 注册为系统 HTTP/SOCKS 代理。读系统代理设置的应用(浏览器、多数图形界面 App)会走 Chute;不读的则毫无影响。
- 增强模式(⌘E)—— 在网络层接管流量,应用对代理怎么想就不重要了。某个 App 根本不支持代理时,你要的就是它。授权流程和两种实现类型见增强模式。
终端工具是常见的意外:curl、git、npm 这些读的是环境变量 HTTP_PROXY/HTTPS_PROXY,不是系统设置。菜单里的 复制 Shell 代理命令(⌘C)会把该用的那一行放进剪贴板——
export HTTPS_PROXY=http://127.0.0.1:8118;export HTTP_PROXY=http://127.0.0.1:8118;export NO_PROXY=127.0.0.1,localhost,.example.com
——端口是你实际的 HTTP 监听端口,NO_PROXY 由你的 skip-proxy 列表生成,所以命令行工具绕过的东西和系统代理绕过的完全一致。粘到你正在测试的那个 shell 里;它只对那个 shell 生效。
你应该看到:随着你操作 App,主窗口的 流量 标签开始出现行。一行都没有,说明流量压根没到 Chute——回到这一步,而不是去找解密的毛病。
2. 读懂流量标签
流量 列出实时连接,带一个搜索框和计数(N active)。显示列 ▾ 切换布局:
- 双行(默认) —— 每条连接两行,适合浏览。
- 宽表格 —— 每条连接一行,铺开全部列:主机、进程、规则、策略、协议、上传、下载、总计、状态。点表头可排序。
- 按应用分组 —— 连接按打开它的应用归拢,带名字和图标。要回答「这个进程在跟谁说话」,这是最快的方式。
右键一行有 显示详情、复制主机、复制详情、筛选日志(跳到 日志 标签并已按这条连接过滤)和 关闭连接。
显示详情 会打开一个窗口,列出这条连接的主机、进程、协议、远端、规则、策略、改写、上传、下载和状态——关于它是怎么被选路的,全在这里。
流量标签不显示请求与响应正文。那是详情窗口里 请求与历史 按钮的用途:它会打开 Web 控制台,正文在那里。打开的是控制台首页,不是那一条连接。
3. 不发请求也能试规则
规则 标签上有一个 测试规则... 按钮。输入一个 URL 或者干脆一个域名,按 测试,Chute 会给出它解析出的主机与端口、DNS 结果、命中的规则、这条规则选中的策略,以及备注。
问题是「这个为什么走了直连」或者「我这两条规则谁赢」时就用它——它查的是运行中的规则集,所以顺便还告诉你:你刚改的那份配置,是不是真的就是加载着的那份。答案看着不对劲就重新加载配置(⌘R)。同样的问题在 API 上是 POST /api/rules/match。
4. 打开录制和解密
两个都在菜单里,也都作用于运行中的内核:
- 流量捕获(⌘B)—— 保留请求与响应正文,也就是
replica设置。默认关闭;不开就什么都没有正文。 - 启用 MitM(⌘M)—— 对
[MITM]段hostname列表里的主机打开解密。
两者都不会写回配置文件:重新加载配置或重启之后,以文件里的 replica 和 [MITM] enable 为准。
CA 在 macOS 上是一步的事。在配置窗口里打开 MitM:
- 生成新证书,或者 从 PKCS#12 文件导入证书。
- 安装证书到系统 —— macOS 会要管理员密码,然后把它作为受信任根证书加进系统钥匙串。没有 iOS 上那个另外的「信任」步骤。
- 导出证书 会写出一份
.pem,这就是你把同一个 CA 弄到手机、Apple TV 或容器上的办法。
5. 收窄到一个进程
macOS 是 Chute 知道连接由哪个应用发起的平台,规则也能用上这一点:
[Rule]
PROCESS-NAME,curl,DIRECT
PROCESS-NAME,MyApp,MyProxy
PROCESS-NAME、PROCESS-PATH 和 PROCESS-NAME-REGEX 见进程规则。配合流量标签里的 按应用分组,你可以只让一个应用走某个代理——或者走某个 Mock——机器上其余部分照常。
6. 只有 Mac 上才成立的事
- Map Local 里的
data=文件路径。 文件是由运行 Chute 的那台设备在请求发生时读取的。在 Mac 上这台设备就是你正在编辑的这台,所以真实路径可用,改一下文件下一个响应就变了,不用重载。在手机或 Apple TV 上,同一个路径毫无意义——所以 iPhone 那篇指南改用base64=。 - 磁盘上的文件。 日志分片、运行标记和抓取内容在
~/Chute/Share/<run id>/下面,见文件位置(macOS)。可以直接附在缺陷报告里,不用过分享面板。 - 给别的设备当代理。 打开
allow-wifi-access之后,网络上的其他机器可以把代理设置指向这台 Mac。它们的流量会出现在同样的视图里,在 Dashboard 的客户端侧栏中归到 远程 下——这也是你检查一台压根没跑 Chute 的设备的办法,Windows 笔记本或者智能电视都算。
7. 流量标签不够用的时候
- Web 控制台 —— 菜单栏 → 打开 Web 控制台。正文、HAR 导出、会告诉你哪些改写生效过的规则页,以及诊断探针。需要
[General]里的external-http-controller。 - Chute Dashboard —— 一个独立的免费 App。要连本机内核,在
[General]里写external-controller-access = <密码>@127.0.0.1:6170,然后用 Dashboard 的 远程 分区连127.0.0.1,端口和密码照填。值得装,因为有 MitM 工具面板,以及右键就能出的 HAR / curl 导出。 - 日志标签 —— 先用
loglevel = verbose抬高级别,事后记得改回来。连接行上的 筛选日志 会把这个标签收窄到那一条连接。
本页为英文版的翻译。如内容有出入,以英文版为准。