调试网络
Chute 是一个代理,但在自己设备上跑一个代理,理由通常不是选路,而是:从此每一条请求都要经过一个你说了算的地方。于是你可以看清一个 App 究竟发了什么、把正文留下来慢慢读、在传输途中改掉某个请求或响应,也可以把一个好端端的后端弄成坏的,看你的 App 会怎么办。
每种机制的参考页在本手册别处:HTTPS 解密、Mock 响应、URL 重写、JS 脚本。这一节把它们按你实际使用的顺序串起来,并说清楚各平台之间有什么不同。
看同一个内核的四个窗口
同一个正在运行的 Chute,四种看法。挑错了窗口,就是「东西怎么不在」的常见原因。
| 运行在 | 请求与响应正文 | 能改运行中的内核 | 需要 | |
|---|---|---|---|---|
| App 自己 | 设备上 | iOS 有;macOS 与 tvOS 没有 | 只有那几个开关 | 无 |
| Web 控制台 | 任意设备的浏览器 | 有 | MitM 主机、每一族改写、策略、配置 | external-http-controller |
| Chute Dashboard | 一台 Mac | 有 | MitM 主机、每一族改写、两个开关 | external-controller-access |
| HTTP 控制 API | 任何会说 HTTP 的东西 | 有,base64 | 控制台能做的都能做 | external-http-controller |
控制台和 Dashboard 重叠很多,进入方式却不同——控制台由内核提供、用浏览器打开,Dashboard 是一个说二进制通道的 Mac 应用。两者谁也不是谁的超集,差异见 Dashboard 够不着的东西。
先把四个开关弄对
几乎每一次「连接看得到,请求看不到」,最后都落在这四条里的某一条,按这个顺序:
- 流量真的到了 Chute。 流量视图里有一行,就是证据。什么都没有属于接管问题,不是调试问题——见疑难解答。
- CA 装了并且被信任。 在 iOS 上是两步,在 macOS 上是一步,在 tvOS 上一步都不在 App 里——见安装并信任 CA 证书。
- 主机在 MitM 列表里。 Chute 只解密你声明过的主机。一行显示
CONNECT、没有方法也没有状态码,说明它从来没被解密过。 - 录制是开着的。
replica = true,或者那个开关(Mac 上叫 流量捕获,iOS 与 tvOS 上叫 转储数据)。不开的话每一行仍然带着它的规则、策略和时序——缺的只是正文。[Replica]再进一步收窄保留哪些。
第 3、4 条也都能在运行时从控制台、从 Dashboard、通过 API 拨动,而且这些都不会写回配置文件:重启之后以文件为准。
各平台各能给你什么
| Chute iOS | Chute Mac | Chute tvOS | |
|---|---|---|---|
| 在 App 里查看 | 仪表盘界面——概览、请求、响应,含正文 | 流量 标签——只有选路,没有正文 | 会话列表——只有选路,没有正文 |
| 在 App 里开关 MitM | 控制面板开关(需许可证) | 菜单栏 → 启用 MitM(⌘M) | 这个平台上没有这个开关 |
| 在 App 里开关录制 | 控制面板 → 转储数据(需许可证) | 菜单栏 → 流量捕获(⌘B) | 控制面板 → 转储数据(需许可证) |
| 安装 CA | 在 App 里装,再去设置里信任 | 在 App 里一步装完 | 只能靠 MDM 或 Apple Configurator |
| Chute Dashboard 怎么连 | USB 线或 Wi-Fi | 同一台 Mac 上的 127.0.0.1 |
Wi-Fi |
| 怎么把文件弄出来 | 分享面板 | 文件系统 | 只有控制台,扫二维码 |
从这里往下
- 从 Mac 调试 iPhone——从一部干净的手机到 Mac 屏幕上一段解密后的正文,全程。
- 在 Mac 上调试——Mac 自己的流量,包括终端工具和按进程隔离。
- 调试 Apple TV——一台没有浏览器、没有分享面板、也没法自己装证书的设备。
- Replica——哪些连接会留下正文,以及怎么不再什么都抓。
- 模拟与故障注入——固定响应、错误状态码、注入延迟,以及 Chute 确实做不到的事。
如果问题是「它不工作」而不是「它在干什么」,请从疑难解答开始,尤其是我的改写为什么没反应?——这一节最常引出的就是这个问题。
本页为英文版的翻译。如内容有出入,以英文版为准。