Voglio usare una regola di filtro per acquisire solo pacchetti ack o syn. Come faccio a fare questo?
Voglio usare una regola di filtro per acquisire solo pacchetti ack o syn. Come faccio a fare questo?
Risposte:
La sintassi del filtro pcap utilizzata per tcpdump dovrebbe funzionare esattamente allo stesso modo sul filtro di acquisizione di WireShark.
Con tcpdump userei un filtro come questo.
tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"
Dai un'occhiata alla pagina man di tcpdump e presta molta attenzione alle tcpflags.
Assicurati di controllare anche le sezioni nel Wiki di Wireshark sui filtri di acquisizione e visualizzazione. Sfortunatamente i due tipi di filtri usano una sintassi completamente diversa e nomi diversi per la stessa cosa.
Se si desidera un filtro di visualizzazione anziché il filtro di acquisizione, è probabilmente necessario creare un'espressione che combini tcp.flags.ack e tcp.flags.syn. Conosco molto meglio i filtri di acquisizione, quindi dovrai risolverlo da solo.
Mentre la risposta di @ Zoredache è piacevole e completa, nota che quella sintassi produrrà tutti i pacchetti che hanno il flag TCP SYN o TCP ACK impostato, compresi i pacchetti che non sono rigorosamente solo pacchetti "TCP SYN" o "TCP ACK", perché hanno anche impostato altri flag. Questo potrebbe essere o meno ciò che tu (o i tuoi futuri lettori) intendevi. Ad esempio, quella sintassi acquisirà anche pacchetti TCP SYN-ACK, TCP FIN-ACK, ecc. Se si desidera solo pacchetti TCP SYN o TCP ACK (ovvero SOLO uno di questi flag impostati), la sintassi del filtro di acquisizione corretta è:
'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'
Equivalentemente:
'tcp[13] == 2 or tcp[13] == 16'
Saluti!
Ho realizzato una sceneggiatura per vedere i migliori "sincronizzatori". Per questo, considero solo il pacchetto syn iniziale (il primo pacchetto della stretta di mano dei tre pacchetti). Cioè, 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/
Avanzate
Puoi anche filtrare in base a parti specifiche di un pacchetto, nonché combinare più condizioni in gruppi. Il primo è utile quando si cercano solo SYN
S RST
, ad esempio, e il secondo per un isolamento del traffico ancora più avanzato.
UAP RSF
[Suggerimento: un anagramma per le bandiere TCP: Unskilled Attackers Pester Real Security Folk]
il tuo promemoria: ...
Mostrami tutti i URG
pacchetti URGENT ( ) ...
tcpdump 'tcp[13] & 32 != 0'
Mostrami tutti i ACK
pacchetti ACKNOWLEDGE ( ) ...
tcpdump 'tcp[13] & 16 != 0'
Mostrami tutti i PSH
pacchetti PUSH ( ) ...
tcpdump 'tcp[13] & 8 != 0'
Mostrami tutti i RST
pacchetti RESET ( ) ...
tcpdump 'tcp[13] & 4 != 0'
Mostrami tutti i SYN
pacchetti SYNCHRONIZE ( ) ...
tcpdump 'tcp[13] & 2 != 0'
Mostrami tutti i FIN
pacchetti FINISH ( ) ...
tcpdump 'tcp[13] & 1 != 0'
Mostrami tutti i SYNACK
pacchetti SYNCHRONIZE / ACKNOWLEDGE ( ) ...
tcpdump 'tcp[13] = 18'
[ Nota: Solo il PSH
, RST
, SYN
, e FIN
le bandiere vengono visualizzati in uscita campo flag di tcpdump. URG
s e ACK
s vengono visualizzati, ma sono mostrati altrove nell'output anziché nel campo flag]
Volevo ottenere solo pacchetti SYN, ho usato il seguente comando:
tcpdump -i eth7 'tcp[13] & 2 != 0'
Questo dovrebbe funzionare subito per te.
tcpdump -s SIZE
. L'intestazione TCP può avere una lunghezza variabile, quindi l'acquisizione-s 128
probabilmente otterrà tutte le possibili intestazioni e forse un po 'di dati.