Chute Dashboard
Chute Dashboard — бесплатное приложение для macOS, которое подключается к работающему Chute — Chute iOS по Wi-Fi или USB-кабелю, либо Chute Mac на той же машине — и показывает, что делает этот экземпляр: каждое соединение с правилом и политикой, которые его решили, расшифрованные запрос и ответ для хостов под расшифровкой HTTPS, ответы DNS, сессии UDP. Оно же позволяет менять трафик прямо во время наблюдения: список хостов MitM и каждое семейство правил перезаписи и Mock редактируются вживую.
Это не веб-консоль. Консоль отдаётся самим ядром и открывается в браузере; Dashboard — отдельное приложение, которое говорит с ядром по его двоичному каналу управления, поэтому ему нужен на устройстве
external-controller-access, а неexternal-http-controller. Они пересекаются, и у каждого есть то, чего нет у другого — см. До чего Dashboard не дотягивается.
Интерфейс Dashboard локализован на те же языки, что и это руководство, кроме арабского; в арабской системе он показывается по-английски.
Разрешить Dashboard подключаться
Ничто не слушает, пока устройство не разрешит.
Chute iOS — в редакторе конфигурации откройте Внешний контроллер → Доступ внешнего контроллера:
- Включите Разрешить подключение Chute Dashboard/Chute CLI.
- Задайте Порт и Пароль. Пароль не может быть пустым и должен быть вашим собственным: слушатель, доступный из сети, отказывается запускаться с пустым паролем или паролем по умолчанию.
- Оставьте Разрешить доступ по Wi-Fi выключенным, если он не нужен. Выключено — значение по умолчанию: слушатель остаётся на самом телефоне — USB-кабель до него дотягивается, другие устройства в Wi-Fi нет. Включено означает, что любой в сети, знающий пароль, может прочитать всё, что видел этот запуск.
- Сохраните и запустите (или перезапустите) туннель. Панель управления теперь показывает Порт внешнего доступа:
<порт>— эта строка и есть подтверждение, что слушатель поднят.
Chute Mac — те же три значения живут в [General]:
[General]
external-controller-access = password@127.0.0.1:6170
127.0.0.1 ограничивает его тем Mac, за которым вы сидите, — ровно то, что нужно Dashboard на том же Mac; адрес локальной сети или 0.0.0.0 открывает его другим машинам. В разделе General окна конфигурации есть поля для того же ключа.
Подключение
Dashboard открывается окном Chute — новая панель мониторинга; у каждого подключения своё окно, так что несколько устройств могут быть открыты одновременно. Два пути внутрь:
| Поля | Когда | |
|---|---|---|
| Удалённый | Хост, Порт, Пароль | Wi-Fi-адрес устройства (iPhone: Настройки → Wi-Fi → ⓘ) или 127.0.0.1 для Chute Mac на этой машине. Требует Разрешить доступ по Wi-Fi на телефоне. |
| USB | Порт, Пароль | iPhone подключён кабелем и доверяет этому Mac. Введите тот же порт, что настроили, — канал по кабелю Dashboard находит сам. Работает при выключенном Разрешить доступ по Wi-Fi и показывает в том числе сотовый трафик, поскольку телефону вовсе не нужно быть в Wi-Fi. |
Машины, к которым вы подключались, запоминаются под Компьютер: на следующий раз.
Если пароль неверен, окно сообщает Неверный пароль. Если устройство пропало — туннель остановлен, кабель выдернут, телефон сменил сеть, — окно Dashboard сообщает Подключение закрыто и предлагает Переподключиться; автоматического переподключения нет.
Окно
Панель инструментов переключает пять представлений — Активно, Недавние, DNS, UDP и MitM, — а Фильтр показывает или скрывает панель фильтров. Панель в левом нижнем углу — текущая скорость загрузки и скачивания; щёлкните её, чтобы развернуть график.
В представлениях Активно и Недавние на панели инструментов есть ещё два переключателя, действующие на работающее ядро, — ровно так же, как переключатели в приложениях:
- Записывать трафик → Отключить запись трафика: включает захват тел запросов и ответов (параметр
replica). Без него строки всё равно появляются со своей маршрутизацией, но вкладки данных остаются пустыми. - Включить MitM (N правил) → Отключить MitM (N правил): включает расшифровку HTTPS для N хостов из списка хостов MitM. Переключатель не делает ничего полезного, пока на устройстве нет доверенного CA и хотя бы одного хоста — см. страницу Расшифровка HTTPS.
Ни один из переключателей не правит файл конфигурации; перезапуск возвращает то, что сказано в файле.
Боковая панель группирует соединения по клиентам: Все клиенты, затем Локальный — клиенты на самом устройстве — и Удалённый — другие машины, использующие этот Chute как прокси. Выбор одного сужает каждый список до него. Когда устройство — Chute Mac, локальные клиенты — это приложения, с именем и значком, и в контекстном меню есть Показать в Finder.
Активно и Недавние
Активно — то, что открыто прямо сейчас; Недавние — история устройства, новые сверху, прочитанная из записей этого запуска. У обоих один набор столбцов:
| Столбец | |
|---|---|
| ID | Номер соединения в ядре — тот же номер, что показывают консоль и приложения |
| Дата, Длительность | Когда началось и сколько длится или длилось |
| Клиент | Процесс (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 | Только расшифрованные соединения |
| Изменённые | Соединения, которые изменило правило — любой из H, B, R, K |
Сбросить фильтры возвращает всё.
Сведения о соединении
Откройте строку, чтобы получить окно сведений. Вкладки слева направо:
Общее — то, что показывает список, но с простором: строка запроса и код состояния; исходящий режим, политика и сработавшее правило; объём данных и пиковые скорости; локальный и удалённый адреса; время запуска; состояние SSL/MitM (Перехвачено, Заголовок изменён, Тело изменено, Макет); и Сработавшие правила — каждое правило перезаписи или Mock, изменившее это соединение, процитированное собственным текстом. Правило, которого здесь нет, этого соединения не касалось.
Тайминг — на что ушло установление соединения, как измерило ядро:
| Строка | Считается от → до |
|---|---|
| Подготовка прокси | Соединение клиента пришло → Chute готов его обрабатывать |
| Разрешение DNS | → имя разрешено (ноль, если правилу адрес не понадобился) |
| Подбор правила | → таблица правил решила |
| Подготовка удалённого узла | → выбранный выход подключён и готов |
| Активно | Всё после этого, до закрытия соединения |
Медленный запрос обычно медленный ровно в одной из этих строк, и какая именно — подсказывает, куда смотреть: DNS — в раздел DNS, подготовка удалённого узла — в политику или сервер за ней, Активно — в само приложение.
Заголовки запроса / Заголовки ответа — заголовки таблицей, с отдельными Параметры запроса и Cookies для запроса и Cookies для ответа. Заголовок, изменённый правилом, подсвечен. Копировать выбранное копирует выделенные строки.
Данные запроса / Данные ответа — захваченное тело как Hex, Текст, JSON (раскрываемое дерево с поиском) или Изображение (По размеру / Реальный размер); тела multipart разбираются на части. Экспортировать как bin сохраняет сырые байты. Данные есть только если запись была включена, когда шло соединение, и только для хостов, которые пропускают фильтры [Replica].
Внимание: Тела показываются в том виде, в каком захвачены. Сжатый ответ —
Content-Encoding: gzip— здесь не распаковывается, так что его вид Текст и JSON — шум; вид Hex и Экспортировать как bin дают байты, чтобы распаковать их где-то ещё. Устройство отказывается отдавать тело больше 2 МиБ, а вид Hex показывает первый МиБ.
DNS и UDP
DNS — кэш резолвера устройства: каждый домен с адресами, в которые он разрешился, сервер, ответивший первым (Chute опрашивает все настроенные серверы сразу — см. DNS), TTL и тип записи. Правая кнопка — Копировать домен, Копировать IP-адреса и Копировать DNS-сервер.
UDP перечисляет сессии UDP — хост, сервер, политику и состояние. Тел у UDP нет.
Инструменты MitM
Представление MitM управляет пятью семействами правил на устройстве в пяти панелях: Правила MitM, Перезапись заголовков, Перезапись тела, Map Local и Map Remote. Что верно для всех:
- Список — это копия правил работающего ядра, которая начинается с того, что объявил файл конфигурации.
- Добавление правила отправляет его на устройство, которое разбирает его так же, как строку конфигурации; строка, которая не разбирается, отвергается с ошибкой, а не сохраняется.
- Изменения живут только в работающем ядре. В файл конфигурации они не записываются, а перезагрузка или перезапуск возвращает то, что сказано в файле. Найдите с помощью панелей правило, которое работает, и запишите его в конфигурацию.
- Применяется ли правило, видно в столбце Флаги списка (
R,K) и в Сработавшие правила окна сведений.
Правила MitM — один шаблон хоста на правило, host[:port][/path], с префиксом - для исключения: *.google.com, api.example.com:8443, api.example.com/v2/*, -*.apple.com. Та же грамматика, что у ключа hostname на странице Расшифровка HTTPS. Число на переключателе MitM панели инструментов — длина этого списка.
Перезапись заголовков — форма: Регулярное выражение URL, Запрос или Ответ, Добавить / Заменить / Удалить, Имя заголовка, Значение заголовка. Строку конфигурации Dashboard составляет за вас; грамматика — на странице Перезапись заголовков.
Перезапись тела — одна строка конфигурации, введённая так, как вы написали бы её в файле: url-regex type pattern replacement, где тип — response, request, jsonpath-response или jsonpath-request. См. Перезапись тела.
Map Local — Регулярное выражение URL, Путь к файлу (Обзор…) и необязательные Заголовки ответа, по одному Имя: Значение на строку.
Внимание: Путь к файлу читает устройство, на котором работает Chute, в момент запроса. Путь на вашем Mac имеет смысл, когда Dashboard подключён к Chute Mac на той же машине, и не имеет, когда он подключён к iPhone — у телефона нет
/Users/…. Для удалённого устройства вложите содержимое прямо в правило формойbase64=(см. Имитация ответов) через редактор устройства или веб-консоль, либо отдавайте файл по URL и используйте Map Remote.
Map Remote — Регулярное выражение URL, Цель и Тип: header перезаписывает запрос на месте (Map Remote из Surge), 302 и 307 перенаправляют клиента, а reject, reject-200, reject-img, reject-dict отвечают, не обращаясь к серверу. См. Перезапись URL.
Экспорт
- HAR — правая кнопка на списке: выбранные строки или все, файлом HAR 1.2, который открывается в инструментах разработчика браузера (Сеть → импорт), Charles или Proxyman. Одна запись на строку; тела включены, если была включена запись.
- CSV — столбцы списка, для электронной таблицы.
- Копировать команду curl — вызов
curl, повторяющий запрос с вашего Mac вместе с его заголовками. - Экспортировать как bin — одно тело, как захвачено.
Dashboard строит свой HAR из того, что получил. Ядро умеет строить свой — со сработавшим правилом, политикой и сработавшими перезаписями в объекте _kl каждой записи и временами отправки и приёма, взятыми из захвата, — через Export HAR (Экспорт HAR) в консоли или GET /api/connections/export?format=har.
До чего Dashboard не дотягивается
Dashboard говорит по двоичному каналу управления ядра, а часть того, что умеет ядро, есть только в HTTP-API управления. Для этого используйте веб-консоль или API:
- диагностический пакет, здоровье, счётчики отказов и события;
- итоги срабатываний по правилам на странице Rules консоли и ответ, который они дают: срабатывало ли это правило хоть раз;
- собственный HAR ядра, см. выше;
- журнал.
Ещё две вещи, которые стоит знать, прежде чем на него полагаться:
- Chute Android не предлагает двоичного канала, поэтому Dashboard к нему подключиться не может. Собственная удалённая панель Android и веб-консоль покрывают то же самое.
- На iPhone и Apple TV расшифровка HTTPS и захват тел — лицензируемые функции. Без лицензии Dashboard всё равно подключается и показывает каждое соединение с правилом и политикой, но строки HTTPS остаются непрозрачными туннелями
CONNECT, вкладки данных — пустыми, а переключатель MitM ничего не делает. См. Лицензия и активация.
Эта страница — перевод английской версии. При расхождениях приоритет имеет английская версия.