Chute Dashboard

Chute Dashboard 是一个免费的 macOS 应用,连接到一个正在运行的 Chute——通过 Wi-Fi 或 USB 线连 Chute iOS,或在同一台 Mac 上连 Chute Mac——并展示那个实例正在做什么:每条连接以及决定它的规则与策略、HTTPS 解密覆盖的主机上解密后的请求与响应、DNS 应答、UDP 会话。它还能让你边看边改流量:MitM 主机列表和每一族改写与 Mock 规则都可以在线编辑。

它不是 Web 控制台。控制台由内核自己提供、用浏览器打开;Dashboard 是一个独立的应用,通过内核的二进制控制通道与它对话,所以它需要设备上的 external-controller-access,而不是 external-http-controller。两者有重叠,也各有对方没有的东西——见 Dashboard 够不着的东西

Dashboard 的界面已本地化为本手册的各种语言(阿拉伯语除外;在阿拉伯语系统上显示英文)。

允许 Dashboard 连接

设备不点头,什么都不会监听。

Chute iOS —— 在配置编辑器中打开 外部控制器 → 外部控制器访问

  1. 打开 允许 Chute Dashboard/Chute CLI 连接
  2. 设置 端口密码。密码不能为空,而且必须是你自己设的:能从网络访问到的监听器,用空密码或默认密码是拒绝启动的。
  3. 除非确实需要,否则让 允许通过 Wi-Fi 访问 保持关闭。关闭是默认值,意味着监听器只留在手机自己身上——USB 线仍能到达它,Wi-Fi 上的其他设备不能。打开则意味着这个网络上任何知道密码的人都能读到本次运行看到的一切。
  4. 保存,然后启动(或重启)隧道。控制面板现在会显示 外部访问端口:<端口>——这一行就是监听器已经起来的确认。

Chute Mac —— 同样的三个值写在 [General] 里:

[General]
external-controller-access = password@127.0.0.1:6170

127.0.0.1 把它限制在你所在的这台 Mac 上,同一台 Mac 上运行的 Dashboard 要的正是这个;换成局域网地址或 0.0.0.0 就对其他机器开放了。配置窗口的 General 分区有对应这个键的字段。

连接

Dashboard 启动时打开 Chute 新建仪表盘 窗口;每个连接各占一个窗口,所以可以同时打开好几台设备。两种进入方式:

字段 适用场景
远程 主机、端口、密码 设备的 Wi-Fi 地址(iPhone:设置 → Wi-Fi → ⓘ),或本机 Chute Mac 用 127.0.0.1。手机上需要打开 允许通过 Wi-Fi 访问
USB 端口、密码 iPhone 用数据线连着这台 Mac 并已信任它。填你配置的那个端口即可——Dashboard 自己会找到 USB 通道。允许通过 Wi-Fi 访问 关着也能用,而且还能看到蜂窝网络的流量,因为手机根本不必连 Wi-Fi。

连接过的设备会记在 设备: 下拉里,下次直接选。

密码不对时窗口会提示 密码不匹配。设备不见了——隧道停了、线被拔了、手机换了网络——Dashboard 窗口会报告 连接已断开 并提供 重新连接;没有自动重连。

主窗口

工具栏在五个视图之间切换——活跃最近DNSUDPMitM——筛选 用来显示或隐藏筛选栏。左下角的面板是实时上传与下载速度;点它可以展开图表。

活跃最近 视图上,工具栏还有两个作用于运行中内核的开关,和各端 App 里的开关完全一样:

  • 记录流量停用流量记录:打开请求与响应正文的捕获(即 replica 设置)。不开的话,行仍然会出现并带着选路信息,但数据 Tab 是空的。
  • 启用 MitM(N 条规则)停用 MitM(N 条规则):对 MitM 主机列表里的 N 个主机打开 HTTPS 解密。设备上没有受信任的 CA 且至少一个主机之前,这个开关没有实际作用——见 HTTPS 解密页。

两个开关都不改配置文件;重启后回到文件所写的状态。

侧栏按客户端给连接分组:所有客户端,然后是 本地(设备自身上的客户端)和 远程(把这个 Chute 当代理用的其他机器)。选中一项,所有列表都只显示它。设备是 Chute Mac 时,本地客户端就是各个应用,带名称和图标,右键菜单里有 在访达中显示

