Chute Dashboard

Chute Dashboard — бесплатное приложение для macOS, которое подключается к работающему Chute — Chute iOS по Wi-Fi или USB-кабелю, Chute Android по сети или через adb, либо Chute Mac на той же машине — и показывает, что делает этот экземпляр: каждое соединение с правилом и политикой, которые его решили, расшифрованные запрос и ответ для хостов под расшифровкой HTTPS, ответы DNS, сессии UDP. Оно же позволяет менять трафик прямо во время наблюдения: список хостов MitM и каждое семейство правил перезаписи и имитации ответов редактируются вживую.

Это не веб-консоль. Консоль отдаётся самим движком и открывается в браузере; Dashboard — отдельное приложение, которое говорит с движком по его двоичному каналу управления, поэтому ему нужен на устройстве external-controller-access, а не external-http-controller. Они пересекаются, и у каждого есть то, чего нет у другого — см. Что недоступно из Dashboard. Исключение — Dashboard на том же Mac, где работает движок: он подключается к локальному сокету, который движок открывает всегда, и не требует вообще никакой настройки.

Интерфейс 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, за которым вы сидите; адрес локальной сети или 0.0.0.0 открывает его другим машинам. В разделе Общие окна конфигурации есть поля для того же ключа. Dashboard, работающему на том же Mac, этот ключ не нужен вовсе — см. Подключиться к этому компьютеру ниже.

Chute Android — в редакторе конфигурации откройте Внешний контроллер и впишите то же значение в Внешний доступ:

  • Для Подключиться по USB достаточно password@127.0.0.1:6170: Dashboard выполняет adb forward для этого порта и подключается по кабелю, так что слушатель может оставаться на самом телефоне. Для этого на Mac нужен adb — Dashboard ищет его в ANDROID_HOME и ANDROID_SDK_ROOT, в PATH, в /usr/local/bin и /opt/homebrew/bin, а также в ~/Library/Android/sdk, — а на телефоне должна быть включена отладка по USB с разрешением для этого Mac.
  • password@0.0.0.0:6170 открывает его в сеть для Подключиться к удалённому компьютеру. Как и на iOS, слушатель, доступный из сети, отказывается запускаться с пустым паролем или паролем по умолчанию.

Сохраните и запустите (или перезапустите) VPN. После этого переключатель Внешний доступ на панели управления показывает адрес, на котором он слушает, и выключает и снова включает слушатель, пока VPN работает.

Подключение

Dashboard открывается окном Новая панель мониторинга; у каждого подключения своё окно, так что несколько устройств могут быть открыты одновременно. Три пути внутрь:

Поля Когда
Подключиться к этому компьютеру нет Chute Mac на этом же Mac. Dashboard говорит напрямую с локальным сокетом движка — ни хоста, ни порта, ни пароля и никакой строки external-controller-access.
Подключиться к удалённому компьютеру Хост, Порт, Пароль Wi-Fi-адрес устройства (iPhone: Настройки → Wi-Fi → ⓘ) или адрес другого Mac. Требует Разрешить доступ по Wi-Fi на телефоне.
Подключиться по USB Устройство, Порт, Пароль iPhone подключён кабелем и доверяет этому Mac, либо устройство Android, видимое для adb. Выберите его в Устройство: и введите тот же порт, что настроили, — канал по кабелю Dashboard находит сам, а для Android сам выполняет проброс порта через adb. Работает при выключенном Разрешить доступ по Wi-Fi и показывает в том числе сотовый трафик, поскольку устройству вовсе не нужно быть в Wi-Fi.

Удалённая машина запоминается, только если вы её сохранили: Сохранить записывает хост, порт и пароль под выбранным вами именем, и в следующий раз именно эти имена перечисляет вкладка Сохранённый компьютер.

Если пароль неверен, окно сообщает Неверный пароль — и по USB, и по сети. Если до устройства не добраться, окно всё равно открывается и показывает Подключение…: для iPhone по USB оно так и остаётся, пока Dashboard повторяет попытки, — до ответа телефона или до нажатия Закрыть, а любое другое подключение заканчивается сообщением Подключение закрыто. Если устройство пропало позже — туннель остановлен, кабель выдернут, телефон сменил сеть, — окно Dashboard сообщает Подключение закрыто и предлагает Переподключиться.

Окно

Панель инструментов переключает пять представлений — Недавние, Активно, DNS, UDP и MitM, — а поле Фильтр справа на ней служит строкой поиска по шаблону хоста, общей с панелью фильтров. Сама панель фильтров появляется отдельно в «Недавние» и «Активно» и скрыта в DNS, UDP и MitM. Панель в левом нижнем углу — текущая скорость загрузки и скачивания; щёлкните её, чтобы развернуть график.

