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 SYN
s ou RST
s, 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 URG
paquets URGENT ( ) ...
tcpdump 'tcp[13] & 32 != 0'
Montrez-moi tous les ACK
paquets ACKNOWLEDGE ( ) ...
tcpdump 'tcp[13] & 16 != 0'
Montrez-moi tous les PSH
paquets PUSH ( ) ...
tcpdump 'tcp[13] & 8 != 0'
Montrez-moi tous les RST
paquets RESET ( ) ...
tcpdump 'tcp[13] & 4 != 0'
Montrez-moi tous les SYN
paquets SYNCHRONIZE ( ) ...
tcpdump 'tcp[13] & 2 != 0'
Montrez-moi tous les FIN
paquets FINISH ( ) ...
tcpdump 'tcp[13] & 1 != 0'
Montrez-moi tous les SYNACK
paquets SYNCHRONIZE / ACKNOWLEDGE ( ) ...
tcpdump 'tcp[13] = 18'
[ Note: Seul le PSH
, RST
, SYN
, et les FIN
drapeaux sont affichés dans la sortie du champ de drapeau de tcpdump. URG
s et ACK
s 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 128
obtiendra donc probablement tous les en-têtes possibles et peut-être un peu de données.