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