活跃与最近

活跃 是此刻打开着的连接;最近 是设备的历史,最新在前,从本次运行的记录里读回。两者共用同一组列:

ID 内核的连接编号——控制台和各端 App 显示的是同一个数字
日期、持续时间 什么时候开始的,已经持续或总共持续了多久
客户端 进程(Chute Mac)或本地地址
方法、服务器、状态 请求行和应答,从捕获的请求里解析出来
策略 规则选中的策略
上传、下载 两个方向的字节数
标记 Chute 对这条连接做了什么——见下面的图例

标记 列是判断你写的规则有没有生效最快的方法:

标记 含义
M 已解密(MitM 已拦截)
H 某个头被修改了
B 某个正文被修改了
R 有改写规则命中
K 由 Map Local 模拟应答,而不是服务器

最近列表最多保留 5,000 行;列表底部的 加载更早记录 会从设备取下一页,列表本身每隔几秒自动刷新。当活跃列表长到一个控制包装不下时,表格下方会有一行说明内核截断了它——这些行仍在设备上,关闭后会出现在最近列表里。

在行上右键可以 复制 curl 命令将所选导出为 HAR… / CSV… 以及 全部导出为 HAR… / CSV…;活跃的行还多一个 终止连接,会在设备上把它关掉。

注意:一行是一条连接,不是一个请求。一条 keep-alive 连接上跑了好几个请求,仍然只是一行,捕获到的数据里前后相接地装着所有这些消息;显示出来的头是其中一个请求的。所以浏览器打开一个页面产生的行数,比页面的资源数要少。

筛选栏

筛选栏收窄的是显示的内容。它不改变设备记录什么——要控制记录,用设备上的 [Replica]

控件 可选项
筛选主机/URL… 对主机和 URL 做文本匹配
方法 GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、CONNECT
状态 1xx – 5xx
流量 活跃、已完成、中断
类型 JSON、HTML、XML、图片、文本、二进制——按响应的内容类型
时长 < 100ms、100ms–1s、1s–5s、> 5s
大小 < 1 KB、1–100 KB、100 KB–1 MB、> 1 MB
仅 MitM 只看已解密的连接
已修改 被规则改过的连接——HBRK 任一

清除筛选 回到全部。

连接详情

打开一行就是它的详情窗口。Tab 从左到右:

常规 —— 列表上有的东西,摊开来看:请求行与状态码;出站模式、策略和命中的规则;流量与最高速度;本地与远端地址;开始时间;SSL/MitM 状态(已拦截头已修改正文已修改已模拟);以及 命中的规则 列表——改动过这条连接的每一条改写或 Mock 规则,用规则自己的原文引出。没出现在这里的规则,就没有碰过这条连接。

时间 —— 连接建立的时间花在了哪里,按内核的测量:

从 → 到
代理就绪耗时 客户端的连接到达 → Chute 准备好处理它
DNS 解析 → 域名解析完成(规则不需要地址时为零)
规则匹配耗时 → 规则表得出结论
远端就绪耗时 → 选中的出站已连上并就绪
活跃 之后的一切,直到连接关闭

一个慢请求通常只慢在其中某一行,慢在哪一行就说明该往哪里看:DNS 看 DNS 段,远端就绪看策略或它背后的服务器,活跃看应用本身。

请求头 / 响应头 —— 表格形式的头,请求侧另拆出 查询参数Cookie,响应侧拆出 Cookie。被规则修改过的头会高亮。复制所选 复制选中的行。

请求数据 / 响应数据 —— 捕获到的正文,以 十六进制文本JSON(可展开的树,带搜索)或 图片适应窗口 / 实际大小)查看;multipart 正文会拆成各个部分。导出为 bin 保存原始字节。只有连接运行时记录是开着的、并且主机通过了 [Replica] 的过滤,这里才有数据。

注意:正文按捕获时的样子显示。压缩过的响应——Content-Encoding: gzip——在这里不会被解压,所以它的文本和 JSON 视图是乱码;十六进制视图和 导出为 bin 能给你原始字节,拿到别处解压。设备拒绝交出大于 2 MiB 的正文,十六进制视图只显示前 1 MiB。

