Frage Wie ack oder syn Pakete mit Tcpdump erfassen?


Ich möchte eine Filterregel verwenden, um nur ack- oder syn-Pakete zu erfassen. Wie mache ich das?


45
2017-12-31 02:40


Ursprung


Persönlich würde ich das nicht tun. Ich würde alle Pakete erfassen und dann später auf SYN- und ACK-Flags filtern. Wenn Sie mit TCP arbeiten, möchten Sie fast immer eine ganze Konversation sehen, nicht nur einen Handshake oder ACK. Wenn Sie nicht an der tatsächlichen Datennutzlast interessiert sind, können Sie die Paketgröße mit begrenzen tcpdump -s SIZE. Der TCP-Header kann eine variable Länge haben, also erfassen -s 128 wird wahrscheinlich alle möglichen Header und vielleicht ein bisschen Daten bekommen. - suprjami
Vielleicht behandeln Sie TCP nicht. Vielleicht möchten Sie sehen, wie gesprächig ein Programm ist, und Sie möchten seine ausgehenden Verbindungen zählen. Wie ich jetzt. - Dan Pritts


Antworten:


Das PCAP-Filtersyntax verwendet für tcpdump sollte genau so funktionieren auf wireshark capture filter.

Mit tcpdump würde ich einen Filter wie diesen verwenden.

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

Besuche die tcpdump man Seiteund achte genau auf die tcpflags.

Sehen Sie sich auch die Abschnitte im Wireshark Wiki an, in denen es um Capture- und Display-Filter geht. Leider verwenden die beiden Filtertypen eine völlig andere Syntax und unterschiedliche Namen für die gleiche Sache.

Wenn Sie einen Anzeigefilter anstelle des Erfassungsfilters verwenden möchten, müssten Sie wahrscheinlich einen Ausdruck erstellen, der tcp.flags.ack und tcp.flags.syn kombiniert. Ich bin jedoch mit Capture-Filtern viel vertrauter, also müssen Sie das selbst erarbeiten.


75
2017-12-31 04:42



Ich mag deine Antwort besser. Es sieht so aus, als hättest du dich angestrengt. Upvote für dich. - Ablue
Dies ist eine gute Antwort mit guten Referenzen, aber bitte beachten Sie, dass diese Syntax alle Pakete erfasst, bei denen die SYN- oder ACK-Flags gesetzt sind, auch wenn andere Flags gesetzt sind. Dies kann oder kann nicht das sein, was das OP beabsichtigt. Bitte beachten Sie meine Antwort unten für einen strengeren Filter, wenn nur TCP SYN oder ACK Pakete gewünscht werden. Prost. - JJC


Obwohl die Antwort von @ Zoredache schön und vollständig ist, beachten Sie, dass diese Syntax alle Pakete liefert, bei denen das TCP SYN- oder das TCP ACK-Flag gesetzt ist, einschließlich Pakete, die nicht einfach reine "TCP SYN" - oder "TCP ACK" -Pakete sind ebenfalls habe andere Flags gesetzt. Dies kann oder kann nicht das sein, was Sie (oder zukünftige Leser) beabsichtigt haben. Zum Beispiel wird diese Syntax auch TCP-SYN-ACK-Pakete, TCP FIN-ACK usw. erfassen. Wenn Sie wollen nur TCP-SYN- oder TCP-ACK-Pakete (d. H. NUR eines dieser Flags gesetzt), ist die richtige Capture-Filter-Syntax:

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

Gleichwertig:

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

Prost!


13
2017-08-09 00:30





Ich habe ein Skript gemacht, um die besten "Synner" zu sehen. Dazu betrachte ich nur das erste syn-Paket (das erste Paket des Drei-Pakete-Handshakes). Das heißt, 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



Das ist ein schönes Beispiel. Sie können Ihren tcpdump Capture-Filter noch weiter vereinfachen, indem Sie "tcp [tcpflags] & (tcp-syn)! = 0" und "tcp [tcpflags] & (tcp-ack) == 0" nur mit tcp [tcpflags ersetzen ] == tcp-syn '. Das schließt automatisch Pakete mit ACK-Set aus. Prost! - JJC


tcpdump 'tcp[13] = 3'

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

Fortgeschritten

Sie können auch basierend auf bestimmten Teilen eines Pakets filtern und mehrere Bedingungen zu Gruppen kombinieren. Ersteres ist nützlich, wenn Sie nur suchen SYNs oder RSTs, und letzteres für noch mehr fortschrittliche Traffic-Isolation.

UAP RSF

[Hinweis: Ein Anagramm für die TCP-Flags: Ungelernte Angreifer belästigen echte Sicherheitsleute]

Ihr Memo: ...

Zeig mir alle URGENT (URG) Pakete ...

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

Zeig mir alle BESTÄTIGUNG (ACK) Pakete ...

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

Zeig mir alles PUSH (PSH) Pakete ...

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

Zeige mir alle RESET (RST) Pakete ...

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

Zeige mir alles SYNCHRONIZE (SYN) Pakete ...

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

Zeig mir alles ZIEL (FIN) Pakete ...

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

Zeige mir alle SYNCHRONIZE / BESTÄTIGUNG (SYNACK) Pakete ...

tcpdump 'tcp[13] = 18'

[Hinweis: Nur der PSH, RST, SYN, und FIN Flags werden in der Flag-Feldausgabe von tcpdump angezeigt. URGs und ACKs werden angezeigt, aber sie werden an anderer Stelle in der Ausgabe und nicht im Feld flags angezeigt]


9
2018-05-17 18:50



Plagarismus ist nicht erlaubt Stapeltausch. Bitte bearbeiten Sie diesen Beitrag, um deutlich zu machen, dass Sie den Inhalt von der verlinkten Seite kopiert haben. Vielen Dank. - Chris S


Ich wollte nur SYN-Pakete selbst erhalten, ich habe den folgenden Befehl verwendet:

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

Dies sollte für Sie sofort funktionieren.


3
2017-07-11 08:31



Dadurch werden alle Pakete mit dem SYN-Flag erfasst, einschließlich SYN, SYN-ACK usw. Wenn Sie nur SYN-Pakete wünschen, verwenden Sie stattdessen 'tcp [13] == 2'. Prost! - JJC


Es sollte sie ohne Filter oder Argumente zeigen.


1
2017-12-31 02:50



Ihre Antwort ist technisch korrekt, aber das OP sollte wahrscheinlich das Wort "nur" in seine Frage aufnehmen. ;-) Prost! - JJC