В представлениях Недавние и Активно есть кнопка Обновить, а в «Недавние» ещё и Очистить, опустошающая список. Рядом с ними — два переключателя, действующие на работающий движок, ровно так же, как переключатели в приложениях:

  • Включить запись трафика → Отключить запись трафика: включает захват тел запросов и ответов (параметр replica). Без него строки всё равно появляются со своей маршрутизацией, но вкладки данных нельзя выбрать. Пока устройство не сообщило, как он выставлен, кнопка называется просто Запись трафика.
  • Включить MitM (N правил) → Отключить MitM (N правил): включает расшифровку HTTPS для N хостов из списка хостов MitM; при пустом списке число опускается. Переключатель не делает ничего полезного, пока на устройстве нет доверенного CA и хотя бы одного хоста — см. страницу Расшифровка HTTPS.

Ни один из переключателей не правит файл конфигурации; перезапуск возвращает то, что сказано в файле.

Боковая панель группирует соединения по клиентам: Все клиенты, затем Локальный — клиенты на самом устройстве — и Удалённый — другие машины, использующие этот Chute как прокси. Выбор одного сужает каждый список до него. Когда устройство — Chute Mac, локальные клиенты — это приложения, с именем и значком, и в контекстном меню есть Показать в Finder.

Активно и Недавние

Активно — то, что открыто прямо сейчас; Недавние — история устройства, прочитанная из записей этого запуска и упорядоченная по номеру соединения, — новые внизу. Щелчок по заголовку столбца сортирует по нему. У обоих один набор столбцов:

Столбец
ID Номер соединения в движке — тот же номер, что показывают консоль и приложения
Дата, Длительность Когда началось и сколько длится или длилось
Клиент Процесс (Chute Mac), имя пакета приложения (Chute Android) или локальный адрес
Метод, Сервер, Статус Метод — тип соединения: HTTP, HTTPS, SOCK, TCP или UDP, а не глагол запроса; Сервер — адрес назначения host:port; Статус — состояние соединения: Активно, Завершено или Прервано
Политика Политика, выбранная правилом
Загрузка, Скачивание Байты в каждую сторону
Флаги Что Chute сделал с соединением — см. легенду ниже

Столбец Флаги — самый быстрый способ понять, применяется ли написанное вами правило:

Флаг Значение
M Расшифровано (перехвачено MitM)
H Изменён заголовок
B Правило перезаписи тела или скрипт изменили тело
R Сработало правило перезаписи
K Ответило правило имитации ответов, а не сервер

B отражает только изменение содержимого тела: тело, которое Chute лишь придержал, чтобы сверить с правилами, или заново разбил на чанки либо заново сжал, не меняя содержимого, не отмечается.

Недавние хранят до 5 000 строк; Загрузить более ранние внизу списка запрашивает у устройства следующую страницу, а сам список обновляется раз в несколько секунд. Когда активный список длиннее, чем вмещает один пакет управления, заметка под таблицей говорит, что движок его сократил, — строки есть на устройстве, и Недавние покажут их, когда они закроются.

Щелчок правой кнопкой по строке даёт Копировать команду curl, Экспортировать выбранное как HAR… / CSV…, Экспортировать всё как HAR… / CSV… и Фильтр: <host>; у активной строки есть ещё Разорвать соединение, закрывающее её на устройстве. Щелчок правой кнопкой внутри выделения из нескольких строк сохраняет его, так что Экспортировать выбранное как HAR… / CSV… берут все выделенные строки; пункты для одного соединения действуют на строку, по которой вы щёлкнули. Ещё четыре пункта действуют на правила устройства для этого хоста — самый короткий путь от соединения, на которое вы смотрите, к правилу, которое его меняет: Добавить правило MitM для, Включить MitM для, Добавить перезапись заголовков для и Добавить перезапись тела для <host>.

Внимание: Строка — это соединение, а не запрос. Соединение keep-alive, пронёсшее несколько запросов, остаётся одной строкой, а захваченные данные содержат все эти сообщения подряд; показанные заголовки принадлежат одному из запросов. Поэтому браузер, открывающий страницу, порождает меньше строк, чем у страницы ресурсов.

Панель фильтров

Панель фильтров сужает то, что показано. Она не меняет того, что записывает устройство — для этого служит [Replica] на устройстве.

Элемент Варианты
Фильтр по хосту/URL… Текст, сопоставляемый с хостом, host:port, процессом или приложением, политикой, правилом и типом соединения, — но не с путём 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 (Перехвачено, Заголовок изменён, Тело изменено, Ответ имитирован); и Сработавшие правила — правила перезаписи и имитации ответов, изменившие это соединение, процитированные собственным текстом. Список ограничен с обеих сторон: движок хранит не более 16 срабатываний на соединение, а Dashboard показывает из них 8 и приписывает … ещё N, так что правило, срабатывающее на каждом фрагменте, вытесняет остальные.