DNS 与 UDP

DNS 是设备解析器的缓存:每个域名及其解析到的地址、最先应答的服务器(Chute 会同时查询所有配置的服务器——见 DNS)、TTL 和记录类型。右键可以 复制域名复制 IP复制 DNS 服务器

UDP 列出 UDP 会话——主机、服务器、策略和状态。UDP 没有正文。

MitM 工具

MitM 视图管理设备上的五族规则,分五个面板:MitM 规则Header 重写Body 重写Map LocalMap Remote。它们共有的性质:

  • 列表是运行中内核手里的那份规则,起点是配置文件声明的内容。
  • 添加规则会发送到设备,设备像解析配置行一样解析它;解析不了的行会被拒绝并报错,而不是存下来。
  • 改动只存在于运行中的内核里。它们不会写回配置文件,重载或重启都会回到文件所写的状态。用这些面板找到能用的规则,再把它写进配置。
  • 规则有没有被应用,看列表的 标记 列(RK)和详情窗口的 命中的规则

MitM 规则 —— 一条规则一个主机模式,host[:port][/path],前缀 - 表示排除:*.google.comapi.example.com:8443api.example.com/v2/*-*.apple.com。语法与 HTTPS 解密页上 hostname 键的一样。工具栏 MitM 开关上的数字就是这个列表的长度。

Header 重写 —— 一个表单:URL 正则请求响应添加 / 替换 / 删除头名称头值。Dashboard 替你拼出配置行;语法见 Header 重写页。

Body 重写 —— 一行配置,照你在文件里写的样子输入:url-regex type pattern replacement,type 为 responserequestjsonpath-responsejsonpath-request。见 Body 重写

Map Local —— URL 正则、一个 文件路径浏览…)和可选的 响应头,每行一个 Name: Value

注意:文件路径由运行 Chute 的设备在请求时读取。Dashboard 连的是同一台 Mac 上的 Chute Mac 时,Mac 上的路径有意义;连的是 iPhone 时就毫无意义——手机上没有 /Users/…。对远程设备,用规则的 base64= 形式把内容内联进去(见 Mock 响应),通过设备自己的编辑器或 Web 控制台添加;或者把文件放到某个 URL 上,改用 Map Remote。

Map Remote —— URL 正则目标类型header 就地改写请求(Surge 的 Map Remote),302307 让客户端重定向,rejectreject-200reject-imgreject-dict 不联系服务器直接应答。见 URL 重写

导出

  • HAR —— 在列表上右键:所选行或全部,导出为 HAR 1.2 文件,可用浏览器开发者工具(Network → 导入)、Charles 或 Proxyman 打开。一行一个条目;记录开着时包含正文。
  • CSV —— 列表的各列,给电子表格用。
  • 复制 curl 命令 —— 一条 curl 命令,带着原请求的头,在你的 Mac 上重放这个请求。
  • 导出为 bin —— 一个正文,按捕获时的样子。

Dashboard 的 HAR 是用它已经取到的数据拼的。内核也能自己生成一份——每个条目带一个 _kl 对象,装着命中的规则、策略和生效的改写,发送/接收耗时取自捕获本身——入口是控制台的 导出 HARGET /api/connections/export?format=har

Dashboard 够不着的东西

Dashboard 说的是内核的二进制控制通道,而内核能做的一部分事只存在于 HTTP 控制 API 上。这些要用 Web 控制台或 API:

  • 诊断包、健康状态、拒绝计数和事件;
  • 控制台 Rules 页的每条规则命中总数,以及它们给出的「这条规则到底有没有命中过」的答案;
  • 上面说的内核自己生成的 HAR;
  • 日志。

依赖它之前还有两件事值得知道:

  • Chute Android 不提供二进制通道,所以 Dashboard 连不上它。Android 自己的远程仪表盘和 Web 控制台覆盖同样的范围。
  • iPhone 和 Apple TV 上,HTTPS 解密和正文捕获是需要许可证的功能。没有许可证时 Dashboard 仍能连接,也能看到每条连接及其规则与策略,但 HTTPS 行始终是不透明的 CONNECT 隧道,数据 Tab 是空的,MitM 开关没有效果。见许可证与激活
S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-01 12:09:20

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

results matching ""

    No results matching ""