[[:it|{{ :xeon.png?40|}}]] ===== Die Netzwerksniffer TCPDump und Wireshark ===== Für Netzwerkadministratoren sind TCPDump ((http://en.wikipedia.org/wiki/Tcpdump)) und Wireshark ((http://de.wikipedia.org/wiki/Wireshark)) unverzichtbare Analysetools. Wireshark mit grafisches Frontend nutzt unter Unixsystemen die selben Bibliotheken (zB libpcap ((http://en.wikipedia.org/wiki/Libpcap))) wie das Kommandozeilen basierte Unix Tool tcpdump und versteht daher die in der Manpage von tcpdump sehr ausführlich dokumentierten Filtermöglichkeiten. Da Paketsniffer gerade bei reger Netzwerklast so einiges an Daten anschaufeln, ist zur gezielten Fehlersuche der Einsatz von Filtern unerlässlich. Die folgende Liste stellt nur eine kleine Auswahl dar, werden aber sehr häufig verwendet: * **Filter SSH / Telnet Traffic aus**: Wenn man mit einem Server via SSH oder Telnet verbunden ist und dort einen filterlosen tcpdump anstößt, wird der eigene SSH- bzw. Telnet-Verkehr mitgeschnitten. Der folgende Filter verhindert ein Mitschneiden von SSH (Port 22) und Telnet (Port 23):\\ \\ # tcpdump not port 22 (SSH)\\ # tcpdump not port 23 (Telnet)\\ * **Zu filterndes Protokoll festlegen**: Oft kommt es vor, dass man sich bei der Analyse auf ein bestimmtes Protokoll (zB http, smtp) konzentrieren möchte.\\ \\ # tcpdump port 80 -> Zeigt nur Pakete an, die HTTP betreffen\\ # tcpdump port 25 -> Zeigt nur Pakete an, die SMTP betreffen * **Portrange festlegen**: Manchmal kann es durchaus sinnvoll sein, dass man nicht ein spezielles Protokoll analysieren muss, sondern einen ganzen Portbereich:\\ \\ # tcpdump portrange 10000-20000 -> Filtert Traffic zwischen Port 10.000 und 20.000 * **Zu filternden Host festlegen**: Wenn man festlegen möchte, dass der Traffic nur von und zu einen Rechner mitgeschnitten werden soll wird die Option host gefolgt von der Adresse des Hostes angegeben:\\ \\ # tcpdump host 192.168.1.1 * **Quelle (src) und Ziel (dst)**: tcpdump versteht nun solche Ausdrücke wie port, host etc, kann diese mit not negieren und kann zB mit dst (Destination/Ziel) oder src (Source/Quelle) noch die Richtung der Pakete filtern. Hier mal einige Variationen in Kombination mit vorangegangen Optionen:\\ \\ # tcpdump src port 80 -> Filtert alles was von Port 80 kommt\\ # tcpdump dst host 192.168.1.1 -> Filtert alles was zum angegebenen Rechner gesendet wird * **Operatoren: AND / OR**: Mit den Operatoren and und or lassen sich mehrere Ausdrücke kombinieren:\\ \\ # tcpdump src host 192.168.1.1 and src port 80 -> Filtert alles was vom angegeben Rechner (host) von Port 80 gesendet wird. * **Operatoren oder Ausdrücke gruppieren**: Da die Syntax von links nach rechts auswertet wird, kann es bei der Kombination mehrerer Operatoren notwendig sein, diese zu gruppieren. Die Operatoren and und or sind in ihrer Gewichtung gleichwertig. Das folgende Beispiel filtert alle Pakete, welche von Port 80 der Server >>www.apple.com<< oder >>www.microsoft.com<< gesendet werden. Ohne den Klammern zur Gruppierung (welche mit einem Backslash maskiert werden müssen) würden alle Pakete von Port 80 von >>www.apple.com<< und **alle** Pakete von >>www.microsoft.com<< gefiltert werden:\\ \\ tcpdump src port 80 and \(src host www.apple.com or src host www.microsoft.com\) * **Dump in Datei umleiten**: Mit tcpdump erstellte Dumps können zur späteren Analyse in Wireshark geladen werden. Die Option -w [Pfad zur Datei] leitet die Ausgabe in eine .cap Datei um:\\ \\ # tcpdump -w ~/Desktop/tdump.cap -> Speichert den Dump tdump.cap auf dem Desktop des angemeldeten Benutzers * **Paketgröße definieren**: Standardmäßig zeichnet tcpdump nur die ersten 68 Bytes jedes Pakets auf. Das repräsentiert die Header der involvierten Protokolle. Mit dem Schalter -s [Paketgröße in Byte] können Sie diesen Wert einstellen:\\ \\ # tcpdump -s 0 -> Stellt die maximale Paketgröße auf unbegrenzt\\ # tcpdump -s 1000 -> Zeichnet die ersten 1000 Byte eines Pakets auf * **Promiscuous Mode ((http://de.wikipedia.org/wiki/Promiscuous_Mode)) abstellen**: tcpdump versetzt beim Start das Interface standardmäßig in den Promiscuous Mode. Dadurch werden von der Netzwerkkarte empfangene Pakete, welche **nicht** für den Host bestimmt sind, trotzdem angenommen. Das ist sinnvoll, wenn man Störungen im Netzwerk generell analysieren möchte und einen dedizierten Sniffer Host an einem Monitor Switch Port angeschlossen hat. Analysiert man die Maschine an der man sitzt oder mit der man sich verbinden möchte, ist dies unnötig bzw. sogar kontraproduktiv. Der Schalter -p deaktiviert den Promiscuous Mode:\\ \\ # tcpdump -p * **Die Anzahl der Pakete festlegen**: Es kann uU nur notwendig sein, ein paar Pakete mitzuschneiden, zB um evtl. festzustellen woher eine bestimmte Verbindung kommt, wer von den Verbindungspartnern die Verbindung initiiert hat usw. Dafür reichen idR 5 - 10 Pakete schon aus. Die Option -c legt die Anzahl der Pakete fest:\\ \\ # tcpdump -c 10 -> Zeichnet nur die ersten 10 Pakete jeder Verbindung auf. * **Namensauflösung unterbinden:** Standardmäßig versucht tcpdump die IP Adressen und Portnamen im Dump auszugeben. Um dies zu verhindern, verwenden Sie den Schalter >>-n. Das kann vor allem dann hilfreich sein, wenn man die Namensauflösung selbst debuggen möchte. Der folgende Befehl protokolliert den gesamten Traffic zwischen einem **DNS Server** und dem lokalen Client und löst dabei die IP Adressen und Portnamen nicht auf:<<\\ \\ # tcpdump -n udp port 53 \\ --- //pronto 2010/03/24 17:22//