Фильтр tcpdump для получения всех пакетов с типом параметров tcp, равным x

Потратьте пару часов на поиск фильтра tcpdump, чтобы получить все пакеты с параметром tcp, равным x (в частности, 8). Фильтр Wireshark просто tcp.option_kind == 8.

После прочтения https://www.wains.be/pub/networking/tcpdump_advanced_filters.txt попытался использовать tcp[22] =8, но безуспешно

Ваша помощь будет оценена:) Спасибо

1 ответ

У меня есть только частичный ответ для вас. Если искомая опция всегда является первой опцией TCP, то вы можете использовать следующий фильтр:

"(((tcp[12] & 0xf0) >> 2) > 20) && tcp[20] = 8"

Что делает этот фильтр? Этот фильтр изолирует поле смещения данных (то есть длину заголовка TCP), чтобы сначала убедиться, что заголовок TCP содержит какие-либо параметры вообще. Поскольку поле смещения данных содержит только первые 4 бита байта со смещением 12 заголовка TCP, мы должны выделить эти биты, применив маску 0xf0, Затем значение сдвигается на 4 бита вправо, чтобы преобразовать его в число, которое мы можем использовать, и затем умножается на 4 (или смещается обратно влево на 2 бита), поскольку смещение данных представляет количество 32-битных слов заголовка., Эквивалент сдвига вправо на 4, а затем влево на 2 - это просто сдвиг вправо на 2. Если значение смещения данных превышает 20 байтов, то мы знаем, что присутствуют некоторые параметры TCP, и мы можем сравнить байт со смещением 20, который является местоположением поля "kind" 1-й опции, к виду TCP, представляющему интерес, в данном случае 8, которое является опцией timestamps.

Опять же, вышеупомянутый фильтр будет работать только в том случае, если интересующий вариант TCP всегда 1-й вариант. Если параметр появляется после других параметров, он не сможет перехватить эти пакеты. Расширение этого фильтра для захвата интересующего варианта TCP независимо от его местоположения может быть возможным, но я не думаю, что это будет легко сделать.

Другие вопросы по тегам