Отладка на Mac
На Mac и Chute, и трафик, который вы хотите рассмотреть, находятся на одной машине, поэтому почти всё, на что руководство по iPhone тратит шаги — кабель, слушатель, пароль, — здесь не нужно. Вместо этого встаёт другой вопрос: доходит ли трафик до Chute вообще, потому что в macOS приложение вправе просто не пользоваться прокси.
1. Пропустить трафик через Chute
Два механизма, независимых друг от друга, — меню показывает оба:
- Системный прокси — переключатель в самом верху меню. Регистрирует Chute как системный HTTP/SOCKS-прокси. Приложения, читающие системные настройки прокси (браузеры, большинство приложений с интерфейсом), идут через Chute; остальных это не касается.
- Расширенный режим (⌘E) — перехватывает трафик на сетевом уровне, так что мнение приложения о прокси перестаёт что-либо значить. Именно это нужно, когда приложение вовсе не умеет работать через прокси. Порядок разрешений и два способа реализации описаны в Расширенном режиме.
Обычная неожиданность — терминальные инструменты: curl, git, npm и им подобные читают HTTP_PROXY/HTTPS_PROXY из окружения, а не системные настройки. Пункт меню Копировать команду export для терминала (⌘C) кладёт нужную строку в буфер обмена —
export HTTPS_PROXY=http://127.0.0.1:8118;export HTTP_PROXY=http://127.0.0.1:8118;export NO_PROXY=127.0.0.1,localhost,.example.com
— с вашим настоящим портом HTTP-слушателя и с NO_PROXY, построенным из списка skip-proxy, так что инструменты командной строки обходят ровно то же, что обходит системный прокси. Вставьте её в ту оболочку, из которой тестируете; действует она только на неё.
Вы должны увидеть: вкладка Трафик в главном окне наполняется строками по мере того, как вы пользуетесь приложением. (Главное окно — это Открыть панель мониторинга... (⌘,) в меню; на Mac, где конфигурации были ещё до нынешнего интерфейса, сначала включите там же Использовать новый интерфейс главного окна.) Ни одной строки — значит трафик до Chute не дошёл; вернитесь к этому шагу, а не ищите проблему с расшифровкой.
2. Читать вкладку «Трафик»
Трафик перечисляет живые соединения с полем поиска и счётчиком (Активных: N). Показать столбцы ▾ переключает раскладку:
- В две строки (по умолчанию) — две строки на соединение, удобно просматривать.
- Широкая таблица — одна строка на соединение по всем столбцам: Хост, Процесс, Правила, Политика, Протокол, Отправка, Скачивание, Всего, Состояние. Щелчок по заголовку сортирует.
- Группировать по приложениям — соединения собраны под приложением, которое их открыло, с именем и значком. Самый быстрый способ ответить на вопрос «с кем разговаривает этот процесс».
Правый щелчок по строке даёт Показать подробности, Копировать хост, Копировать подробности, Фильтровать журнал (переходит на вкладку Лог, уже отфильтрованную по этому соединению) и Закрыть соединение.
Показать подробности открывает окно с хостом, процессом, протоколом, удалённой стороной, правилом, политикой, перезаписями, отправкой, скачиванием и состоянием соединения — всё о том, как оно было смаршрутизировано.
Вкладка «Трафик» не показывает тела запросов и ответов. Для этого в окне сведений есть кнопка Запросы и история: она открывает Веб-консоль, которая их показывает. Открывается главная страница консоли, а не именно это соединение.
3. Проверить правило, не отправляя запрос
На вкладке Правила есть кнопка Проверить правило.... Введите URL или просто домен, нажмите Проверить — и Chute ответит разобранными хостом и портом, результатом DNS, совпавшим правилом, политикой, которую это правило выбрало, и примечаниями.
Пользуйтесь ею, когда вопрос звучит как «почему это ушло напрямую» или «какое из двух моих правил побеждает»: она обращается к работающему набору правил, а значит заодно говорит, действительно ли загружена та конфигурация, которую вы правили. Если ответ выглядит устаревшим, перезагрузите конфигурацию (⌘R). Тот же вопрос через API — это POST /api/rules/match.
4. Включить запись и расшифровку
Оба пункта в меню, и оба действуют на работающий движок:
- Запись трафика (⌘B) — сохраняет тела запросов и ответов, то есть параметр
replica. По умолчанию выключено, и до включения тел нет ни у чего. - Включить MitM (⌘M) — включает расшифровку для хостов из списка
hostnameв[MITM].
Оба записываются обратно в файл конфигурации — replica и enable в [MITM], — поэтому переживают и перезагрузку, и перезапуск. У удалённой конфигурации нет локального файла, куда писать: переключатель всё равно меняет работающий движок, а приложение сообщает Не удалось сохранить конфигурацию. Консоль, Dashboard и API переключают те же два параметра, не записывая файл; после такого переключения Перезагрузить конфигурацию (⌘R) сохраняет выставленное, пока файл под ним не изменился, — replica применяется заново, когда в файле изменилось его собственное значение, а [MITM] enable — когда изменился любой ключ раздела [MITM] или список хостов правили из консоли или через API, — а перезапуск всегда начинает с того, что сказано в файле.
CA в macOS — это один шаг. В окне конфигурации откройте MitM:
- Создать новый сертификат (или Импортировать сертификат из файла PKCS#12).
- Установить сертификат в систему — macOS запросит пароль администратора и добавит его в системную связку ключей как доверенный корневой. Отдельного шага «доверять», как в iOS, здесь нет.
- Экспортировать сертификат пишет копию
.pem— так один и тот же CA попадает на телефон, Apple TV или в контейнер.
5. Сузить до одного процесса
Из платформ Apple только на macOS Chute знает, какое приложение открыло соединение, и правила могут этим пользоваться (Chute Android тоже это знает — по имени пакета):
[Rule]
PROCESS-NAME,curl,DIRECT
PROCESS-NAME,MyApp,MyProxy
О PROCESS-NAME, PROCESS-PATH и PROCESS-NAME-REGEX см. Правила процессов. Вместе с Группировать по приложениям на вкладке «Трафик» это позволяет пустить одно приложение через прокси — или через имитацию, — пока всё остальное на машине работает как обычно.
6. Что бывает только на Mac
- Пути к файлам в
data=у правил имитации ответов. Файл читает то устройство, на котором работает Chute, в момент запроса. На Mac это та же машина, где вы правите файл: настоящий путь работает, а правка файла меняет следующий ответ без перезагрузки. На телефоне тот же путь не значит ничего — потому в руководстве по iPhone используетсяbase64=. - Файлы на диске. Сегменты журнала и база данных соединений лежат в
~/Chute/Share/<run id>/, а отметка запуска — рядом, в~/Chute/Share/, см. Расположение файлов (macOS). Их можно приложить к отчёту об ошибке напрямую, не проходя через меню «Поделиться». Захваченные тела тоже там, вDUMP/, но только пока движок работает: при остановке они удаляются, так что сначала экспортируйте нужное — Экспорт HAR в консоли или Экспортировать как bin в Dashboard. - Обслуживание других устройств. С включённым
allow-wifi-accessдругие машины в сети могут направить свои настройки прокси на этот Mac. Их трафик появится в тех же представлениях, а в боковой панели клиентов Dashboard — в разделе Удалённый. Так изучают устройство, на котором Chute вообще не работает, включая ноутбук с Windows или телевизор.
7. Когда вкладки «Трафик» мало
- Веб-консоль — строка меню → Открыть веб-консоль. Тела, экспорт HAR, страница правил, показывающая, какие перезаписи срабатывали, и диагностические пробы. Требуется
external-http-controllerв[General]. - Chute Dashboard — отдельное бесплатное приложение. На этом Mac ему не нужна вообще никакая настройка: Открыть Chute Dashboard... (⌘D) в меню открывает его уже подключённым к этому Mac, а в окне Новая панель мониторинга то же самое делает Подключиться к этому компьютеру. Этот путь доходит до движка через локальный сокет, который туннель открывает всегда, так что ни порта, ни пароля задавать не нужно. Удалённый путь нужен, только когда Dashboard работает на другом Mac:
external-controller-access = <пароль>@0.0.0.0:6170в[General], а затем Подключиться к удалённому компьютеру с адресом этого Mac, тем же портом и паролем. В любом случае стоит того ради панелей инструментов MitM и экспорта в HAR / curl по правому щелчку. - Вкладка «Лог» — сначала поднимите уровень через
loglevel = verbose, а потом верните обратно. Фильтровать журнал на строке соединения сужает вкладку до этого одного соединения.
Эта страница — перевод английской версии. При расхождениях приоритет имеет английская версия.