Como filtrar apenas o pacote keep-alive com o tcpdump

5

Eu preciso analisar um despejo de tráfego na minha rede para verificar se todos os PCs ativaram os recursos tcp keep-live. Estou usando o tcpdump para esse propósito.

O que preciso saber é se existe a possibilidade de filtrar apenas os pacotes de manutenção.

No windows eu vejo que o wireshark pode fazer isso, mas no meu sistema linux, que tem apenas o modo console, eu não sabia como filtrar esse tipo de pacote.

    
por enzo2 08.11.2012 / 16:39

2 respostas

6

Um probe keepalive é um pacote sem dados e o sinalizador ACK ativado

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 ) "

o que isso faz:

  • bit-wise e entre tcp flags field e tcp-ack para se certificar de que é um ACK
  • O comprimento do pacote IP (em bytes) - O comprimento do cabeçalho IP - O Comprimento do Cabeçalho TCP para garantir que não haja dados

Aviso: na verdade, não foi testado, mas deve apontar você em uma boa direção

    
por 13.11.2012 / 01:39
2

O Wireshark usa a mesma sintaxe de captura que o tcpdump. Ambos funcionam na libpcap. No entanto, acho que o recurso que você está vendo no Wireshark é um filtro de exibição que analisa heuristicamente os pacotes vizinhos. Acho que o melhor que você pode fazer na captura é procurar por ACKs de 1 byte ou 0 byte em resposta a uma solicitação de manutenção. Tente isto:

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

e veja se você recebe tráfego entre os hosts esperados.

A RFC 1122 cobre o TCP Keep-alives e deixa grande parte da implementação até o fornecedor .

Além disso, você pode considerar usar tcpdump em seu host Linux para capturar em um arquivo e depois transferir a captura para sua estação de trabalho para análise.

    
por 13.11.2012 / 01:25