在 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:

  1. 生成新证书,或者从 PKCS#12 文件导入证书。
  2. 安装证书到系统 —— macOS 会要管理员密码,然后把它作为受信任根证书加进系统钥匙串。没有 iOS 上那个另外的「信任」步骤。
  3. 导出证书会写出一份 .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 抬高级别,事后记得改回来。连接行上的筛选日志会把这个标签收窄到那一条连接。
S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-30 15:11:19

本页为英文版的翻译。如内容有出入,以英文版为准。

results matching ""

    No results matching ""