Como capturar pacotes ack ou syn pelo Tcpdump?

45

Eu quero usar uma regra de filtro para capturar somente pacotes ack ou syn. Como faço isso?

    
por larry 31.12.2010 / 03:40

6 respostas

76

A sintaxe do filtro pcap usada para o tcpdump deve funcionar exatamente da mesma maneira no filtro de captura wireshark.

Com o tcpdump eu usaria um filtro como esse.

tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"

Confira a página de manual do tcpdump e preste muita atenção nas tcpflags.

Verifique também as seções na Wiki do Wireshark sobre filtros de captura e exibição. Infelizmente, os dois tipos de filtros usam uma sintaxe completamente diferente e nomes diferentes para a mesma coisa.

Se você quisesse um filtro de exibição em vez de um filtro de captura, provavelmente precisaria construir uma expressão combinando tcp.flags.ack e tcp.flags.syn. Eu estou muito mais familiarizado com os filtros de captura, então você terá que resolver isso por conta própria.

por 31.12.2010 / 05:42
13

Enquanto a resposta do @ Zoredache é agradável e completa, note que essa sintaxe produzirá todos os pacotes que tiverem o sinalizador TCP SYN ou TCP ACK definido, incluindo pacotes que não sejam estritamente apenas pacotes "TCP SYN" ou "TCP ACK" , porque eles também têm outros sinalizadores definidos. Isso pode ou não ser o que você (ou futuros leitores) pretendeu. Por exemplo, essa sintaxe também irá capturar pacotes TCP SYN-ACK, TCP FIN-ACK, etc. Se você quiser apenas pacotes TCP SYN ou TCP ACK (ou seja, JUST um desses sinalizadores definidos), o próprio A sintaxe do filtro de captura é:

'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'

Equivalente:

'tcp[13] == 2 or tcp[13] == 16'

Felicidades!

    
por 09.08.2012 / 02:30
9

Eu fiz um script para ver as principais "sinners". Para isso, considero apenas o pacote syn inicial (o primeiro pacote do handshake de três pacotes). Ou seja, syn = 1, ack = 0

while :; do
  date; 
  tcpdump -i eth1 -n -c 100 \
  'tcp[tcpflags] & (tcp-syn) != 0' and 
  'tcp[tcpflags] & (tcp-ack) == 0' 2> /dev/null \
  | awk '{ print $3}' \
  | sort | uniq -c | sort | tail -5;
  echo;
  sleep 1
done
    
por 25.03.2011 / 22:35
9
tcpdump 'tcp[13] = 3'

link

Avançado

Você também pode filtrar com base em partes específicas de um pacote, além de combinar várias condições em grupos. O primeiro é útil ao procurar apenas SYN s ou RST s, por exemplo, e o segundo, para um isolamento de tráfego ainda mais avançado.

UAP RSF

[Dica: Um anagrama para os sinalizadores TCP: Invasores Não-Qualificados Pester Real Security Folk]

sua nota: ...

Mostre-me todos os pacotes URGENT ( URG ) ...

tcpdump 'tcp[13] & 32 != 0'

Mostre-me todos os pacotes de RECONHECIMENTO ( ACK ) ...

tcpdump 'tcp[13] & 16 != 0'

Mostre-me todos os pacotes PUSH ( PSH ) ...

tcpdump 'tcp[13] & 8 != 0'

Mostre-me todos os pacotes RESET ( RST ) ...

tcpdump 'tcp[13] & 4 != 0'

Mostre-me todos os pacotes SYNCHRONIZE ( SYN ) ...

tcpdump 'tcp[13] & 2 != 0'

Mostre-me todos os pacotes FINISH ( FIN ) ...

tcpdump 'tcp[13] & 1 != 0'

Mostre-me todos os pacotes SYNCHRONIZE / ACKNOWLEDGE ( SYNACK ) ...

tcpdump 'tcp[13] = 18'

[ Nota: Apenas os sinalizadores PSH , RST , SYN e FIN são exibidos na saída do campo de sinalização do tcpdump. URG s e ACK s são exibidos, mas são mostrados em outro lugar na saída, e não no campo de flags]

    
por 17.05.2013 / 20:50
3

Eu mesmo queria apenas pacotes SYN, usei o seguinte comando:

tcpdump -i eth7 'tcp[13] & 2 != 0'

Isso deve funcionar para você imediatamente.

    
por 11.07.2012 / 10:31
1

deve mostrá-los sem filtros ou argumentos.

    
por 31.12.2010 / 03:50