Импорт захватов
Импорт pcap/pcapng и HAR, расшифровка TLS по keylog и хранение сессий.
Traffic Jam читает дампы трафика и экспортированные из браузера HAR-файлы, превращая их в сессию, которую можно сравнивать, искать по ней и отправлять replay. Разбор полностью выполняется в Go-бэкенде встроенным парсером на gopacket — байты дампа и ключевой материал никогда не передаются дочернему процессу, а TShark для импорта не требуется.
Поддерживаемые форматы файлов
| Тип | Расширения | Примечания |
|---|---|---|
| Дамп трафика | .pcap, .pcapng, .cap | Классический pcap и pcapng, определяются по магическим байтам |
| Сжатый дамп | .pcap.gz, .pcapng.gz | Обёрнут в gzip; распаковывается прозрачно |
| HAR | .har | HAR 1.2 в том виде, в каком его экспортируют DevTools браузера |
| Key log TLS | .sslkeylog, .keylog, .keys, .log, .txt | Формат keylog NSS (см. ниже) |
Бэкенд отличает pcapng от классического pcap по magic-заголовку секции (0a 0d 0d 0a) и прозрачно распаковывает gzip перед разбором, так что файл можно подкинуть в любом из двух видов как есть.
Импорт дампа
- Откройте приёмник дампов (панель импорта на домашней странице рабочего пространства).
- Выберите файл дампа, целую папку или перетащите файлы в окно. Глобальный drag-and-drop работает в любом месте приложения.
- Если есть 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.3 | CLIENT_HANDSHAKE_TRAFFIC_SECRET, SERVER_HANDSHAKE_TRAFFIC_SECRET, CLIENT_TRAFFIC_SECRET_0, SERVER_TRAFFIC_SECRET_0 |
| TLS 1.2 | CLIENT_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 / HTTP3 | UDP-потоки на порту 443/8443 обнаруживаются, и выводится предупреждение. QUIC не расшифровывается по keylog TLS — отключите QUIC/HTTP3 в клиенте, чтобы снимать этот трафик как TLS поверх TCP. |
| Пробелы TCP | Стримы с недостающими сегментами собираются по мере возможности и помечаются; затронутые сообщения могут быть неполными. |
Чтобы заняться реверс-инжинирингом API внутри импортированной сессии, переходите к /docs/ru/api-re/.