Тайминг — на что ушло установление соединения, как измерил движок:

Строка Считается от → до
Подготовка прокси Соединение клиента пришло → Chute готов его обрабатывать
Разрешение DNS → имя разрешено (отсутствует, если правилу адрес не понадобился)
Подбор правила → таблица правил решила
Подготовка удалённого узла → выбранный выход подключён и готов
Активно Вся жизнь соединения, от прихода до закрытия

Строка с нулевым значением не показывается нулём, а опускается вовсе, поэтому у соединения, правилу которого адрес не понадобился, строки Разрешение DNS нет совсем. Медленный запрос обычно медленный ровно в одной из остальных строк, и какая именно — подсказывает, куда смотреть: DNS — в раздел DNS, подготовка удалённого узла — в политику или сервер за ней.

Заголовки запроса / Заголовки ответа — заголовки таблицей, с отдельными Параметры запроса и Cookies для запроса и Cookies для ответа. Заголовок, изменённый правилом, подсвечен. Копировать выбранное копирует выделенные строки.

Данные запроса / Данные ответа — захваченное тело как Hex, Текст, JSON (раскрываемое дерево с поиском) или Изображение (По размеру / Реальный размер); что бы ни было в теле, оно открывается как Текст, а тела multipart разбираются на части. Экспортировать как bin сохраняет сырые байты, а в виде «Текст» есть ещё Открыть в Sublime Text и Открыть в VSCode, если что-то из них установлено. Эти две вкладки можно выбрать, только если есть захваченные данные: запись была включена, когда шло соединение, и фильтры [Replica] пропустили хост.

Внимание: Тела показываются в том виде, в каком захвачены. Сжатый ответ — Content-Encoding: gzip — здесь не распаковывается, так что его вид Текст и JSON — шум; вид Hex и Экспортировать как bin дают байты, чтобы распаковать их где-то ещё. Устройство отказывается отдавать тело больше 2 МиБ — вкладка тогда показывает Не удалось загрузить тело сообщения, — а вид Hex показывает первый МиБ.

DNS и UDP

DNS — кэш резолвера устройства: каждый домен с адресами, в которые он разрешился, сервер, ответивший первым (Chute опрашивает все настроенные серверы сразу — см. DNS), TTL и то, откуда взялась запись. Последний столбец — именно источник: Config, System или Dynamic, — а не тип записи DNS. TTL сообщается как минимум 600 секунд, так что более короткий показывается как 600.

Правая кнопка — Копировать домен, Копировать IP-адреса, Копировать DNS-сервер и Фильтр: <domain>; у записи, полученной динамически, есть ещё Удалить DNS-запись <domain>. Очистить кэш DNS внизу опустошает кэш целиком. Эти две последние команды действуют на кэш устройства, а не на представление Dashboard.

UDP перечисляет сессии UDP — хост, сервер, политику и состояние. Тел у UDP нет.

Инструменты MitM

Представление MitM управляет пятью семействами правил на устройстве в пяти панелях: Правила MitM, Перезапись заголовков, Перезапись тела, Имитация ответов и Перезапись URL. Что верно для всех:

  • Список — это копия правил работающего движка, которая начинается с того, что объявил файл конфигурации.
  • Добавление правила отправляет его на устройство, которое разбирает его так же, как строку конфигурации; строка, которая не разбирается, отвергается с ошибкой, а не сохраняется. Исключение — хост в Правилах MitM: это шаблон, а не строка правила, поэтому любая непустая строка добавляется как набрана.
  • Изменения живут только в работающем движке. В файл конфигурации они не записываются, а перезагрузка или перезапуск возвращает то, что сказано в файле. Найдите с помощью панелей правило, которое работает, и запишите его в конфигурацию.
  • Применяется ли правило, видно в столбце Флаги списка (R, K) и в Сработавшие правила панели сведений.

