Импорт захватов

Импорт pcap/pcapng и HAR, расшифровка TLS по keylog и хранение сессий.

Traffic Jam читает дампы трафика и экспортированные из браузера HAR-файлы, превращая их в сессию, которую можно сравнивать, искать по ней и отправлять replay. Разбор полностью выполняется в Go-бэкенде встроенным парсером на gopacket — байты дампа и ключевой материал никогда не передаются дочернему процессу, а TShark для импорта не требуется.

Поддерживаемые форматы файлов

ТипРасширенияПримечания
Дамп трафика.pcap, .pcapng, .capКлассический pcap и pcapng, определяются по магическим байтам
Сжатый дамп.pcap.gz, .pcapng.gzОбёрнут в gzip; распаковывается прозрачно
HAR.harHAR 1.2 в том виде, в каком его экспортируют DevTools браузера
Key log TLS.sslkeylog, .keylog, .keys, .log, .txtФормат keylog NSS (см. ниже)

Бэкенд отличает pcapng от классического pcap по magic-заголовку секции (0a 0d 0d 0a) и прозрачно распаковывает gzip перед разбором, так что файл можно подкинуть в любом из двух видов как есть.

Импорт дампа

  1. Откройте приёмник дампов (панель импорта на домашней странице рабочего пространства).
  2. Выберите файл дампа, целую папку или перетащите файлы в окно. Глобальный drag-and-drop работает в любом месте приложения.
  3. Если есть keylog, сопоставьте его с дампом (см. следующий раздел), затем подтвердите импорт.

Каждый дамп становится отдельной сессией. Прогресс показывается в тосте; при успехе тост предлагает действие Open timeline. HAR-файлы импортируются через тот же приёмник и автоматически направляются на отдельный эндпоинт.

[!TIP] Можно обращаться и напрямую к API: POST /api/import (поля multipart: pcap, опционально keylog, name, folderPath) для дампов и POST /api/import-har (поле har) для HAR. Лимит загрузки по умолчанию — 4 GiB на запрос; переопределить его можно переменной TRAFFIC_JAM_MAX_UPLOAD_BYTES.

Расшифровка TLS-трафика по keylog

Зашифрованные сессии HTTP/1 и HTTP/2 расшифровываются, если предоставить файл key log NSS — тот самый формат, который пишет переменная окружения SSLKEYLOGFILE. Перед началом захвата укажите целевому клиенту путь к файлу, доступному на запись:

export SSLKEYLOGFILE="$HOME/tls-keys.log"
# запустите браузер / curl / тестируемое приложение, затем снимайте трафик

Firefox и Chromium понимают SSLKEYLOGFILE напрямую; curl (собранный с NSS или поддерживающим TLS-стеком) — тоже. Прикрепите получившийся файл к дампу в приёмнике либо передайте его как поле multipart keylog. Парсер читает стандартные строки из трёх колонок (LABEL client_random secret), пропускает комментарии # и объединяет внешний keylog с секретами, встроенными в сам дамп.

Поддерживаемые метки секретов:

Версия TLSЧитаемые метки keylog
TLS 1.3CLIENT_HANDSHAKE_TRAFFIC_SECRET, SERVER_HANDSHAKE_TRAFFIC_SECRET, CLIENT_TRAFFIC_SECRET_0, SERVER_TRAFFIC_SECRET_0
TLS 1.2CLIENT_RANDOM (master secret)

Поддерживаются шифронаборы TLS 1.3 AES-128-GCM, AES-256-GCM и ChaCha20-Poly1305, а также AEAD-наборы TLS 1.2 (GCM и ChaCha20-Poly1305). Если для стрима найден подходящий секрет, но расшифровать его всё равно не удаётся, при импорте выводится предупреждение о сбое расшифровки по конкретному стриму.

Блоки Decryption Secrets Block в pcapng

Если ваш инструмент захвата встраивает секреты прямо в файл — функция Wireshark «Export TLS session keys» или дамп, снятый при активной SSLKEYLOGFILE, — Traffic Jam читает Decryption Secrets Block (DSB) из pcapng, и отдельный файл keylog не нужен. Читатель pcapng в gopacket пропускает непонятные ему блоки, поэтому бэкенд отдельно сканирует DSB (тип блока 0x0000000a, тип секретов TLSK) и объединяет эти ключи с любым внешним keylog, который вы тоже предоставите.

Как разбираются дампы

Парсер собирает каждый TCP-стрим заново по порядковым номерам, предупреждает о пробелах в дампе, а затем классифицирует полезную нагрузку:

  • HTTP/2 определяется по преамбуле соединения (PRI * HTTP/2.0…), а не по ALPN — в ALPN перечислены все протоколы, которые клиент предлагал, из-за чего соединения HTTP/1.1 ошибочно классифицируются, когда браузер заодно предлагал h2. Кадры декодируются фреймером HTTP/2 и декодером HPACK; кадры SETTINGS тоже сохраняются.
  • Запросы и ответы HTTP/1 разбираются читателями Go net/http с сохранением порядка заголовков и тел.
  • Туннели HTTP CONNECT обнаруживаются в начале стрима, отделяются, а туннелируемый трафик разбирается самостоятельно.

Тела распаковываются согласно Content-Encoding (gzip, deflate/zlib, brotli, zstd). Наряду с обменами парсер извлекает отпечатки TLS ClientHello (JA3/JA3Full, шифронаборы, расширения, поддерживаемые группы, алгоритмы подписи, SNI, ALPN) и цепочку сертификатов сервера.

Хранение сессий

Импортированные сессии хранятся в SQLite, поэтому переживают перезапуск API. База по умолчанию — .traffic-jam/traffic-jam-v2.sqlite3; чтобы перенести её, задайте TRAFFIC_JAM_DB_PATH. Сессии, обмены, TLS-отпечатки и сертификаты лежат в отдельных таблицах (capture_sessions, traffic_exchanges, tls_fingerprints, tls_certificates), а исходные пути к pcap/keylog записываются, чтобы сессию можно было отследить до файлов-источников. Удаление сессии каскадно удаляет и её строки.

Импорт нескольких дампов

Перетащите или выберите сразу несколько дампов — каждый импортируется как отдельная сессия в том же рабочем пространстве. Если вы предоставляете дампы и keylog вместе, приёмник автоматически сопоставляет каждый дамп с keylog по основе имени файла: точное совпадение основы имеет приоритет, иначе берётся keylog из того же каталога. Импорт папки рекурсивно обходит каталог и применяет то же сопоставление. Требования к окружению описаны в /docs/ru/getting-started/installation/, а сравнение получившихся сессий — в /docs/ru/analysis/.

Ограничения

ОбластьПоведение
WebSocketРукопожатие Upgrade: websocket обнаруживается и помечается (ответ 101 или Connection: upgrade), но кадры сообщений WebSocket не декодируются. Предупреждение сообщает количество найденных апгрейдов.
QUIC / HTTP3UDP-потоки на порту 443/8443 обнаруживаются, и выводится предупреждение. QUIC не расшифровывается по keylog TLS — отключите QUIC/HTTP3 в клиенте, чтобы снимать этот трафик как TLS поверх TCP.
Пробелы TCPСтримы с недостающими сегментами собираются по мере возможности и помечаются; затронутые сообщения могут быть неполными.

Чтобы заняться реверс-инжинирингом API внутри импортированной сессии, переходите к /docs/ru/api-re/.

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