Je souhaite utiliser une règle de filtrage pour ne capturer que les paquets ACK ou SYN. Comment puis-je faire cela?
Je souhaite utiliser une règle de filtrage pour ne capturer que les paquets ACK ou SYN. Comment puis-je faire cela?
Réponses:
La syntaxe de filtre pcap utilisée pour tcpdump devrait fonctionner exactement de la même manière sur le filtre de capture de Wirehark.
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.
Veillez également à 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 voulez un filtre d'affichage au lieu d'un filtre de capture, vous devrez probablement créer une expression combinant tcp.flags.ack et tcp.flags.syn. Cependant, je suis beaucoup plus familiarisé avec les filtres de capture, vous devrez donc le résoudre vous-même.
Bien que la réponse de @ Zoredache soit belle et complète, notez que cette syntaxe produira tous les paquets pour lesquels le drapeau TCP SYN ou TCP ACK est défini, y compris les paquets qui ne sont pas strictement des paquets «TCP SYN» ou «TCP ACK», car ils ont également d'autres drapeaux. Cela peut être ou ne pas être ce que vous (ou les futurs lecteurs) vouliez. Par exemple, cette syntaxe capture également les paquets TCP SYN-ACK, TCP FIN-ACK, etc. Si vous souhaitez uniquement des paquets TCP SYN ou TCP ACK (c'est-à-dire JUST comme l'un de ces indicateurs), la syntaxe de filtre de capture correcte est la suivante:
'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'
De manière équivalente:
'tcp[13] == 2 or tcp[13] == 16'
À votre santé!
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 des 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
tcpdump 'tcp[13] = 3'
http://danielmiessler.com/study/tcpdump/
Avancée
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 encore plus avancée du trafic.
UAP RSF
[Astuce: Une anagramme avec les drapeaux TCP: Des attaquants non qualifiés Pester Real Security Folk]
votre mémo: ...
Montrez-moi tous les URGpaquets URGENT ( ) ...
tcpdump 'tcp[13] & 32 != 0'
Montrez-moi tous les ACKpaquets ACKNOWLEDGE ( ) ...
tcpdump 'tcp[13] & 16 != 0'
Montrez-moi tous les PSHpaquets PUSH ( ) ...
tcpdump 'tcp[13] & 8 != 0'
Montrez-moi tous les RSTpaquets RESET ( ) ...
tcpdump 'tcp[13] & 4 != 0'
Montrez-moi tous les SYNpaquets SYNCHRONIZE ( ) ...
tcpdump 'tcp[13] & 2 != 0'
Montrez-moi tous les FINpaquets FINISH ( ) ...
tcpdump 'tcp[13] & 1 != 0'
Montrez-moi tous les SYNACKpaquets SYNCHRONIZE / ACKNOWLEDGE ( ) ...
tcpdump 'tcp[13] = 18'
[ Note: Seul le PSH, RST, SYN, et les FINdrapeaux 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 flags]
Je voulais obtenir uniquement les paquets SYN moi-même, j'ai utilisé la commande suivante:
tcpdump -i eth7 'tcp[13] & 2 != 0'
Cela devrait fonctionner pour vous tout de suite.
tcpdump -s SIZE. L'en-tête TCP peut avoir une longueur variable. La capture-s 128obtiendra donc probablement tous les en-têtes possibles et peut-être un peu de données.