so finden Sie TCP-Streams ohne endgültige ack/fin-Sequenz in einer riesigen Paketerfassungsdatei
Ich habe eine riesige PCAP-Datei, die eine große Anzahl einzelner TCP-Streams enthält.Aber von diesen gibt es einige ungültige Streams, die nicht die endgültige fin/ack-Sequenz haben. Gibt es eine Möglichkeit, nur diese Streams mit Wireshark zu finden ? Gibt es andere Tools, mit denen ich pcaps auf diese Weise durchsuchen kann?
Jede Hilfe wäre willkommen.
2 answers
Der folgende Befehl druckt jede unvollständige halbe Verbindung.
tcpdump -r pcap-file 'tcp[tcpflags] & (tcp-syn|tcp-fin) > 0' |
sed -r 's/^.*IP (.*) > (.*):.*$/\1 \2/'|sort|uniq -u
Der Ansatz geht davon aus, dass jedes Socket-Paar während des gesamten Trace nur einmal verwendet wird.
Erklärung
Für eine Verbindung zwischen
IP_A:PORT_A <--> IP_B:PORT_B
Ein tcpdump enthält die Hälften
IP_A:PORT_A > IP_B:PORT_B, and
IP_B:PORT_B > IP_A:PORT_A
Für jede Hälfte muss der Speicherauszug zwei Segmente mit einem SYN-oder FIN-Flag enthalten. Also, was der Comand tut, ist:
-
Sammle die Segmente, die das SYN oder FIN tragen flag
tcpdump -r pcap-file 'tcp[tcpflags] & (tcp-syn|tcp-fin) > 0
-
Aggregieren Sie das Ergebnis durch halbe Verbindung, unabhängig vom tatsächlichen Flag (SYN oder FIN)
2.1. Sortieren nach halber Verbindung
sed -r 's/^.*IP (.*) > (.*):.*$/\1 \2/'|sort
2.2. Zählen Sie die Segmente, die an jeder Halbverbindung beteiligt sind, und filtern Sie alle Halbverbindungen heraus, an denen zwei Segmente korrekt beteiligt sind
uniq -u
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-06-29 09:28:35
Hier ist eine andere Möglichkeit, es mit tshark
zu tun. Die Idee ist die gleiche wie die Antwort von @artistoex - der Unterschied besteht darin, dass nicht jede halbe Verbindung für sich betrachtet wird und die Ausgabe eine TCP-Stream-Nummer (von Wireshark/Tshark) ist, mit der Sie möglicherweise einfacher arbeiten können, wenn Sie diesen Stream in Wireshark öffnen und dort weiterverarbeiten möchten.
tshark -r pcap_file.pcap -R "tcp.flags & 0x03" -Tfields -etcp.stream |
sort -n | uniq -c | awk -F ' ' '{ if ($1<4) print $1," ", $2 }'
Der Anzeigefilter macht dasselbe wie der Erfassungsfilter aus der anderen Antwort, er verwendet die Tatsache, dass die SYN-und FIN-Bits sind zwei der am wenigsten signifikanten Bits im TCP-Flags-Feld, also wenn beide gesetzt sind, wäre das 0b11
oder 0x3
. UND-ing das tcp.flags
- Feld mit 0x3
geben würde, die nicht-null-Werte, wenn entweder-flag gesetzt ist.
tshark
gibt hier die TCP-Stream-Nummer für jedes Paket aus. Wir sortieren sie und zählen die eindeutigen Zahlen. Der letzte Schritt druckt nur die Zeilen, in denen die Anzahl der Pakete für diesen Stream kleiner als 4 ist (1 SYN und 1 FIN für jede halbe Richtung).
Dann können Sie Wireshark öffnen mit
wireshark -r pcap-file -R "tcp.stream eq 1234"
Wobei 1234 vom vorherigen Befehl stammt.
Hübsch? Ich schätze nicht. Schnell? Nein...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-02-13 14:17:34