Сравнение сессий

Сравнение пар запрос/ответ между захватами: дрейф, заголовки, тела, TLS-отпечатки.

Traffic Jam хранит все импортированные захваты в одном рабочем пространстве, поэтому один и тот же эндпоинт, записанный в двух сборках или до/после изменения, можно сопоставить и сравнить поле за полем. Сравнение доступно на трёх вкладках анализа — Compare, TLS и Timeline — из навигации рабочего пространства (сначала импортируйте захваты, см. /docs/ru/capture/).

Сопоставление базовой версии с кандидатом

Откройте вкладку Compare. В верхней части расположены два селектора: Baseline (эталонный запрос) и Candidate (то, с чем вы его сравниваете). Выберите Baseline, и Traffic Jam автоматически подберёт лучшего Candidate из другого захвата, ранжируя варианты по оценке совпадения.

Пары формируются по методу, authority и пути — тот же compareKey, что используется для группировки трафика в других местах. Оценка начисляется в порядке убывания веса:

СигналБаллы
Тот же таргет (метод + authority + путь)+34
Другой захват (в режиме cross-capture)+22
Тот же хост / тот же путь (если таргет отличается)+14 / +12
Тот же метод+10
Тот же статус (или тот же класс статуса)+10 / +6
Тот же query+7
Тот же протокол, наличие тела, SNIпо +5
Тот же content-type, ALPNпо +4
Близкая длительность (в пределах 10%)до +5

Оценка 72+ (или любое совпадение по таргету) — это Best-совпадение, 60+ — Strong, ниже — Weak; слабые совпадения никогда не выбираются автоматически. Фильтр Match в селекторе Candidate сужает выборку до cross-capture, same target, same host или same capture. Если один и тот же запрос был отправлен несколько раз, степпер ‹ n/m › рядом с селектором позволяет переключаться между его вхождениями.

[!TIP] Клавиатура: a открывает Baseline, m открывает Candidate, / переводит фокус на пустой селектор, [ ] переключают вхождения Baseline, { } — Candidate, x меняет стороны местами, s сохраняет пару как набор сравнения, d очищает оба селектора.

Заголовок сравнения даёт сводку дрейфа с первого взгляда: счётчик изменений по каждой области плюс предупреждающие бейджи при расхождении статуса (200 → 404), протокола (HTTP/2 → HTTP/1) или длительности.

Сравнение каждой части обмена

Панель деталей открывается на первой вкладке, где есть различия. Вкладки 18 переключают между:

ВкладкаЧто сравнивается
URLСтруктурированные поля scheme/host/path, бок о бок
QueryЗначения по каждому параметру, сгруппированные по имени с индексами повторов
Req headers / Res headersДобавленные, удалённые, изменённые значения и порядок заголовков
Req body / Res bodyСравнение размера/текста плюс семантический diff
ProtocolАнонсированные перед запросом HTTP/2 SETTINGS, версии, TCP/H2-поток
TLSПоля отпечатка ClientHello (см. ниже)

Сравнение заголовков учитывает порядок: перестановка Cookie и Authorization отобразится как изменение порядка, даже если все значения идентичны — это полезно, когда сервер чувствителен к последовательности заголовков.

Для тел переключайтесь между Semantic и Text тумблером над diff. Семантический diff разбирает обе стороны и выравнивает записи по пути, так что переформатированный JSON или переставленные поля формы проявляются как строки changed / added / removed по каждому полю вместо сплошной стены красного текста:

СинтаксисВыравнивание
JSONJSON-путь до каждого листа ($.user.id, $.items[0])
FormURL-декодированные поля, повторы сгруппированы
XML / HTMLПути элементов/атрибутов/текста
CSVЯчейки row[n].column относительно строки заголовков

Переключатель word / char задаёт гранулярность инлайн-подсветки в текстовом виде.

Сравнение TLS-отпечатков ClientHello

Вкладка TLS внутри пары запросов, а также отдельная вкладка анализа TLS сравнивают реальное рукопожатие — а не только HTTP. ClientHello есть только в импортах PCAP/PCAPNG; в HAR-файлах пакетов рукопожатия нет, поэтому вкладка объясняет это и предлагает вместо этого проверить сертификаты.

Таблица полей перечисляет каждое поле отпечатка и помечает его как same / diff:

SNI, ALPN, version, supported versions, JA3, JA3 full, JA4, JA4 raw, cipher suites, extensions, supported groups, EC point formats, signature algs.

Помимо таблицы, доступны три вида: Fields, Raw hello (hex-дамп ClientHello со смещениями в байтах, плюс восстановленное hello, если рукопожатие было разбито на сегменты) и Text diff. Кнопки копирования экспортируют сырой hex. Сводная полоса и бейджи отмечают, изменились ли поля, сырые байты, JA3, JA4 или ALPN.

TLS-селектор оценивает Candidate иначе, чем HTTP: тот же таргет +60, тот же SNI +50, отличающиеся JA3/JA4 +16, другой захват +8, общий ALPN +6. Чипы-переключатели фильтруют по Raw hello only, Has SNI, Has JA4, Same target, Same SNI или Different JA3/JA4.

[!NOTE] Group repeated (включено по умолчанию) схлопывает идентичные ClientHello — один и тот же захват, таргет, JA4/JA3 и ALPN — в одну строку со счётчиком вхождений ×N. Если его выключить, отобразятся все сырые рукопожатия — так можно кластеризовать разных TLS-клиентов, обращавшихся к одному хосту.

Аудит сертификатов

Подвкладка Certificates на вкладке TLS (клавиши 1/2 переключают Compare/Certificates) перечисляет все наблюдавшиеся цепочки серверных сертификатов с поиском по хосту, издателю, SAN, отпечатку или захвату. Каждая запись показывает subject, issuer, серийный номер, окно действия, имя сервера и индекс в цепочке, а также бейдж валидности: Valid, Expiring soon (менее 30 дней) или Expired. Здесь можно заметить ротацию CA, самоподписанный сертификат или изменение серийного номера, значимое для пиннинга, между захватами.

Выявление различий в последовательности на Timeline

По-запросные diff упускают порядок — захват, который делает лишний вызов, пропускает один или меняет порядок потока. Откройте вкладку Timeline и переключитесь в режим Compare (клавиша v), затем выберите базовый и сравниваемый захваты. Traffic Jam выравнивает две последовательности запросов и отображает три типа строк:

СтрокаЗначение
pairСопоставленные запросы (тот же compareKey или оценка ≥ порога)
baseline-onlyПрисутствует только в базовом захвате
compare-onlyПрисутствует только в сравниваемом захвате

Выравнивание использует оптимальное выравнивание последовательностей для захватов до 1200 запросов на сторону и более быстрый жадный проход сверх того (в строке статистики помечается как fast alignment). Строка статистики сообщает общее число строк, число сопоставленных пар и количество baseline-only / compare-only.

Из выровненной пары нажмите p, чтобы отправить обе стороны прямо на вкладку Compare как Baseline/Candidate (или a / m, чтобы задать одну сторону), а также открыть TLS-отпечаток запроса из его инспектора. Фильтры Timeline — поиск, хосты, статус (2xx5xx, errors, open), протокол, метод, поток и наличие тела — применяются к обоим захватам до выравнивания, так что можно сравнить только аутентифицированные вызовы API. Окружающий рабочий процесс анализа см. в /docs/ru/analysis/.

[!WARNING] Сравнение только читает захваченный трафик и никогда не отправляет запросы. Любое активное зондирование (replay, мутации) рассматривается в других разделах и должно быть направлено только на системы, которые вы уполномочены тестировать.

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