web-dev-qa-db-fra.com

Comment capturer des paquets ack ou syn par Tcpdump?

Je souhaite utiliser une règle de filtrage pour capturer uniquement les paquets ACK ou SYN. Comment puis-je faire cela?

53
larry

La syntaxe du filtre PCAP utilisée pour tcpdump devrait fonctionner exactement de la même manière sur le filtre de capture Wireshark.

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

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

Consultez la page de manuel tcpdump , et portez une attention particulière aux tcpflags.

Assurez-vous également 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 auriez probablement besoin de créer une expression combinant tcp.flags.ack et tcp.flags.syn. Cependant, je suis beaucoup plus familier avec les filtres de capture, vous devrez donc le faire vous-même.

86
Zoredache

Bien que la réponse de @ Zoredache soit agréable et complète, notez que cette syntaxe produira tous les paquets qui ont le TCP SYN ou le TCP drapeau ACK défini, y compris les paquets qui ne sont pas strictement des paquets "TCP SYN" ou "TCP ACK", car ils aussi ont d'autres indicateurs définis. Cela peut ou non être ce que vous (ou les futurs lecteurs) vouliez. Par exemple, que la syntaxe capturera également TCP paquets SYN-ACK, TCP FIN-ACK, etc. si vous voulez niquement TCP SYN ou TCP ACK (c'est-à-dire JUSTE un de ces drapeaux)), la syntaxe de filtre de capture appropriée est:

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

De manière équivalente:

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

À votre santé!

16
JJC
tcpdump 'tcp[13] = 3'

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

Avancé

Vous pouvez également filtrer en fonction de parties spécifiques d'un paquet, ainsi que combiner plusieurs conditions en groupes. Le premier est utile lorsque vous recherchez uniquement SYNs ou RSTs, par exemple, et le second pour une isolation du trafic encore plus avancée.

UAP RSF

[Astuce: Une anagramme pour les drapeaux TCP: Attackers non qualifiés Pester Real Security Folk]

votre mémo: ...

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

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

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

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

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

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

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

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

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

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

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

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

Montrez-moi tous les paquets SYNCHRONIZE/ACKNOWLEDGE (SYNACK) ...

tcpdump 'tcp[13] = 18'

[ Remarque: Seuls les PSH, RST, SYN et FIN les drapeaux sont affichés dans la sortie du champ de drapeau de tcpdump. URGs et ACKs sont affichés, mais ils sont affichés ailleurs dans la sortie plutôt que dans le champ des drapeaux]

12
castet

J'ai fait un script pour voir les meilleurs "synners". Pour cela, je ne considère que le paquet syn initial (le premier paquet de la poignée de main à trois paquets). Autrement dit, 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
9
edward

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

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

Cela devrait fonctionner pour vous immédiatement.

4
Sidharth

il doit les afficher sans aucun filtre ni argument.

1
Ablue