Назад | Перейти на главную страницу

Как фильтровать только пакеты keep-alive с помощью tcpdump

Мне нужно проанализировать дамп трафика в моей сети, чтобы проверить, все ли ПК активировали функции tcp keep-live. Для этого я использую tcpdump.

Мне нужно знать, есть ли возможность фильтровать только пакеты keep-alive.

В Windows я вижу, что wirehark может это сделать, но в моей системе Linux, в которой есть только консольный режим, я не знал, как фильтровать такие пакеты.

Зонд поддержки активности - это пакет без данных, в котором установлен флаг ACK.

tcpdump -pni $intf -v "tcp port $port and ( tcp[tcpflags] & tcp-ack != 0 and ( (ip[2:2] - ((ip[0]&0xf)<<2) ) - ((tcp[12]&0xf0)>>2) ) == 0 ) "

что это делает:

  • побитно и между полем флагов tcp и tcp-ack, чтобы убедиться, что это ACK
  • Длина IP-пакета (в байтах) - Длина IP-заголовка - Длина заголовка TCP, чтобы убедиться, что в нем нет данных

Отказ от ответственности: на самом деле не тестировался, но должен указать вам правильное направление

Wireshark использует тот же синтаксис захвата, что и tcpdump. Оба работают из libpcap. Однако я думаю, что функция, которую вы рассматриваете в Wireshark, - это фильтр отображения, который эвристически анализирует соседние пакеты. Я думаю, лучшее, что вы можете сделать при захвате, - это искать 1-байтовые или 0-байтовые ACK в ответ на запрос keep-alive. Попробуй это;

tcpdump -vv "tcp[tcpflags] == tcp-ack and less 1"

и посмотрите, есть ли у вас трафик между ожидаемыми хостами.

RFC 1122 покрывает TCP Keep-alives и оставляет большую часть реализации на усмотрение поставщика.


Кроме того, вы можете рассмотреть возможность использования tcpdump на вашем хосте Linux для захвата в файл, а затем передачи захвата на вашу рабочую станцию ​​для анализа.