Michael Krzyzanski

IT und andere Skurrilitäten

Extrahieren von Informationen aus Netzwerkmitschnitten

In den letzten Tagen stand ich vor dem Problem, dass bei einem Kunden mehrere Netzwerkmessungen durchgeführt wurden. Das Problem war, dass eine Liste mit den IP Adressen, der Kommunikationspartner erstellt werden sollte. Wer schon mal mit Wireshark und Co. gearbeitet hat, der weiß, dass man sich viele Sachen recht schnell und praktisch anzeigen lassen kann, nur, dass der Export nicht sonderlich gut funktioniert. Man kann aber die mitgeschnittenen Dateien mit dem Kommando tcpdump auswerten.
Hier also die Lösung die ich ausfindig machen konnte.
tcpdump -ntr Messung1.pcapng | awk '{print $2}' | tr . ' ' | awk '{print $1"."$2"."$3"."$4}' | sort | uniq -c | awk ' {print $2 "\t" $1 }'
Das Kommando erstellt eine Liste mit den innerhalb der Kommunikation vorkommenden Adressen und zeigt ebenfalls die Anzahl der Verbindungen mit der entsprechenden Adresse an.
Im Detail:
Ausgabe
tcpdump -ntr Messung1.pcapng
Der Befehl tcpdump kann dazu verwendet werden Netzwerkkommunikation mitzuschneiden und ebenfalls die mitgeschnittenen Informationen im Nachhinein auszuwerten. Die Option n sorgt dafür, dass tcpdump nicht versucht die Namen der IP Adressen aufzulösen. Das ist vor allem dann wichtig, wenn man die Dateien in seiner eigenen Umgebung auswertet und die IP-Bereiche stimmen vielleicht mit denen der Messumgebung überein. Die Option t verhindert, dass die Zeitstempel angezeigt werden. Letzten Endes, sorgt die Option r dafür, dass man die Datei angibt, welche den Netzwerkmitschnitt enthält.
IP 172.101.46.106.137 > 172.101.47.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
Kürzen
awk '{print $2}'
der Wortprozessor awk verarbeitet die Ausgabe von tcpdump und zeigt nur die zweite Zeile der ausgegebenen Daten an.
172.101.46.96.61606
802.1w,
172.101.46.96.56244
172.101.46.96.50630
172.101.46.96.137
802.1w,
172.101.46.96.50630
172.101.46.96.56244
172.101.46.106.137
Request
172.101.46.96.137
Ersetzen
tr .' '
Das Werkzeug tr ersetzt bei einer Ausgabe den ersten mit dem zweiten String. In diesem Fall werden die Punkte durch Leerstellen ersetzt, damit der nachfolgende awk Befehl wiederum die einzelnen Octets unterscheiden kann.
IP Ausgeben
awk '{print $1"."$2"."$3"."$4}'
Der Wortprozessor wird nun dazu verwendet die einzelnen Octets der IP Adresse in der passenden Reihenfolge und mit Punkten getrennt auszugeben.
172.101.46.96
802.1w,..
172.101.46.96
172.101.46.96
172.101.46.96
802.1w,..
172.101.46.96
172.101.46.96
172.101.46.106
Request...
172.101.46.96
Sortieren
sort
Die Ausgabe wird nun mit sort in eine Reihenfolge gebracht, somit stehen IP-Adressen welche mehrfach vorkommen direkt untereinander.
172.4.31.55
172.4.31.55
172.4.31.55
172.4.31.55
802.1w,..
802.1w,..
802.1w,..
802.1w,..
Trimmen
uniq -c
Das Kommando uniq sorgt nun dafür, dass alle mehrfach vorkommenden Einträge entfernt werden. Die Option c zählt jedoch auf wie oft der entsprechende Eintrag vorhanden war.
26 172.101.46.88
109 172.101.46.96
18 172.101.47.254
12 172.4.31.254
22 172.4.31.55
232 802.1w,..
20 PACKET:...
5 Packet:...
8 Reply...
91 Request...
Ich selbst empfehle aber bei der weiteren Verarbeitung auf die Option c zu verzichten, da man ja nur eine IP-Adresse erhalten möchte, jedoch ist es ja vielleicht für einige Interessant einzelne Informationen zu erhalten, wie oft eine bestimmte IP während der Kommunikation angesprochen wurde.
Spalten vertauschen
awk ' {print $2 "\t" $1 }'
Als letztes starten wir nochmals awk und vertauschen die Spalten, wodurch die IP Adresse vorne und die Anzahl des Vorkommens hinten angezeigt wird.
172.101.46.88 26
172.101.46.96 109
172.101.47.254 18
172.4.31.254 12
172.4.31.55 22
802.1w,.. 232
PACKET:... 20
Packet:... 5
Reply... 8
Request... 91
Wie man natürlich sieht, gibt es noch Beifang in der Ausgabe. Wer sich jetzt nur für IPv4 interessiert kann ja eine weitere | anhängen und es mit dem folgenden probieren:
grep ^[0-3]
Der komplette Befehl, den ich am Ende verwendet habe war dann:
tcpdump -ntr Messung1.pcapng | awk '{print $2}' | tr . ' ' | awk '{print $1"."$2"."$3"."$4}' | sort | uniq | grep ^[0-3] > IP-Adressen.txt
Comments


May 2015
Oct 2014
Jan 2013
Oct 2012
Jan 2012
Aug 2011
Jul 2011
Mar 2011
Feb 2011
Nov 2010
Sep 2010
Aug 2010
Jul 2010
Jun 2010