72 votes

Comment capturer les paquets ack ou syn par Tcpdump ?

Je veux utiliser une règle de filtrage pour capturer uniquement les paquets ack ou syn. Comment dois-je m'y prendre ?

0 votes

Personnellement, je ne le ferais pas. Je capturerais tous les paquets, puis je filtrerais sur les drapeaux SYN et ACK plus tard. Si vous dépannez TCP, vous voulez presque toujours voir une conversation complète, pas seulement un handshake ou un ACK. Si vous n'êtes pas intéressé par la charge utile des données, vous pouvez limiter la taille des paquets à l'aide de la fonction tcpdump -s SIZE . L'en-tête TCP peut être d'une longueur variable, de sorte que capturer -s 128 obtiendra probablement tous les en-têtes possibles et peut-être un peu de données.

4 votes

Peut-être que vous ne dépannez pas le TCP. Peut-être que vous voulez voir à quel point un programme est bavard, et que vous voulez compter ses connexions sortantes. Comme moi, maintenant.

0 votes

Dans mon cas, j'avais besoin de compter les occurrences de retransmissions SYN dues à l'épuisement de la socket TIME_WAIT. Je n'avais besoin que des paquets SYN. Un cas d'utilisation légitime pour le PO, je dirais.

111voto

jammus Points 1796

En syntaxe du filtre pcap utilisé pour tcpdump devrait fonctionner exactement de la même manière sur le filtre de capture de wireshark.

Avec tcpdump, j'utiliserais un filtre comme celui-ci.

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

Consultez le page de manuel de tcpdump et faites bien attention aux tcpflags.

N'oubliez pas de consulter les sections du Wiki Wireshark sur les filtres de capture et d'affichage. Malheureusement, les deux types de filtres utilisent une syntaxe complètement différente, et des noms différents pour la même chose.

Si vous vouliez un filtre d'affichage au lieu d'un filtre de capture, vous devriez probablement construire une expression combinant tcp.flags.ack, et tcp.flags.syn. Je suis beaucoup plus familier avec les filtres de capture, donc vous devrez vous débrouiller tout seul.

1 votes

Je préfère votre réponse. On dirait que vous avez fait un effort. Un vote positif pour vous.

5 votes

Il s'agit d'une excellente réponse avec de bonnes références, mais veuillez noter que cette syntaxe capturera tous les paquets qui ont les drapeaux SYN ou ACK définis, même si d'autres drapeaux sont également définis. Cela peut être ou ne pas être ce que le PO voulait. Veuillez consulter ma réponse ci-dessous pour un filtre plus strict si seuls les paquets TCP SYN ou ACK sont souhaités. Merci.

29voto

JJC Points 617

Bien que la réponse de @Zoredache soit belle et complète, notez que cette syntaxe produira tous les paquets qui ont le drapeau TCP SYN ou TCP ACK activé, y compris les paquets qui ne sont pas strictement des paquets "TCP SYN" ou "TCP ACK", parce qu'ils également ont d'autres drapeaux activés. Cela peut être ou ne pas être ce que vous (ou les futurs lecteurs) vouliez. Par exemple, cette syntaxe capturera également les paquets TCP SYN-ACK, TCP FIN-ACK, etc. Si vous voulez uniquement TCP SYN ou TCP ACK (c'est-à-dire JUSTE l'un de ces drapeaux activé), la syntaxe correcte du filtre de capture est la suivante :

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

De manière équivalente :

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

A la vôtre !

15voto

castet Points 131
tcpdump 'tcp[13] = 3'

http://danielmiessler.com/study/tcpdump/

Avancé

Vous pouvez également filtrer sur la base de portions spécifiques d'un paquet, ainsi que combiner plusieurs conditions en groupes. La première option est utile lorsque vous recherchez uniquement SYN ou RST par exemple, et le dernier pour une isolation encore plus poussée du trafic.

UAP RSF

[ Indice : une anagramme pour les drapeaux TCP : Unskilled Attackers Pester Real Security Folk]

votre mémo : ...

Montrez-moi tous les URGENT ( URG ) paquets...

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

Montrez-moi tous les ACKNOWLEDGE ( ACK ) paquets...

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

Montrez-moi tous les PUSH ( PSH ) paquets...

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

Montrez-moi tous les RESET ( RST ) paquets...

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

Montrez-moi tous les SYNCHRONIZE ( SYN ) paquets...

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

Montrez-moi tous les FINISH ( FIN ) paquets...

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

Montrez-moi tout SYNCHRONISATION/ACKNOWLEDGE ( SYNACK ) paquets...

tcpdump 'tcp[13] = 18'

[ Nota: Seul le PSH , RST , SYN y FIN sont affichés dans le champ de sortie des drapeaux de tcpdump. URG et ACK sont affichés, mais ils sont affichés ailleurs dans la sortie plutôt que dans le champ flags ].

2 votes

Le plagiat n'est pas autorisé Stack Exchange . Veuillez modifier ce message pour indiquer clairement que vous avez copié le contenu du site lié. Merci.

9voto

edward Points 91

J'ai fait un script pour voir le top des "synners". Pour cela, je ne considère que le paquet syn initial (le premier paquet du handshake à trois paquets). C'est à dire, 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

5 votes

C'est un bel exemple. Vous pouvez simplifier encore plus votre filtre de capture tcpdump en remplaçant "'tcp[tcpflags] & (tcp-syn) != 0' et 'tcp[tcpflags] & (tcp-ack) == 0'" par simplement 'tcp[tcpflags] == tcp-syn'. Cela exclura automatiquement les paquets avec ACK activé. A la vôtre !

4voto

Qudus Points 129

Je voulais moi-même obtenir uniquement les paquets SYN, j'ai utilisé la commande suivante :

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

Cela devrait fonctionner pour vous immédiatement.

3 votes

Ceci capturera tous les paquets avec l'indicateur SYN activé, y compris SYN, SYN-ACK, etc. Si vous ne voulez que les paquets SYN, utilisez plutôt 'tcp[13] == 2'. A la vôtre !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X