Живой захват
Захват трафика в реальном времени через 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:
- Выберите Interface для захвата. Список интерфейсов берётся из
tshark -D; по умолчанию выбранanyили первый не-loopback интерфейс. - При желании укажите Save to collection (по умолчанию
Browser captures) и Capture name (по умолчаниюChrome YYYY-MM-DD HH:MM:SS). - При желании сузьте BPF filter (по умолчанию
tcp port 443). - Нажмите Launch Chrome and capture. Откроется новое окно Chrome — работайте с целевым приложением в нём.
- Когда закончите, нажмите 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/interfaces | GET | Список интерфейсов для захвата из tshark -D |
/api/live-capture/status | GET | Состояние выполнения, размеры артефактов, здоровье процессов, пути к инструментам |
/api/live-capture/start | POST | Запуск сессии (поля указаны выше) |
/api/live-capture/stop | POST | Остановка, разбор и импорт сессии |
Об импорте файлов, расшифровке TLS по внешним keylog и о том, что происходит с сессиями после попадания в библиотеку, см. /docs/ru/capture/ и /docs/ru/getting-started/.