Мне нужно проанализировать дамп трафика в моей сети, чтобы проверить, все ли ПК активировали функции 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 ) "
что это делает:
Отказ от ответственности: на самом деле не тестировался, но должен указать вам правильное направление
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 для захвата в файл, а затем передачи захвата на вашу рабочую станцию для анализа.