Правила MitM — один шаблон хоста на правило, host[:port][/path], с префиксом - для исключения: *.google.com, api.example.com:8443, api.example.com/v2/*, -*.apple.com. Та же грамматика, что у ключа hostname на странице Расшифровка HTTPS. Число на переключателе MitM панели инструментов — длина этого списка.

Перезапись заголовков — форма: URL Regex, Запрос или Ответ, Добавить / Заменить / Удалить / Заменить (регулярное выражение), Имя заголовка, Значение заголовка; для Заменить (регулярное выражение) добавляется Регулярное выражение значения, и совпавшая с ним часть значения заголовка заменяется на Замену. Строку конфигурации Dashboard составляет за вас; грамматика — на странице Перезапись заголовков.

Перезапись тела — одна строка конфигурации, введённая так, как вы написали бы её в файле, в любой из форм, которые читает движок: форма Surge http-response url-regex pattern replacement (или http-request), её http-response-jq url-regex jq-program (или http-request-jq), url-regex response regex pattern replacement (или request) и url-regex jsonpath-response jsonpath $.path value (или jsonpath-request). См. Перезапись тела.

Имитация ответов — URL Regex, тип Тела ответа: file (путь; есть Обзор…), text, base64 или tiny-gif (встроенный прозрачный GIF 1×1, без содержимого), необязательный Код состояния и необязательные Заголовки ответа в виде пар Имя: Значение, разделённых |.

Внимание: Путь file читает устройство, на котором работает Chute, в момент запроса. Путь на вашем Mac имеет смысл, когда Dashboard подключён к Chute Mac на той же машине, и не имеет, когда он подключён к iPhone — у телефона нет /Users/…. Для удалённого устройства выберите text или base64, чтобы содержимое приходило в самом правиле (см. Имитация ответов), или разместите файл по URL и используйте перезапись URL.

Перезапись URL — URL Regex, Цель и Тип: header перезаписывает запрос на месте (Map Remote из Surge), 302 и 307 перенаправляют клиента, а reject, reject-200, reject-img, reject-dict, reject-array, reject-tinygif отвечают, не обращаясь к серверу. См. Перезапись URL.

Экспорт

  • HAR — правая кнопка на списке: выбранные строки или все, файлом HAR 1.2, который открывается в инструментах разработчика браузера (Сеть → импорт), Charles или Proxyman. Одна запись на строку с захваченным HTTP-запросом; остальные — например, чистый TCP — в файл не попадают, а комментарий (comment) файла говорит, сколько их. Тела включены, если была включена запись: Dashboard сначала получает их с устройства, под листом с надписью Экспорт в HAR… — Получение записанных тел сообщений с устройства. — с индикатором хода и кнопкой Отмена, которая прерывает экспорт. Тело больше 512 КиБ записывается только своим размером, а один экспорт несёт не более 64 МиБ тел.
  • CSV — фиксированный набор столбцов для электронной таблицы: ID,Method,URL,Status Code,Status,Duration,Upload,Download,Process,Start Time. Это не столбцы самого списка: колонок Дата, Клиент, Сервер, Политика и Флаги в нём нет. Method — это метод запроса, а URL — полный URL, как в экспорте HAR: HTTPS, прошедший через HTTP-прокси без расшифровки, даёт CONNECT и https://host. Строка без HTTP-запроса — обычный TCP или HTTPS, который TUN передал без расшифровки, — вместо них даёт тип соединения и хост.
  • Копировать команду curl — вызов curl, повторяющий запрос с вашего Mac вместе с его методом, заголовками и телом; тело сначала получается с устройства. Content-Length curl вычисляет сам. Строка, которая лишь туннель, — нерасшифрованный CONNECT или чистый TCP, — даёт только curl и URL.
  • Экспортировать как bin — одно тело, как захвачено.

Dashboard строит свой HAR из списка и тел, которые получает с устройства. Движок умеет строить свой — со сработавшим правилом, политикой и сработавшими перезаписями в объекте _kl каждой записи и временами отправки и приёма, взятыми из захвата, — через Экспорт HAR в консоли или GET /api/connections/export?format=har.

Что недоступно из Dashboard

Dashboard говорит по двоичному каналу управления движка, а часть того, что умеет движок, есть только в HTTP API управления. Для этого используйте веб-консоль или API:

  • диагностический пакет, состояние движка, счётчики отказов и события;
  • итоги срабатываний по правилам на странице Правила консоли и ответ, который они дают: срабатывало ли это правило хоть раз;
  • собственный HAR движка, см. выше;
  • журнал.

Ещё одна вещь, которую стоит знать, прежде чем на него полагаться:

  • На iPhone, Apple TV и Android расшифровка HTTPS и захват тел — лицензируемые функции. Без лицензии Dashboard всё равно подключается и показывает каждое соединение с правилом и политикой, но строки HTTPS никогда не расшифровываются — флага M нет, — а вкладки данных нельзя выбрать. На iPhone и Android переключатель MitM в приложении не остаётся включённым, вместо этого появляется предложение купить лицензию; у Apple TV строки MitM на экране панели управления нет вовсе. См. Лицензия и активация.
S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-29 21:57:05

Эта страница — перевод английской версии. При расхождениях приоритет имеет английская версия.

results matching ""

    No results matching ""