在 Mac 上调试
在 Mac 上,Chute 和你要看的流量在同一台机器上,所以 iPhone 那篇指南里花掉好几步的东西——一根线、一个监听器、一个密码——这里都不需要。取而代之的是另一个问题:流量到底有没有到 Chute,因为在 macOS 上,一个应用完全可以不理会代理。
1. 让流量走 Chute
两套机制,彼此独立,菜单里都能看到:
- 系统代理 —— 菜单顶部的开关。把 Chute 注册为系统 HTTP/SOCKS 代理。读系统代理设置的应用(浏览器、多数图形界面应用)会走 Chute;不读的则毫无影响。
- 增强模式(⌘E)—— 在网络层接管流量,应用对代理怎么想就不重要了。某个应用根本不支持代理时,你要的就是它。授权流程和两种实现类型见增强模式。
终端工具是常见的意外: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 生效。
你应该看到:随着你操作应用,主窗口的流量标签页开始出现行。(主窗口是菜单里的打开仪表盘...(⌘,);在新界面推出之前就已经有配置的 Mac 上,要先在同一个菜单里打开使用新版主界面。)一行都没有,说明流量压根没到 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——所以重载和重启之后都还在。远程配置没有本地文件可写:开关照样改变运行中的引擎,应用会提示保存配置失败。控制台、Dashboard 和 API 切换的是同样两个设置,但不写文件;这样切换之后,重新加载配置(⌘R)会保留你设的值,除非文件底下变了——replica 在文件里它自己的值变了时重新套用,[MITM] enable 在 [MITM] 段任何一个键变了、或者主机列表经控制台或 API 改过时重新套用——而重启总是从文件开始。
CA 在 macOS 上是一步的事。在配置窗口里打开MitM:
- 生成新证书,或者从 PKCS#12 文件导入证书。
- 安装证书到系统 —— macOS 会要管理员密码,然后把它作为受信任根证书加进系统钥匙串。没有 iOS 上那个另外的「信任」步骤。
- 导出证书会写出一份
.pem,这就是你把同一个 CA 弄到手机、Apple TV 或容器上的办法。
5. 收窄到一个进程
在各个 Apple 平台里,只有 macOS 上 Chute 知道连接由哪个应用发起,规则也能用上这一点(Chute Android 也知道,按包名):
[Rule]
PROCESS-NAME,curl,DIRECT
PROCESS-NAME,MyApp,MyProxy
PROCESS-NAME、PROCESS-PATH 和 PROCESS-NAME-REGEX 见进程规则。配合流量标签页里的按应用分组,你可以只让一个应用走某个代理——或者走某条模拟响应规则——机器上其余部分照常。
6. 只有 Mac 上才成立的事
- 模拟响应规则里的
data=文件路径。文件是由运行 Chute 的那台设备在请求发生时读取的。在 Mac 上这台设备就是你正在编辑的这台,所以真实路径可用,改一下文件下一个响应就变了,不用重载。在手机或 Apple TV 上,同一个路径毫无意义——所以 iPhone 那篇指南改用base64=。 - 磁盘上的文件。日志分片和连接数据库在
~/Chute/Share/<run id>/下面,运行标记在旁边的~/Chute/Share/里,见文件位置(macOS)。可以直接附在缺陷报告里,不用过分享面板。捕获到的正文也在那里,位于DUMP/下,但只在引擎运行期间保留:引擎一停就被删除,所以需要的先导出——控制台里的导出 HAR,或 Dashboard 里的导出为 bin。 - 给别的设备当代理。打开
allow-wifi-access之后,网络上的其他机器可以把代理设置指向这台 Mac。它们的流量会出现在同样的视图里,在 Dashboard 的客户端侧栏中归到远程下——这也是你检查一台压根没跑 Chute 的设备的办法,Windows 笔记本或者智能电视都算。
7. 流量标签页不够用的时候
- Web 控制台 —— 菜单栏 → 打开 Web 控制台。正文、HAR 导出、会告诉你哪些改写生效过的规则页,以及诊断探针。需要
[General]里的external-http-controller。 - Chute Dashboard —— 一个独立的免费应用。在这台 Mac 上它什么配置都不需要:菜单里的打开 Chute Dashboard...(⌘D)会直接以连接本机的方式打开它,在它的新建仪表盘窗口里选连接本机也一样。这条路走的是隧道始终开着的一个本地套接字,没有端口也没有密码要设。只有 Dashboard 跑在另一台 Mac 上时才需要走远程那条路——在
[General]里写external-controller-access = <密码>@0.0.0.0:6170,然后用连接远程设备填这台 Mac 的地址、那个端口和那个密码。不管走哪条路它都值得装,因为有 MitM 工具面板,以及右键就能出的 HAR / curl 导出。 - 日志标签页 —— 先用
loglevel = verbose抬高级别,事后记得改回来。连接行上的筛选日志会把这个标签收窄到那一条连接。
本页为英文版的翻译。如内容有出入,以英文版为准。