Живой захват

Захват трафика в реальном времени через mitmdump и tshark.

Вместо импорта готового файла Traffic Jam может записывать сессию прямо по ходу работы: бэкенд запускает tshark для записи pcapng, параллельно с прохождением трафика сохраняет ключи TLS-сессий в NSS keylog, а при остановке разбирает результат и помещает его в библиотеку захватов. Захватывайте трафик только с тех систем, которыми вы владеете или на тестирование которых у вас есть письменное разрешение.

Требования

ИнструментЗачем нуженПримечания
tshark в PATHЛюбой живой захватПишет pcapng и перечисляет интерфейсы (tshark -D). Для импорта файла не требуется.
mitmdump в PATHРежим захвата через проксиРаботает как прокси с перехватом TLS; ключи логируются через SSLKEYLOGFILE.
Chrome или ChromiumРежим захвата через браузерИщется в PATH (google-chrome, google-chrome-stable, chrome, chromium, chromium-browser) либо в стандартных расположениях .app на macOS.

Панель захвата показывает индикаторы готовности (tshark, mitmdump, Chrome, интерфейсы) и держит кнопку старта неактивной, пока все четыре компонента не будут готовы. Собранное приложение для macOS при запуске бэкенда добавляет распространённые пути Homebrew, например /opt/homebrew/bin.

Как записывается сессия

Каждый живой захват выполняет tshark -i <interface> -w <name>.pcapng, а если задан BPF-фильтр — то и его (-f). Ключевой материал TLS берётся из одного из двух источников; в обоих случаях он пишется в файл <name>.sslkeylog рядом с pcap:

  • Режим браузера — Traffic Jam запускает Chrome с одноразовым профилем (--user-data-dir=<workspace>/chrome-profile --no-first-run --no-default-browser-check --new-window about:blank) и переменной SSLKEYLOGFILE, указывающей на keylog.
  • Режим прокси — Traffic Jam запускает mitmdump --listen-host <host> --listen-port <port> с установленными MITMPROXY_SSLKEYLOGFILE и SSLKEYLOGFILE. Вы направляете тестируемое устройство или браузер на прокси; для каждого TLS-соединения, проходящего через него, логируются ключи.

Одновременно может выполняться только один живой захват — попытка запустить второй завершается ошибкой live capture already running (HTTP 409).

Запуск захвата через браузер

Откройте вкладку Browser в рабочей области и воспользуйтесь панелью Browser capture:

  1. Выберите Interface для захвата. Список интерфейсов берётся из tshark -D; по умолчанию выбран any или первый не-loopback интерфейс.
  2. При желании укажите Save to collection (по умолчанию Browser captures) и Capture name (по умолчанию Chrome YYYY-MM-DD HH:MM:SS).
  3. При желании сузьте BPF filter (по умолчанию tcp port 443).
  4. Нажмите Launch Chrome and capture. Откроется новое окно Chrome — работайте с целевым приложением в нём.
  5. Когда закончите, нажмите Stop and import.

Пока идёт захват, панель опрашивает статус каждые 2 секунды и показывает прошедшее время, размеры pcap и keylog, а также состояние каждого процесса — tshark, Chrome и прокси.

Захват через прокси mitmdump

Используйте режим прокси, когда трафик исходит с другого устройства или из браузера, который Traffic Jam не запускал. Он доступен через эндпоинт запуска (поле launchBrowser не указывайте):

POST /api/live-capture/start
Content-Type: application/json

{
  "name": "android-app",
  "interface": "en0",
  "proxyHost": "127.0.0.1",
  "proxyPort": 8080,
  "bpf": "tcp port 8080",
  "folderPath": "Proxy captures"
}

Затем настройте тестируемое устройство или браузер на использование 127.0.0.1:8080 (или выбранных вами хоста и порта) в качестве HTTP-прокси.

[!NOTE] mitmproxy терминирует TLS собственным удостоверяющим центром, поэтому для успешных соединений тестируемое устройство должно доверять CA mitmproxy (сам сертификат mitmproxy отдаёт по адресу http://mitm.it через прокси). Расшифровка внутри Traffic Jam выполняется по записанному keylog, а не по CA.

Поскольку прокси-трафик приходит на нестандартный порт, на этапе импорта парсеру указывается декодировать порт прокси как TLS (-d tcp.port==<proxyPort>,tls); в режиме браузера такая подсказка не нужна.

[!WARNING] Перехват трафика, к которому у вас нет доступа, незаконен в большинстве юрисдикций. Направляйте через прокси только собственные тестовые устройства, а с полученными артефактами — содержащими расшифрованные тела запросов и ответов — обращайтесь с теми же мерами контроля, что и с любыми другими доказательствами.

Артефакты и хранение

Каждая сессия получает каталог <capture-dir>/<session-id>/, содержащий:

ФайлСодержимое
<name>.pcapngСырые пакеты, записанные tshark
<name>.sslkeylogЖурнал ключей NSS TLS
chrome-profile/Одноразовый профиль Chrome (только в режиме браузера)

<name> — это имя захвата, приведённое к строчным буквам, цифрам, ., _ и - (всё остальное заменяется на -, длина ограничена 80 символами); пустое имя заменяется на ID сессии.

Каталог захватов определяется следующим образом:

УсловиеКаталог
По умолчанию.traffic-jam/live-captures относительно рабочего каталога API
Задана TRAFFIC_JAM_DB_PATH (десктопные сборки)live-captures рядом с файлом базы данных
Задана TRAFFIC_JAM_CAPTURE_DIRВсегда этот каталог
export TRAFFIC_JAM_CAPTURE_DIR=/path/to/live-captures

Остановка и импорт

При остановке каждому процессу отправляется SIGINT, затем следует ожидание до 3 секунд, после чего оставшиеся процессы принудительно завершаются. После этого бэкенд разбирает pcapng внутри процесса с помощью gopacket (tshark на этапе импорта не нужен), расшифровывает поддерживаемые сессии TLS 1.2/1.3 по записанному keylog и сохраняет сессию в библиотеку захватов SQLite в выбранную вами папку. Интерфейс переключается на вкладку Captures и сообщает N requests, M complete. pcap и keylog остаются на диске, так что сессию можно импортировать повторно или открыть те же файлы в Wireshark.

Остановка сервера API также останавливает выполняющийся захват.

Ограничения и справочник по API

ПараметрЗначение
Одновременные захваты1 (409 live capture already running)
Значения прокси по умолчаниюхост 127.0.0.1, порт 8080 (порт должен быть в диапазоне 1–65535)
БраузерТолько Chrome (only Chrome browser capture is supported)
ИнтерфейсОбязателен; перечисляется через tshark -D (таймаут 5 с)
Льготное время остановки процессов3 с SIGINT, затем принудительное завершение
Отчёт об ошибкахСохраняются последние 8 КиБ вывода каждого процесса и показываются в статусе

Эндпоинты бэкенда:

ЭндпоинтМетодНазначение
/api/live-capture/interfacesGETСписок интерфейсов для захвата из tshark -D
/api/live-capture/statusGETСостояние выполнения, размеры артефактов, здоровье процессов, пути к инструментам
/api/live-capture/startPOSTЗапуск сессии (поля указаны выше)
/api/live-capture/stopPOSTОстановка, разбор и импорт сессии

Об импорте файлов, расшифровке TLS по внешним keylog и о том, что происходит с сессиями после попадания в библиотеку, см. /docs/ru/capture/ и /docs/ru/getting-started/.

Документация Traffic Jam. Собрано с помощью Hugo.