Vraag Hoe vang of syn-pakketten vangen door Tcpdump?


Ik wil een filterregel gebruiken om alleen ack- of syn-pakketten vast te leggen. Hoe doe ik dit?


45
2017-12-31 02:40


oorsprong


Persoonlijk zou ik dit niet doen. Ik zou alle pakketten vastleggen en daarna op SYN- en ACK-vlaggen filteren. Als u problemen met TCP probeert op te lossen, wilt u bijna altijd een volledig gesprek zien, niet alleen een handshake of ACK. Als u niet geïnteresseerd bent in de werkelijke datadatload, kunt u de pakketgrootte beperken met tcpdump -s SIZE. De TCP-header kan een variabele lengte hebben, dus vastleggen -s 128 krijgt waarschijnlijk alle mogelijke kopteksten en misschien een klein beetje gegevens. - suprjami
Misschien probeer je TCP niet op te lossen. Misschien wilt u zien hoe spraakzaam een ​​programma is en wilt u de uitgaande verbindingen tellen. Zoals ik nu. - Dan Pritts


antwoorden:


De pcap filter syntaxis gebruikt voor tcpdump zou precies hetzelfde moeten werken op wireshark capture filter.

Met tcpdump zou ik een filter als dit gebruiken.

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

Bekijk de tcpdump man paginaen let goed op de tcpflags.

Zorg ervoor dat je ook de secties in de Wireshark Wiki bekijkt over opname- en weergavefilters. Helaas gebruiken de twee typen filters een geheel andere syntaxis en verschillende namen voor hetzelfde.

Als je een weergavefilter in plaats van een capture-filter wilt, moet je waarschijnlijk een expressie maken die tcp.flags.ack en tcp.flags.syn combineert. Ik ben echter veel meer bekend met capture-filters, dus je zult dat zelf moeten oplossen.


75
2017-12-31 04:42



Ik vind je reactie leuker. Het lijkt erop dat je moeite hebt gedaan. Ik sta voor je op. - Ablue
Dit is een geweldig antwoord met goede referenties, maar houd er rekening mee dat deze syntaxis alle pakketten vastlegt waarvoor de SYN- of ACK-vlaggen zijn ingesteld, ook als er ook andere vlaggen zijn ingesteld. Dit kan al dan niet zijn wat het OP beoogde. Zie mijn antwoord hieronder voor een strenger filter als alleen TCP SYN- of ACK-pakketten gewenst zijn. Proost. - JJC


Hoewel het antwoord van @ Zoredache goed en compleet is, merk je op dat die syntaxis alle pakketten oplevert die de TCP SYN- of TCP ACK-vlaggenset hebben, inclusief pakketten die niet striktweg "TCP SYN" of "TCP ACK" -pakketten zijn, omdat ze ook heb andere vlaggen geplaatst. Dit kan al dan niet zijn wat u (of toekomstige lezers) bedoelden. Deze syntaxis zal bijvoorbeeld ook TCP SYN-ACK-pakketten, TCP FIN-ACK, enz. Vastleggen. Als u wilt enkel en alleen TCP SYN of TCP ACK-pakketten (dat wil zeggen, JUST een van die vlaggen ingesteld), de juiste syntaxis van het capture filter is:

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

Equivalent:

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

Proost!


13
2017-08-09 00:30





Ik heb een script gemaakt om de beste "synners" te zien. Daarvoor beschouw ik alleen het initiële syn-pakket (het eerste pakket van de handdruk van de drie pakketten). Dat wil zeggen, 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
2018-03-25 21:35



Dat is een mooi voorbeeld. Je kunt je tcpdump capture filter nog verder vereenvoudigen door "'tcp [tcpflags] & (tcp-syn)! = 0' en 'tcp [tcpflags] & (tcp-ack) == 0'" te vervangen door alleen 'tcp [tcpflags ] == tcp-syn '. Dat sluit automatisch pakketten met ACK set uit. Proost! - JJC


tcpdump 'tcp[13] = 3'

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

gevorderd

U kunt ook filteren op basis van specifieke delen van een pakket en ook meerdere voorwaarden combineren in groepen. De eerste is handig als alleen naar op zoek is SYNs of RSTs, en de laatste voor nog meer geavanceerde verkeersisolatie.

UAP RSF

[Hint: een anagram voor de TCP-vlaggen: ongeschoolde aanvallers pesten echte beveiligingsmensen]

uw memo: ...

Toon mij alle DRINGEND (URG) pakketten ...

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

Toon mij allemaal ACKNOWLEDGE (ACK) pakketten ...

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

Toon mij alle PUSH (PSH) pakketten ...

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

Laat me alle RESET zien (RST) pakketten ...

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

Laat me alles zien SYNCHRONIZE (SYN) pakketten ...

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

Laat me alle FINISH zien (FIN) pakketten ...

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

Laat me alles zien SYNCHRONIZE / ACKNOWLEDGE (SYNACK) pakketten ...

tcpdump 'tcp[13] = 18'

[Notitie: Alleen de PSH, RST, SYN, en FIN vlaggen worden weergegeven in de velduitvoer van tcpdump's. URGs en ACKs worden weergegeven, maar ze worden elders in de uitvoer getoond in plaats van in het vlaggenveld]


9
2018-05-17 18:50



Plagarisme is geen toestaat Stack Exchange. Bewerk dit bericht om duidelijk te maken dat u de inhoud van de gekoppelde site hebt gekopieerd. Dank je. - Chris S


Ik wilde alleen SYN-pakketten krijgen, ik gebruikte de volgende opdracht:

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

Dit zou meteen voor u moeten werken.


3
2017-07-11 08:31



Hiermee worden alle pakketten vastgelegd met de SYN-vlagset, inclusief SYN, SYN-ACK, enzovoort. Als u alleen SYN-pakketten wilt gebruiken, gebruikt u 'tcp [13] == 2' in plaats daarvan. Proost! - JJC


het zou ze moeten tonen zonder filters of argumenten.


1
2017-12-31 02:50



Uw antwoord is technisch correct, maar het OP was waarschijnlijk bedoeld om het woord 'alleen' in zijn vraag op te nemen. ;-) proost! - JJC