Skip to main content

Tcpdump: Beispiele, Optionen und mehr

HakTip - How to Capture Packets with Wireshark - Getting Started (April 2024)

HakTip - How to Capture Packets with Wireshark - Getting Started (April 2024)
Anonim

Tcpdump ist ein Befehl, der auf verschiedenen Linux-Betriebssystemen (Betriebssystemen) zum Sammeln von TCP / IP-Paketen verwendet wird, die einen Netzwerkadapter durchlaufen. Ähnlich wie ein Paket-Sniffer-Tool kann tcpdump den Netzwerkverkehr nicht nur analysieren, sondern auch in einer Datei speichern.

Im Gegensatz zu einigen Befehlen, die standardmäßig vom Betriebssystem bereitgestellt werden, stellen Sie möglicherweise fest, dass Sie tcpdump nicht verwenden können, da es nicht installiert ist. Um tcpdump zu installieren, führen Sie es aus apt-get install tcpdump oder yum install tcpdumpabhängig von Ihrem Betriebssystem.

Wie funktioniert Tcpdump?

Tcpdump gibt die Header von Paketen auf einer Netzwerkschnittstelle aus, die mit dem Boolean übereinstimmen Ausdruck . Es kann auch mit ausgeführt werden-w Flag, wodurch die Paketdaten für eine spätere Analyse und / oder mit der Datei in einer Datei gespeichert werden-r flag, wodurch es aus einer gespeicherten Paketdatei liest, anstatt Pakete von einer Netzwerkschnittstelle zu lesen. In allen Fällen nur Pakete, die übereinstimmen Ausdruck wird bearbeitet von tcpdump .

Tcpdump wird, wenn nicht mit laufen-c Flag, fahren Sie mit dem Aufnehmen von Paketen fort, bis es durch ein SIGINT-Signal unterbrochen wird (das normalerweise durch Eingabe Ihres Interrupt-Zeichens generiert wird) Strg + C) oder ein SIGTERM-Signal (normalerweise mit dertöten(1) Befehl); wenn mit laufen-c kennzeichnen, werden Pakete erfasst, bis sie durch ein SIGINT- oder SIGTERM-Signal unterbrochen werden oder die angegebene Anzahl von Paketen verarbeitet wurde.

Die oben genannten Schalter werden später in diesem Artikel ausführlich erläutert.

Wann tcpdump beendet das Aufzeichnen von Paketen, es werden Zählungen von gemeldet:

  • Pakete "vom Filter empfangen".
    • Die Bedeutung davon hängt von dem Betriebssystem ab, auf dem Sie ausgeführt werden tcpdump und möglicherweise auf die Art und Weise, wie das Betriebssystem konfiguriert wurde. Wenn in der Befehlszeile ein Filter angegeben wurde, zählt er bei einigen Betriebssystemen Pakete unabhängig davon, ob sie mit dem Filterausdruck übereinstimmen, und bei anderen zählt sie nur Pakete, die mit dem Filterausdruck übereinstimmen und von denen verarbeitet wurden tcpdump.
  • Pakete "vom Kernel abgelegt".
    • Dies ist die Anzahl der Pakete, die aufgrund fehlenden Pufferplatzes vom Paketaufnahmemechanismus im Betriebssystem verworfen wurden tcpdump läuft, wenn das Betriebssystem diese Informationen an Anwendungen meldet. Wenn nicht, wird es als 0 gemeldet.

Auf Plattformen, die das SIGINFO-Signal unterstützen, wie z. B. die meisten BSDs (Berkeley Software Distributions), werden diese Zählungen gemeldet, wenn ein SIGINFO-Signal empfangen wird (das normalerweise durch Eingabe Ihres "status" - Zeichens generiert wird) Strg + T) und sammelt weiterhin Pakete.

Tcpdump-Kompatibilität

Das Lesen von Paketen von einer Netzwerkschnittstelle mit dem Befehl tcpdump erfordert möglicherweise besondere Berechtigungen ( lesen Eine gespeicherte Paketdatei erfordert keine solchen Berechtigungen):

  • SunOS 3.x oder 4.x mit NIT oder BPF: Sie müssen über Lesezugriff verfügen / dev / nit oder dev / bpf * .
  • Solaris mit DLPI: Sie müssen über Lese- / Schreibzugriff auf das Netzwerk-Pseudogerät verfügen, z / dev / le . Bei einigen Versionen von Solaris reicht dies jedoch nicht aus tcpdump im Promiscuous-Modus festhalten; In diesen Versionen von Solaris müssen Sie root sein oder tcpdump muss setuid auf root installiert sein, um im Promiscuous-Modus zu erfassen. Beachten Sie, dass bei vielen (möglicherweise allen) Schnittstellen, wenn Sie nicht im Promiscuous-Modus erfassen, keine abgehenden Pakete angezeigt werden. Daher ist eine Erfassung, die nicht im Promiscuous-Modus durchgeführt wird, möglicherweise nicht sehr nützlich.
  • HP-UX mit DLPI: Sie müssen root sein oder tcpdump setuid muss auf root installiert sein.
  • IRIX mit Schnüffler: Sie müssen root sein oder tcpdump setuid muss auf root installiert sein.
  • Linux: Sie müssen root sein oder tcpdump setuid muss auf root installiert sein.
  • Ultrix und Digital UNIX / Tru64 UNIX: Jeder Benutzer kann den Netzwerkverkehr mit erfassen tcpdump . Kein Benutzer (auch nicht der Superuser) kann jedoch im Promiscuous-Modus auf einer Schnittstelle erfassen, es sei denn, der Superbenutzer hat den Promiscuous-Modus für diese Schnittstelle mit aktiviert pfconfig (8), und kein Benutzer (auch nicht der Super-User) kann Unicast-Verkehr erfassen, der von der Maschine an einer Schnittstelle empfangen oder von dieser gesendet wird, es sei denn, der Super-User hat die Operation "All-Modus" für diese Schnittstelle aktiviert pfconfig , so sinnvoll Die Paketerfassung auf einer Schnittstelle erfordert wahrscheinlich, dass entweder der Promiscuous-Modus oder der Modus "Alles kopieren" oder beide Betriebsarten für diese Schnittstelle aktiviert sind.
  • BSD: Sie müssen über Lesezugriff verfügen / dev / bpf * .

Tcpdump-Befehlssyntax

Wie alle Computerbefehle funktioniert der Befehl tcpdump nur dann richtig, wenn die Syntax korrekt ist:

tcpdump -adeflnNOpqRStuvxX -c Anzahl

-C Dateigröße -F Datei

-ich Schnittstelle -m Modul -r Datei

-s Snaplen -T Art -U Nutzer -w Datei

-E algo: geheimnis Ausdruck

Tcpdump-Befehlsoptionen

Dies sind alle Optionen, die Sie mit dem Befehl tcpdump verwenden können:

  • -ein: Versuch, Netzwerk- und Broadcast-Adressen in Namen umzuwandeln.
  • -c: Beenden Sie nach dem Empfang Anzahl Pakete.
  • -CÜberprüfen Sie vor dem Schreiben eines Rohpakets in eine Sicherungsdatei, ob die Datei derzeit größer ist als Dateigröße Schließen Sie in diesem Fall das aktuelle Savefile und öffnen Sie ein neues.Für Savefiles nach dem ersten Savefile wird der Name mit dem angegeben-w Fahne mit einer Zahl dahinter, beginnend bei 2 und weiter aufwärts. Die Einheiten von Dateigröße sind Millionen Bytes (1.000.000 Bytes, nicht 1.048.576 Bytes).
  • -d: Den kompilierten Packet-Matching-Code in einer für Menschen lesbaren Form auf die Standardausgabe ausgeben und anhalten.
  • -dd: Dump-Packet-Matching-Code alsC Programmfragment.
  • -ddd: Dump-Packet-Matching-Code als Dezimalzahl (mit einer Zählung).
  • -e: Drucken Sie den Link-Header auf jeder Dump-Zeile.
  • -E: Benutzen algo: geheimnis zum Entschlüsseln von IPsec-ESP-Paketen. Algorithmen können seindes-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc, oderkeiner. Der Standardwert istdes-cbc. Die Möglichkeit, Pakete zu entschlüsseln, ist nur vorhanden, wenn tcpdump wurde mit aktivierter Kryptographie kompiliert. Geheimnis der ASCII-Text für den ESP-Geheimschlüssel. Wir können momentan keinen beliebigen binären Wert annehmen. Die Option setzt RFC2406 ESP, nicht RFC1827 ESP voraus. Die Option dient nur zu Debugging-Zwecken, und die Verwendung dieser Option mit einem wirklich "geheimen" Schlüssel wird nicht empfohlen. Indem Sie den geheimen IPSec-Schlüssel auf der Befehlszeile anzeigen, machen Sie ihn für andere sichtbar ps (1) und andere Gelegenheiten.
  • -f: Drucken Sie "fremde" Internetadressen numerisch und nicht symbolisch (diese Option soll schwere Gehirnschäden in Suns yp-Server vermeiden - normalerweise hängt es für immer mit der Übersetzung nichtlokaler Internetnummern).
  • -F: Benutzen Datei als Eingabe für den Filterausdruck. Ein zusätzlicher Ausdruck in der Befehlszeile wird ignoriert.
  • -ich: Hör zu Schnittstelle . Wenn nicht angegeben, tcpdump Durchsucht die Systemschnittstellenliste nach der niedrigsten nummerierten, konfigurierten Schnittstelle (außer Loopback). Krawatten werden durch Auswahl des frühesten Spiels gebrochen. Auf Linux-Systemen mit 2.2 oder neueren Kerneln Schnittstelle Das Argument "any" kann zum Erfassen von Paketen von allen Schnittstellen verwendet werden. Beachten Sie, dass Captures auf dem Gerät "any" nicht im Promiscuous-Modus ausgeführt werden.
  • -l: Stdout-Zeile gepuffert machen. Nützlich, wenn Sie die Daten während der Aufnahme sehen möchten. Zum Beispiel "tcpdump -l | tee dat" oder "tcpdump -l> dat & tail -f dat".
  • -m: Laden Sie die SMI-MIB-Moduldefinitionen aus der Datei Modul . Diese Option kann mehrfach zum Laden mehrerer MIB-Module verwendet werden tcpdump .
  • -n: Konvertieren Sie keine Hostadressen in Namen. Dies kann verwendet werden, um DNS-Lookups zu vermeiden.
  • -nn: Konvertieren Sie Protokoll- und Portnummern usw. auch nicht in Namen.
  • -N: Drucken Sie keine Domänennamenqualifizierung für Hostnamen. Wenn Sie zum Beispiel diese Flagge angeben, dann tcpdump wird "nic" anstelle von "nic.ddn.mil" 'drucken.
  • -O: Führen Sie den Packet Matching Code Optimizer nicht aus. Dies ist nur nützlich, wenn Sie einen Fehler im Optimierer vermuten.
  • -p: Nicht Setzen Sie das Interface in den Promiscuous-Modus. Beachten Sie, dass sich die Schnittstelle aus einem anderen Grund im Promiscuous-Modus befindet. '-p' kann daher nicht als Abkürzung für 'Etherhost {local-hw-addr} oder Ether-Broadcast' verwendet werden.
  • -q: Schnelle (leise) Ausgabe. Drucken Sie weniger Protokollinformationen, sodass die Ausgabezeilen kürzer sind.
  • -R: Nehmen Sie an, dass ESP / AH-Pakete auf der alten Spezifikation basieren: RFC1825 bis RFC1829. Wenn angegeben, tcpdump druckt das Wiedergabevermeidungsfeld nicht. Da es in der ESP / AH-Spezifikation kein Feld für die Protokollversion gibt, tcpdump Die Version des ESP / AH-Protokolls kann nicht abgeleitet werden.
  • -r: Pakete lesen von Datei (die mit der Option -w erstellt wurde). Standardeingabe wird verwendet, wenn Datei ist "-".
  • -S: Drucken Sie absolute und nicht relative TCP-Sequenznummern.
  • -s: Snarf Snaplen Datenbytes aus jedem Paket statt der Vorgabe von 68; Bei SunOS NIT ist das Minimum eigentlich 96. 68 Byte sind für IP, ICMP, TCP und UDP ausreichend, können aber Protokollinformationen von Nameserver und NFS-Paketen abschneiden (siehe unten). Pakete, die aufgrund eines eingeschränkten Schnappschusses abgeschnitten wurden, werden in der Ausgabe mit "| proto '', woher proto ist der Name der Protokollebene, auf der die Kürzung erfolgt ist. Beachten Sie, dass die Aufnahme größerer Snapshots sowohl den Zeitaufwand für die Verarbeitung von Paketen erhöht als auch die Paketpufferung effektiv verringert. Dies kann dazu führen, dass Pakete verloren gehen. Du solltest einschränken Snaplen auf die kleinste Nummer, die die Protokollinformationen erfasst, an denen Sie interessiert sind. Einstellung Snaplen Mit 0 wird die erforderliche Länge verwendet, um ganze Pakete abzufangen.
  • -T: Pakete erzwingen durch " Ausdruck msgstr "um das angegebene zu interpretieren Art . Derzeit bekannte Typen sindcnfp (Cisco NetFlow-Protokoll),rpc (Remote Procedure Call),rtp (Echtzeit-Anwendungsprotokoll),RTCP (Echtzeit-Anwendungssteuerungsprotokoll),snmp (Simple Network Management Protocol),Bottich (Visual Audio Tool) undwb (verteiltes White Board).
  • -t: Nicht Drucke einen Zeitstempel auf jede Dump-Zeile.
  • -tt: Drucken Sie einen unformatierten Zeitstempel in jede Dump-Zeile.
  • -U: Löscht Root-Berechtigungen und ändert die Benutzer-ID in Nutzer und Gruppen-ID zur primären Gruppe von Nutzer .
  • Hinweis: Red Hat Linux verwirft automatisch die Berechtigungen für den Benutzer "pcap", wenn nichts anderes angegeben ist.
  • -ttt: Drucken Sie ein Delta (in Mikrosekunden) zwischen der aktuellen und der vorherigen Zeile in jeder Dump-Zeile.
  • -tttt: Drucken Sie einen Zeitstempel im Standardformat, das in jeder Dump-Zeile nach dem Datum fortgesetzt wird.
  • -u: Drucken Sie nicht decodierte NFS-Handles.
  • -v: (Etwas mehr) verbose Ausgabe. Beispielsweise werden die Lebensdauer, die Identifikation, die Gesamtlänge und die Optionen in einem IP-Paket gedruckt. Ermöglicht auch zusätzliche Paketintegritätsprüfungen, beispielsweise die Überprüfung der IP- und ICMP-Header-Prüfsumme.
  • -vv: Noch ausführlichere Ausgabe. Beispielsweise werden zusätzliche Felder aus NFS-Antwortpaketen gedruckt, und SMB-Pakete werden vollständig decodiert.
  • -vvv: Noch ausführlichere Ausgabe. Zum Beispiel TelnetSBSE Optionen werden vollständig gedruckt. Mit -X Die Telnet-Optionen werden ebenfalls in Hex gedruckt.
  • -w: Schreiben Sie die rohen Pakete in Datei anstatt sie zu analysieren und auszudrucken. Sie können später mit der Option -r gedruckt werden. Standardausgabe wird verwendet, wenn Datei ist "-".
  • -x: Jedes Paket (abzüglich seines Link-Level-Headers) wird in Hex gedruckt. Das kleinere des gesamten Pakets oder Snaplen Bytes werden gedruckt. Es sei angemerkt, dass dies das gesamte Paket der Verbindungsschicht ist. Für Verbindungsschichten, die ein Pad (z. B. Ethernet) auffüllen, werden die Auffüllbytes auch gedruckt, wenn das Paket der höheren Schicht kürzer ist als das erforderliche Auffüllen.
  • -X: Wenn Sie Hex drucken, drucken Sie auch ASCII. Also wenn-x gesetzt ist, wird das Paket in Hex / ASCII gedruckt. Dies ist sehr praktisch für die Analyse neuer Protokolle. Selbst wenn-x nicht gesetzt ist, werden einige Teile einiger Pakete möglicherweise in hex / ascii gedruckt.
  • Ausdruck : Wählt aus, welche Pakete ausgegeben werden. Wenn nein Ausdruck gegeben ist, werden alle Pakete im Netz entleert. Ansonsten nur Pakete für welche Ausdruck ist 'true' wird ausgegeben. Das Ausdruck besteht aus einem oder mehreren Primitive. Primitive bestehen in der Regel aus einem Ich würde (Name oder Nummer) mit einem oder mehreren Qualifikationsmerkmalen. Es gibt drei verschiedene Qualifikationsarten:
  • Art : Qualifikatoren sagen, auf was sich der ID-Name oder die ID bezieht. Mögliche Typen sindWirt, Netz, undHafenBeispiel: 'host foo', 'net 128.3', 'port 20'. Wenn es keinen Typqualifizierer gibt,Wirt wird angenommen.
  • dir : Qualifikatoren geben eine bestimmte Transferrichtung an und / oder von an Ich würde . Mögliche Richtungen sindsrc, dst, src oder dst undsrc und dst (z. B. 'src foo', 'dst net 128.3', 'src oder dst port ftp-data'). Wenn es kein dir Qualifier gibt,src oder dst wird angenommen. Für "Null" -Link-Layer (d. H. Punkt-zu-Punkt-Protokolle wie z. B. Slip) eingehende und ausgehend Qualifizierer können verwendet werden, um eine gewünschte Richtung festzulegen.
  • proto : Qualifier beschränken die Übereinstimmung auf ein bestimmtes Protokoll. Mögliche Protos sind: Äther, fddi, tr, ip, ip6, Arp, rarp, decnet, tcp, undudp- Zum Beispiel 'Ether src foo', 'arp net 128.3', 'tcp port 21'. Wenn kein Proto-Qualifier vorhanden ist, werden alle mit dem Typ übereinstimmenden Protokolle angenommen. "Src foo" bedeutet beispielsweise "(ip oder arp oder rarp) src foo" (außer letzterer ist keine legale Syntax), "net bar" bedeutet "(ip oder arp oder rarp) net bar" und "Port 53". bedeutet '(TCP oder UDP) Port 53'.
    • 'fddi' ist eigentlich ein Alias ​​für 'Äther'; Der Parser behandelt sie identisch wie "die Datenverbindungsebene, die für die angegebene Netzwerkschnittstelle verwendet wird". FDDI-Header enthalten Ethernet-ähnliche Quell- und Zieladressen und enthalten oft Ethernet-ähnliche Pakettypen, sodass Sie diese FDDI-Felder nur filtern können Wie bei den analogen Ethernet-Feldern enthalten FDDI-Header auch andere Felder, die Sie jedoch nicht explizit in einem Filterausdruck angeben können.
    • In ähnlicher Weise ist 'tr' ein Alias ​​für 'Äther'; Die Aussagen des vorherigen Abschnitts zu FDDI-Headern gelten auch für Token Ring-Header.

Zusätzlich zu den oben genannten gibt es einige spezielle "primitive" Schlüsselwörter, die nicht dem Muster folgen:Tor, Übertragung, Weniger, größer, und Arithmetik Ausdrücke. Alle diese werden im Folgenden beschrieben.

Komplexere Filterausdrücke werden mit den Wörtern aufgebautund, oder, undnicht um Grundelemente zu kombinieren, z. B. "host foo und nicht port ftp und nicht port ftp-data". Um die Eingabe zu speichern, können identische Qualifikationslisten weggelassen werden (z. B. "TCP-Port-FTP oder FTP-Daten oder Domäne" ist genau das gleiche wie "TCP-Port-FTP oder TCP-Port-FTP-Daten oder TCP-TCP-Portdomäne").

Dies sind die Grundelemente, die mit dem Befehl tcpdump zulässig sind:

  • dst host Wirt
    • True, wenn das IPv4 / v6-Zielfeld des Pakets ist Wirt , die entweder eine Adresse oder ein Name sein kann.
  • Src-Host Wirt
    • True, wenn das IPv4 / V6-Quellfeld des Pakets ist Wirt .
  • Wirt Wirt
    • True, wenn entweder die IPv4 / V6-Quelle oder das Ziel des Pakets ist Wirt . Jedem der oben genannten Host-Ausdrücke können die Schlüsselwörter vorangestellt werden.ip, Arp, rarp, oderip6, wie in IP-Host Wirt (was äquivalent ist zu Ether Proto ip und Gastgeber Wirt).
    • Ob Wirt Ist ein Name mit mehreren IP-Adressen, wird jede Adresse auf Übereinstimmung geprüft.
  • Äther dst ehost
    • True, wenn die Ethernet-Zieladresse ist ehost . Ehost kann entweder ein Name aus / etc / ethers oder eine Zahl sein (siehe Ether (3N) für numerisches Format).
  • Ether Src ehost
    • True, wenn die Ethernet-Quelladresse ist ehost .
  • Ätherwirt ehost
    • True, wenn entweder die Ethernet-Quell- oder die Zieladresse ist ehost .
  • Tor Wirt
    • True, wenn das Paket verwendet wird Wirt als Gateway (d. h. die Ethernet-Quell- oder Zieladresse wurde Wirt aber weder die IP-Quelle noch das IP-Ziel war Wirt ).
    • Wirt muss ein Name sein und muss sowohl von den Hostnamen-zu-IP-Adressenauflösungsmechanismen (Hostnamendatei, DNS, NIS usw.) als auch von den Hostnamen-zu-Ethernet-Adressenauflösungsmechanismen der Maschine gefunden werden (/ etc / ethers usw.).
    • Ein äquivalenter Ausdruck ist Ätherwirt ehost und jetzt host Wirt , die entweder mit Namen oder Nummern für verwendet werden können host / ehost .) Diese Syntax funktioniert derzeit nicht in einer IPv6-aktivierten Konfiguration.
  • dst net Netz
    • True, wenn die IPv4 / v6-Zieladresse des Pakets eine Netzwerknummer von hat Netz . Netz kann entweder ein Name aus / etc / networks oder eine Netzwerknummer sein (siehe Netzwerke (4) für Details).
  • src net Netz
    • True, wenn die IPv4 / v6-Quelladresse des Pakets eine Netzwerknummer von hat Netz .
  • Netz Netz
    • True, wenn entweder die IPv4 / v6-Quelle oder die Zieladresse des Pakets eine Netzwerknummer von hat Netz .
  • Netz Netz Maske Netzmaske
    • True, wenn die IP-Adresse übereinstimmt Netz mit dem spezifischen Netzmaske . Kann mit qualifiziert werdensrc oderdst. Beachten Sie, dass diese Syntax für IPv6 nicht gültig ist Netz .
  • Netz Netz / len
    • True, wenn die IPv4 / V6-Adresse übereinstimmt Netz mit einer Netzmaske len Bits breit. Kann mit qualifiziert werdensrc oderdst.
  • dst port Hafen
    • True, wenn das Paket ip / tcp, ip / udp, ip6 / tcp oder ip6 / udp ist und einen Zielportwert von hat Hafen . Das Hafen kann eine Zahl oder ein Name sein, der in / etc / services verwendet wird (siehe tcp (4P) und udp (4P)). Wenn ein Name verwendet wird, werden sowohl die Portnummer als auch das Protokoll überprüft. Wenn eine Nummer oder ein mehrdeutiger Name verwendet wird, wird nur die Portnummer geprüft (z. B.dst port 513 druckt sowohl TCP / Login-Verkehr als auch udp / who-Verkehr undPort Domain druckt sowohl TCP / Domain als auch UDP / Domain-Verkehr).
  • src port Hafen
    • True, wenn das Paket einen Quellportwert von hat Hafen .
  • Hafen Hafen
    • True, wenn entweder der Quell- oder Zielport des Pakets ist Hafen . Jedem der oben genannten Port-Ausdrücke können die Schlüsselwörter vorangestellt werden.tcp oderudp, wie in TCP-Src-Port Hafen , das entspricht nur TCP-Paketen, deren Quellport ist Hafen .
  • Weniger Länge
    • True, wenn das Paket eine Länge hat, die kleiner oder gleich ist Länge . Das ist äquivalent zu len <= Länge .
  • größer Länge
    • True, wenn das Paket eine Länge hat, die größer oder gleich ist Länge . Das ist äquivalent zu len> = Länge .
  • ip proto Protokoll
    • True, wenn das Paket ein IP-Paket ist (siehe ip (4P)) vom Protokolltyp Protokoll . Protokoll kann eine Zahl oder einer der Namen sein icmp , icmp6 , igmp , igrp , pim , Ah , esp , vrrp , udp , oder tcp . Beachten Sie, dass die Bezeichner tcp , udp , und icmp sind auch Schlüsselwörter und müssen über den Backslash (), der in der C-Shell ist, maskiert werden. Beachten Sie, dass dieses Primitiv die Protokollkopfkette nicht verfolgt.
  • ip6 proto Protokoll
    • True, wenn das Paket ein IPv6-Paket des Protokolltyps ist Protokoll . Beachten Sie, dass dieses Primitiv die Protokollkopfkette nicht verfolgt.
  • ip6 protochain Protokoll
    • True, wenn das Paket ein IPv6-Paket ist und einen Protokollheader mit Typ enthält Protokoll in seiner Protokollkopfkette. Zum Beispiel, ipv6 protochain 6 vergleicht jedes IPv6-Paket mit dem TCP-Protokollheader in der Protokollheaderkette. Das Paket kann beispielsweise einen Authentifizierungsheader, einen Routingheader oder einen Hop-by-Hop-Optionsheader zwischen dem IPv6-Header und dem TCP-Header enthalten. Der von diesem Grundelement ausgegebene BPF-Code ist komplex und kann nicht durch den BPF-Optimierercode in optimiert werden tcpdump , das kann etwas langsam sein.
  • ip protochain Protokoll
    • Gleichwertigip6 protochain Protokoll , aber das ist für IPv4.
  • Äther-Sendung
    • True, wenn das Paket ein Ethernet-Broadcast-Paket ist. Das Äther Schlüsselwort ist optional.
  • IP-Sendung
    • True, wenn das Paket ein IP-Broadcast-Paket ist. Es prüft, ob die Broadcast-Konventionen für alle Nullen und für alle Eins gelten, und sucht nach der lokalen Subnetzmaske.
  • Ether-Multicast
    • True, wenn das Paket ein Ethernet-Multicast-Paket ist. Das Äther Schlüsselwort ist optional. Dies ist die Abkürzung für 'Ether 0 & 1! = 0'.
  • IP-Multicast
    • True, wenn das Paket ein IP-Multicast-Paket ist.
  • IP6-Multicast
    • True, wenn das Paket ein IPv6-Multicast-Paket ist.
  • Ether Proto Protokoll
    • True, wenn das Paket vom Ethertyp ist Protokoll . Protokoll kann eine Zahl oder einer der Namen sein ip , ip6 , Arp , rarp , ein Gespräch , aarp , decnet , sca , lat , Mopdl , moprc , iso , stp , ipx , oder netbeui . Beachten Sie, dass diese Bezeichner auch Schlüsselwörter sind und über den Backslash () maskiert werden müssen.
    • Im Fall von FDDI (z. B. 'fddi-Protokoll arp'und Token Ring (z. B.'tr Protokoll Arp') für die meisten dieser Protokolle stammt die Protokollidentifikation aus dem 802.2 Logical Link Control (LLC) -Header, der normalerweise über dem FDDI- oder Token Ring-Header angeordnet ist.
    • Beim Filtern nach den meisten Protokollkennungen in FDDI oder Token Ring tcpdump prüft nur das Protokoll-ID-Feld eines LLC-Headers im sogenannten SNAP-Format mit einem OUI (Organizational Unit Identifier) ​​von 0x000000 auf gekapseltes Ethernet; Es wird nicht geprüft, ob das Paket im SNAP-Format mit einer OUI von 0x000000 vorliegt.
    • Die Ausnahmen sind iso , für die es die Felder DSAP (Destination Service Access Point) und SSAP (Source Service Access Point) des LLC-Headers prüft, stp und netbeui , wo der DSAP des LLC-Headers überprüft wird, und ein Gespräch , wo nach einem SNAP-Paket mit einer OUI von 0x080007 und dem Appletalk-Etype gesucht wird.
    • Im Falle von Ethernet tcpdump überprüft das Ethernet-Feld für die meisten dieser Protokolle; die ausnahmen sind iso , Saft , und netbeui , für den es nach einem 802.3-Frame sucht und dann den LLC-Header wie für FDDI und Token Ring prüft; ein Gespräch , wo es sowohl für den Appletalk-Typ in einem Ethernet-Frame als auch für ein Paket im SNAP-Format prüft, wie dies für FDDI und Token Ring der Fall ist; aarp , wo nach dem Appletalk ARP-Typ in einem Ethernet-Frame oder einem 802.2 SNAP-Frame mit einer OUI von 0x000000 gesucht wird; und ipx , bei der Überprüfung auf den IPX-Typ in einem Ethernet-Frame, den IPX-DSAP im LLC-Header, den 802.3 ohne LLC-Header-Kapselung von IPX und den IPX-Typ in einem SNAP-Frame.
  • decnet src Wirt
    • True, wenn die DECNET-Quelladresse ist Wirt Dies kann eine Adresse im Format "10.123" oder ein DECNET-Hostname sein. Die Unterstützung des DECNET-Hostnamens ist nur auf Ultrix-Systemen verfügbar, die für die Ausführung von DECNET konfiguriert sind.
  • decnet dst Wirt
    • True, wenn die DECNET-Zieladresse ist Wirt .
  • decnet host Wirt
    • True, wenn entweder die DECNET-Quell- oder Zieladresse ist Wirt .
  • ip, ip6, Arp, rarp, ein Gespräch, aarp, decnet, iso, stp, ipx, netbeui
    • Abkürzungen für Ether Proto p woher p ist eines der oben genannten Protokolle.
  • lat, moprc, Mopdl
    • Abkürzungen für Ether Proto p woher p ist eines der oben genannten Protokolle. Beachten Sie, dass tcpdump weiß derzeit nicht, wie diese Protokolle zu analysieren sind.
  • vlan vlan_id
    • True, wenn das Paket ein IEEE 802.1Q-VLAN-Paket ist. Ob vlan_id angegeben ist, nur wahr, wenn das Paket die Angabe hat vlan_id . Beachten Sie, dass der erstevlan Schlüsselwort in gefunden Ausdruck ändert die Dekodierungsoffsets für den Rest von Ausdruck in der Annahme, dass das Paket ein VLAN-Paket ist.
  • tcp, udp, icmp
    • Abkürzungen für ip proto p oder ip6 proto p woher p ist eines der oben genannten Protokolle.
  • iso proto Protokoll
    • True, wenn das Paket ein OSI-Paket des Protokolltyps ist Protokoll . Protokoll kann eine Zahl oder einer der Namen sein clnp , esis , oder isis .
  • clnp, esis, isis
    • Abkürzungen für iso proto p woher p ist eines der oben genannten Protokolle. Beachten Sie, dass tcpdump führt die Analyse dieser Protokolle unvollständig aus.
  • expr relop expr
    • Richtig, wenn die Beziehung gilt, wo relop ist einer von>, <,> =, <=, =,! = und Ausdruck ist ein arithmetischer Ausdruck, der aus Ganzzahlkonstanten (in der Standard-C-Syntax ausgedrückt), den normalen Binäroperatoren +, -, *, /, &, |, einem Längenoperator und speziellen Paketdatenzugriffsmitteln besteht. Verwenden Sie die folgende Syntax, um auf Daten innerhalb des Pakets zuzugreifen: proto expr: size .

Proto ist einer vonÄther, fddi, tr, ppp, Unterhose, Verknüpfung, ip, Arp, rarp, tcp, udp, icmp, oder ip6, und gibt die Protokollschicht für die Indexoperation an (Äther, fddi, tr, ppp, Unterhose, undVerknüpfung alle beziehen sich auf die Verbindungsebene). Beachten Sie, dass tcp, udp und andere Protokolle der höheren Schicht gelten nur für IPv4, nicht für IPv6 (dies wird in Zukunft behoben). Der Byte-Versatz relativ zur angegebenen Protokollschicht ist mit gegeben Ausdruck . Größe ist optional und gibt die Anzahl der Bytes im Feld von Interesse an; Es kann entweder eins, zwei oder vier sein, und der Standardwert ist eins. Der Längenoperator, angegeben durch das Schlüsselwortlen, gibt die Länge des Pakets an.

Zum Beispiel, 'Ether 0 & 1! = 0'fängt den gesamten Multicast-Verkehr ein. Der Ausdruck 'ip 0 & 0xf! = 5'fängt alle IP-Pakete mit Optionen ab. Der Ausdruck 'ip 6: 2 & 0x1fff = 0'fängt nur unfragmentierte Datagramme ab und fragt fragmentierte Datagramme ab. Diese Prüfung wird implizit auf das angewendettcp undudp Indexoperationen. Zum Beispiel, tcp 0 bedeutet immer das erste Byte des TCP Header und bedeutet nie das erste Byte eines dazwischenliegenden Fragments.

Einige Offsets und Feldwerte können als Namen und nicht als numerische Werte ausgedrückt werden. Die folgenden Protokollkopfzeilenfeldversätze sind verfügbar: icmptype (ICMP-Typfeld),icmpcode (ICMP-Codefeld) undtcpflags (TCP-Flagsfeld).

Die folgenden ICMP-Typfeldwerte sind verfügbar:icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-umleitung, icmp-echo, icmp-routeradvert, icmp-routersolicit, icmp-timxceed, icmp-paramprob, icmp-tstamp, icmp-tstampreply, icmp-ireq, icmp-ireqreply, icmp-maskreq, icmp-maskreply.

Die folgenden TCP-Flagsfeldwerte sind verfügbar:tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-push, tcp-ack, tcp-dringend.

Grundelemente können mit einer der folgenden Möglichkeiten kombiniert werden:

  • Eine Gruppe von Grundelementen und Operatoren in Klammern (Klammern sind speziell für die Shell und müssen maskiert werden)
  • Negation ('!'oder `nicht')
  • Verkettung ('&&' oder 'und')
  • Wechsel ('||' oder 'oder')

Negation hat höchste Priorität. Alternation und Verkettung haben gleiche Priorität und sind von links nach rechts assoziiert. Beachten Sie das explizitund Für die Verkettung sind Token und keine Nebeneinanderstellungen erforderlich.

Wenn ein Bezeichner ohne ein Schlüsselwort angegeben wird, wird das neueste Schlüsselwort angenommen. Zum Beispiel, nicht host vs und ass ist die Abkürzung für nicht host vs und host ass. Dies sollte jedoch nicht mit verwechselt werden nicht (host vs oder ass).

Ausdrucksargumente können an übergeben werden tcpdump entweder als einzelnes Argument oder als mehrere Argumente, je nachdem, was bequemer ist. Wenn der Ausdruck Shell-Metazeichen enthält, ist es im Allgemeinen einfacher, ihn als einzelnes Argument mit Anführungszeichen zu übergeben. Mehrere Argumente werden mit Leerzeichen verkettet, bevor sie analysiert werden.

Tcpdump-Beispiele

tcpdump host sonnenuntergang

Der obige Befehl tcpdump wird verwendet, um alle Pakete zu drucken, die ankommen oder von denen abgehen Sonnenuntergang.

tcpdump host helios und (hot oder ass )

In diesem tcpdump-Beispiel wird der Datenverkehr zwischen gedruckt Helios und entweder heiß oder As.

tcpdump ip host ass und nicht helios

Sie können diesen Befehl tcpdump verwenden, um alle IP-Pakete dazwischen auszudrucken As und jeder Host außer Helios.

tcpdump net ucb-ether

Im obigen Beispiel druckt tcpdump den gesamten Datenverkehr zwischen lokalen Hosts und Hosts in Berkeley.

tcpdump 'gateway snup und (port ftp oder ftp-data)'

Dieses nächste Beispiel für den Befehl tcpdump wird verwendet, um den gesamten FTP-Verkehr über das Internet-Gateway zu drucken schnappen . Beachten Sie, dass der Ausdruck in Anführungszeichen gesetzt wird, um zu verhindern, dass die Shell die Klammern falsch interpretiert.

tcpdump ip und nicht net localnet

Im obigen Beispiel für tcpdump gibt der Befehl Daten aus, die weder von lokalen Hosts stammen noch für diese bestimmt sind.

tcpdump 'tcp tcpflags & (tcp-syn | tcp-fin)! = 0 und nicht src und dst net localnet '

Für das obige Beispiel von tcpdump wird der Befehl verwendet, um die Start- und Endpakete (die SYN- und FIN-Pakete) jeder TCP-Konversation auszudrucken, die einen nichtlokalen Host umfasst.

tcpdump 'gateway snup und ip 2: 2> 576'

Der obige Befehl druckt IP-Pakete, die länger als 576 Bytes sind, die über das Gateway gesendet wurden schnappen

tcpdump 'ether 0 & 1 = 0 und ip 16> = 224'

Der oben gezeigte Befehl tcpdump gibt IP-Broadcast- oder Multicast-Pakete aus nicht gesendet über Ethernet-Broadcast oder Multicast.

tcpdump 'icmp icmptype! = icmp-echo und icmp icmptype! = icmp-echoreply'

In diesem letzten Beispiel von tcpdump gibt der Befehl alle ICMP-Pakete aus, die keine Echoanforderungen oder -antworten sind (d. H. Keine Ping-Pakete).

Tcpdump-Ausgabeformat

Die Ausgabe von tcpdump ist protokollabhängig. Im Folgenden finden Sie eine kurze Beschreibung und Beispiele für die meisten Formate.

Link-Ebenen-Header. Wenn die Option '-e' angegeben ist, wird der Link-Level-Header ausgedruckt. In Ethernet-Netzwerken werden die Quell- und Zieladressen, das Protokoll und die Paketlänge gedruckt.

In FDDI-Netzwerken verursacht die Option '-e' tcpdump das Feld "Frame-Steuerung", die Quell- und Zieladressen sowie die Paketlänge zu drucken. (Das Feld "Rahmensteuerung" regelt die Interpretation des restlichen Pakets. Bei normalen Paketen (z. B. solchen, die IP-Datagramme enthalten) handelt es sich um "async" -Pakete mit einem Prioritätswert zwischen 0 und 7: "async4'. Es wird angenommen, dass solche Pakete ein 802.2 Logical Link Control (LLC) -Paket enthalten; Der LLC-Header wird gedruckt, falls dies der Fall ist nicht ein ISO-Datagramm oder ein sogenanntes SNAP-Paket.

In Token Ring-Netzwerken wird die Option '-e' ausgelöst tcpdump um die Felder "Zugriffskontrolle" und "Rahmensteuerung", die Quell- und Zieladressen sowie die Paketlänge zu drucken. Wie in FDDI-Netzwerken wird angenommen, dass Pakete ein LLC-Paket enthalten. Unabhängig davon, ob die Option '-e' angegeben ist oder nicht, werden die Quellrouting-Informationen für Pakete mit Quellrouting gedruckt.

(Anmerkung: Die folgende Beschreibung setzt voraus, dass Sie mit dem in RFC-1144 beschriebenen SLIP-Kompressionsalgorithmus vertraut sind.)

Bei SLIP-Links werden ein Richtungsanzeiger ("I" für eingehende, "O" für ausgehende), Pakettyp und Komprimierungsinformationen ausgedruckt. Der Pakettyp wird zuerst gedruckt. Die drei Typen sind ip , utcp , und ctcp . Es werden keine weiteren Linkinformationen für gedruckt ip Pakete. Bei TCP-Paketen wird die Verbindungskennung nach dem Typ gedruckt. Wenn das Paket komprimiert ist, wird der codierte Header ausgedruckt. Die Sonderfälle werden als gedruckt* S + n und* SA + n , woher n ist der Betrag, um den sich die Sequenznummer (oder Sequenznummer und Bestät.) geändert hat. Wenn es sich nicht um einen Sonderfall handelt, werden null oder mehr Änderungen gedruckt. Eine Änderung wird durch U (dringender Zeiger), W (Fenster), A (Bestätigung), S (Sequenznummer) und I (Paket-ID) angezeigt, gefolgt von einem Delta (+ n oder -n) oder einem neuen Wert (= n). Schließlich werden die Datenmenge im Paket und die Länge des komprimierten Headers gedruckt.

Die folgende Zeile zeigt beispielsweise ein ausgehendes komprimiertes TCP-Paket mit einer impliziten Verbindungskennung. Die Bestätigung hat sich um 6, die Sequenznummer um 49 und die Paket-ID um 6 geändert. Es gibt 3 Bytes Daten und 6 Bytes komprimierter Header:

O ctcp * A + 6 S + 49 I + 6 3 (6)

Arp / Rarp-Pakete. Die Ausgabe von arp / rarp zeigt den Anfragetyp und seine Argumente an. Das Format soll selbsterklärend sein. Hier ist ein kurzer Auszug aus dem Start eines 'rlogin' vom Host rtsg zu hosten csam :

arp who-has csam sag rtsgarp antwort csam is-at CSAM

Die erste Zeile besagt, dass rtsg ein arp-Paket gesendet hat, in dem nach der Ethernet-Adresse des Internet-Hosts csam gefragt wird. Csam antwortet mit seiner Ethernet-Adresse (in diesem Beispiel werden Ethernet-Adressen in Großbuchstaben und Internetadressen in Kleinbuchstaben angegeben).

Dies wäre weniger überflüssig, wenn wir das getan hätten tcpdump -n :

arp wer-hat 128.3.254.6 sagt 128.3.254.68Antwort von arp 128.3.254.6 ist um 02: 07: 01: 00: 01: c4

Wenn wir das getan hätten tcpdump -e wäre die Tatsache, dass das erste Paket rundgesendet wird und das zweite Punkt-zu-Punkt ist, sichtbar:

RTSG Broadcast 0806 64: arp who-has csam rtsg mitteilenCSAM RTSG 0806 64: arp reply csam ist-at CSAM

Für das erste Paket heißt dies, dass die Ethernet-Quelladresse RTSG ist, das Ziel die Ethernet-Broadcast-Adresse ist, das Typfeld Hex 0806 (Typ ETHER_ARP) enthielt und die Gesamtlänge 64 Byte betrug.

TCP-Pakete (Hinweis: Die folgende Beschreibung setzt voraus, dass Sie mit dem in RFC-793 beschriebenen TCP-Protokoll vertraut sind. Wenn Sie sich mit dem Protokoll nicht auskennen, sind weder diese Beschreibung noch tcpdump für Sie von großem Nutzen.) . Das allgemeine Format einer TCP-Protokollzeile lautet:

src> dst: Markiert die dringendsten Optionen des Datenseqno-Fenster

Src und dst sind die Quell- und Ziel-IP-Adressen und -Ports. Flaggen sind eine Kombination aus S (SYN), F (FIN), P (PUSH) oder R (RST) oder ein einzelnes '.' (keine Flaggen). Daten-seqno beschreibt den Teil des Sequenzraums, der von den Daten in diesem Paket abgedeckt wird (siehe Beispiel unten). Ack ist Sequenznummer der nächsten Daten, die in dieser Verbindung in die andere Richtung erwartet werden. Fenster ist die Anzahl der verfügbaren Bytes des Empfangspufferspeichers für die andere Richtung dieser Verbindung. Urg zeigt an, dass das Paket "dringende" Daten enthält. Optionen sind TCP-Optionen in spitzen Klammern (z. B. ).

Src, dst, und Flaggen sind immer präsent Die anderen Felder hängen vom Inhalt des TCP-Protokoll-Headers des Pakets ab und werden nur bei Bedarf ausgegeben.

Hier ist der Eröffnungsabschnitt eines Rlogins vom Host rtsg zu hosten csam .

rtsg.1023> csam.login: S 768512: 768512 (0) gewinnt 4096 csam.login> rtsg.1023: S 947648: 947648 (0) bestätigt 768513, gewinnt 4096 rtsg.1023> csam.login:. ack 1 gewinnen 4096rtsg.1023> csam.login: P 1: 2 (1) mit 1 Sieg 4096csam.login> rtsg.1023:. ack 2 gewinnen 4096rtsg.1023> csam.login: P 2:21 (19) mit 1 Sieg 4096csam.login> rtsg.1023: P 1: 2 (1) 21 Siege 4077csam.login> rtsg.1023: P 2: 3 (1) ack 21 gewinnen 4077 dringend 1csam.login> rtsg.1023: P 3: 4 (1) ack 21 gewinnen 4077 dringend 1

Die erste Zeile besagt, dass TCP-Port 1023 auf rtsg ein Paket an Port gesendet hat Anmeldung auf csam. DasS zeigt an, dass die SYN Flag wurde gesetzt. Die Paketsequenznummer war 768512 und enthielt keine Daten. (Die Notation lautet 'first: last (nbytes)'), was 'Folgenummern' bedeutet zuerst bis aber nicht inklusive zuletzt welches ist nbytes Bytes der Benutzerdaten '.) Es gab keine Piggy-Backed-Bestätigung, das verfügbare Empfangsfenster war 4096 Bytes, und es gab eine Option mit maximaler Segmentgröße, die eine mss von 1024 Bytes anforderte.

Csam antwortet mit einem ähnlichen Paket, außer dass es eine Piggyback-Bestätigung für Rtsgs SYN enthält. Rtsg prüft dann Csam's SYN. Das '.' bedeutet, dass keine Flags gesetzt wurden. Das Paket enthielt keine Daten, daher gibt es keine Datenfolgenummer. Beachten Sie, dass die Ack-Sequenznummer eine kleine Ganzzahl (1) ist. Das erste Mal tcpdump Wenn eine TCP-Konversation angezeigt wird, wird die Sequenznummer aus dem Paket gedruckt. Bei nachfolgenden Paketen der Konversation wird die Differenz zwischen der Sequenznummer des aktuellen Pakets und dieser Anfangssequenznummer gedruckt. Dies bedeutet, dass Sequenznummern nach der ersten als relative Bytepositionen im Datenstrom der Konversation interpretiert werden können (wobei das erste Datenbyte in jede Richtung '1' ist). '-S' überschreibt diese Funktion, wodurch die ursprünglichen Folgenummern ausgegeben werden.

In der sechsten Zeile sendet rtsg csam 19 Datenbytes (Byte 2 bis 20 auf der rtsg -> csam-Seite der Konversation). Das PUSH-Flag wird im Paket gesetzt. In der siebten Zeile gibt csam an, dass die empfangenen Daten von rtsg bis zu Byte 21 gesendet wurden. Das meiste dieser Daten befindet sich jedoch offensichtlich im Socket-Puffer, da das Empfangsfenster von csam um 19 Byte kleiner geworden ist. Csam sendet auch ein Datenbyte an rtsg in diesem Paket. In der achten und in der neunten Zeile sendet csam zwei Bytes dringender, geschobener Daten an rtsg.

Wenn der Schnappschuss klein genug war tcpdump hat den vollständigen TCP-Header nicht erfasst, er interpretiert den Header so viel wie möglich und meldet dann "| tcp '' um anzuzeigen, dass der Rest nicht interpretiert werden konnte. Wenn der Header eine falsche Option enthält (eine mit einer Länge, die entweder zu klein ist oder über das Ende des Headers hinausgeht), tcpdump meldet es als " schlecht opt '' und interpretiert keine weiteren Optionen (da nicht zu erkennen ist, wo sie beginnen). Wenn die Header-Länge angibt, dass Optionen vorhanden sind, die IP-Datagramm-Länge jedoch nicht lang genug ist, damit die Optionen tatsächlich vorhanden sind, tcpdump meldet es als " schlechte HDD-Länge ''.

Erfassen Sie Pakete mit bestimmten Flagkombinationen. Der Steuerbit-Abschnitt des TCP-Headers enthält acht Bits:

CWR | ECE | URG | ACK | PSH | RST | SYN | FLOSSE

Nehmen wir an, wir möchten Pakete überwachen, die beim Aufbau einer TCP-Verbindung verwendet werden. Es sei daran erinnert, dass TCP ein 3-Wege-Handshake-Protokoll verwendet, wenn eine neue Verbindung initialisiert wird. Die Verbindungsreihenfolge in Bezug auf die TCP-Steuerbits lautet:

  1. Anrufer sendet SYN.
  2. Empfänger antwortet mit SYN, ACK.
  3. Anrufer sendet ACK.

Jetzt sind wir daran interessiert, Pakete zu erfassen, bei denen nur das SYN-Bit gesetzt ist (Schritt 1). Beachten Sie, dass wir keine Pakete aus Schritt 2 (SYN-ACK) wünschen, sondern lediglich ein einfaches anfängliches SYN. Was wir brauchen, ist ein korrekter Filterausdruck für tcpdump .

Rufen Sie die Struktur eines TCP-Headers ohne Optionen ab:

0 15 31-----------------------------------------------------------------| Quellport | Zielhafen |-----------------------------------------------------------------| Sequenznummer |-----------------------------------------------------------------| Bestätigungsnummer |-----------------------------------------------------------------| HL | rsvd | C | E | U | A | P | R | S | F | Fenstergröße |-----------------------------------------------------------------| TCP-Prüfsumme | dringender Zeiger |-----------------------------------------------------------------

Ein TCP-Header enthält normalerweise 20 Oktette Daten, sofern keine Optionen vorhanden sind. Die erste Zeile des Diagramms enthält die Oktette 0–3, die zweite Zeile zeigt die Oktette 4–7 usw.

Beginnend mit 0 zählen, sind die relevanten TCP-Steuerbits im Oktett 13 enthalten:

0 7| 15| 23| 31----------------|---------------|---------------|----------------| HL | rsvd | C | E | U | A | P | R | S | F | Fenstergröße |----------------|---------------|---------------|----------------| | 13. Oktett | | |

Schauen wir uns das Oktett Nr. 1 genauer an. 13

| | |---------------| | C | E | U | A | P | R | S | F | |---------------| |7 5 3 0|

Dies sind die TCP-Steuerbits, an denen wir interessiert sind. Wir haben die Bits in diesem Oktett von 0 bis 7 von rechts nach links nummeriert, so dass das PSH-Bit Bit Nummer 3 ist, während das URG-Bit Nummer 5 ist.

Denken Sie daran, dass wir Pakete nur mit SYN-Set erfassen möchten. Mal sehen, was mit dem Oktett 13 passiert, wenn ein TCP-Datagramm mit dem SYN-Bit im Header ankommt:

| C | E | U | A | P | R | S | F | |---------------| |0 0 0 0 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0|

Wenn Sie den Abschnitt mit den Steuerbits betrachten, sehen Sie, dass nur Bit Nummer 1 (SYN) gesetzt ist.

Unter der Annahme, dass die Oktettzahl 13 eine vorzeichenlose 8-Bit-Ganzzahl in Netzwerk-Bytereihenfolge ist, lautet der Binärwert dieses Oktetts:

00000010

Die Dezimaldarstellung lautet:

7 6 5 4 3 2 1 00*2 + 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 1*2 + 0*2 = 2

Wir sind fast fertig, denn jetzt wissen wir, dass, wenn nur SYN gesetzt ist, der Wert des 13. Oktetts im TCP-Header bei der Interpretation als vorzeichenlose 8-Bit-Ganzzahl in der Bytereihenfolge des Netzwerks genau 2 sein muss.

Diese Beziehung kann als ausgedrückt werden

tcp 13 == 2

Wir können diesen Ausdruck als Filter für verwenden tcpdump Um Pakete zu beobachten, bei denen nur SYN eingestellt ist:

tcpdump -i xl0 tcp 13 == 2

Der Ausdruck sagt: "Lassen Sie das 13. Oktett eines TCP-Datagramms den Dezimalwert 2 haben". Genau das wollen wir.

Nehmen wir nun an, dass wir SYN-Pakete erfassen müssen, aber es ist uns egal, ob ACK oder ein anderes TCP-Steuerbit gleichzeitig gesetzt ist. Schauen Sie sich an, was mit dem Oktett 13 passiert, wenn ein TCP-Datagramm mit SYN-ACK-Set ankommt:

| C | E | U | A | P | R | S | F | |---------------| |0 0 0 1 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0|

Die Bits 1 und 4 sind jetzt im 13. Oktett gesetzt. Der Binärwert von Oktett 13 ist:

00010010

was übersetzt in dezimal:

7 6 5 4 3 2 1 00*2 + 0*2 + 0*2 + 1*2 + 0*2 + 0*2 + 1*2 + 0*2 = 18

Wir können nicht einfach 'tcp 13 == 18' im tcpdump Filterausdruck, da dadurch nur die Pakete ausgewählt werden, für die SYN-ACK festgelegt ist, nicht jedoch für Pakete, bei denen nur SYN festgelegt ist. Denken Sie daran, dass es uns egal ist, ob ACK oder ein anderes Steuerbit gesetzt ist, solange SYN gesetzt ist.

Um unser Ziel zu erreichen, müssen wir den Binärwert von Oktett 13 logisch UND mit einem anderen Wert UND dem SYN-Bit ANDern. Wir wissen, dass wir SYN auf jeden Fall setzen wollen, also logisch UND den Wert im 13. Oktett mit dem Binärwert eines SYN:

00010010 SYN-ACK 00000010 SYN UND 00000010 (wir wollen SYN) UND 00000010 (wir wollen SYN) -------- -------- = 00000010 = 00000010

Wir sehen, dass diese AND-Operation dasselbe Ergebnis liefert, unabhängig davon, ob ACK oder ein anderes TCP-Steuerbit gesetzt ist. Die Dezimaldarstellung des UND-Werts sowie das Ergebnis dieser Operation ist 2 (binär 00000010), daher wissen wir, dass für Pakete mit SYN-Satz die folgende Beziehung wahr sein muss:

((Wert von Oktett 13) AND (2)) == (2)

Das zeigt uns auf die tcpdump Filterausdruck

tcpdump -i xl0 'tcp 13 & 2 == 2'

Beachten Sie, dass Sie einfache Anführungszeichen oder einen umgekehrten Schrägstrich verwenden sollten, um das Sonderzeichen AND ('&') vor der Shell auszublenden.

UDP-Pakete. Das UDP-Format wird durch dieses Rwho-Paket veranschaulicht:

actinide.who> sendung.who: udp 84

Das sagt diesen Hafen Wer auf dem Host Actinide schickte ein UDP-Datagramm an Port Wer auf dem Host Übertragung , die Internet-Broadcast-Adresse. Das Paket enthielt 84 Bytes Benutzerdaten.

Einige UDP-Dienste werden erkannt (anhand der Quell- oder Zielportnummer) und die Protokollinformationen der höheren Ebene werden gedruckt, insbesondere Anforderungen an den Domain Name-Dienst (RFC-1034/1035) und Sun RPC-Aufrufe (RFC-1050) an NFS.

UDP-Namenserveranfragen (Hinweis: Die folgende Beschreibung setzt voraus, dass Sie mit dem in RFC-1035 beschriebenen Domain Service-Protokoll vertraut sind. Wenn Sie mit dem Protokoll nicht vertraut sind, ist die folgende Beschreibung wenig sinnvoll.)

Namenserveranforderungen werden wie folgt formatiert:

src> dst: id op? Flags qtype qklassenname (len) h2opolo.1538> helios.domain: 3+ A? ucbvax.berkeley.edu. (37)

Wirt h2opolo fragte den Domain-Server an Helios für einen Adresseintrag (qtype = A), der dem Namen zugeordnet ist ucbvax.berkeley.edu. Die Abfrage-ID war "3". Das "+" kennzeichnet das Rekursion gewünscht Flag wurde gesetzt. Die Länge der Abfrage betrug 37 Byte, die UDP- und IP-Protokollheader nicht eingeschlossen. Die Abfrageoperation war die normale, Abfrage , so wurde das Operationsfeld weggelassen. Wenn die Operation etwas anderes gewesen wäre, wäre sie zwischen '3' und '+' gedruckt worden. In ähnlicher Weise war die qclass die normale, C_IN und weggelassen. Jede andere qKlasse wäre unmittelbar nach dem 'A' gedruckt worden.

Einige Anomalien werden überprüft und können zu zusätzlichen Feldern in eckigen Klammern führen: Wenn eine Abfrage eine Antwort, einen Berechtigungsdatensatz oder einen Abschnitt mit zusätzlichen Datensätzen enthält, ancount , nscount , oder arcount werden gedruckt als ' n ein', ' n Noch ' n au 'wo n ist die entsprechende Anzahl. Wenn eines der Antwortbits gesetzt ist (AA, RA oder rcode) oder eines der "muss Null sein" -Bits in den Bytes zwei und drei gesetzt werden, b2 & 3 = x 'wird gedruckt, wo x ist der Hex-Wert der Kopfbytes zwei und drei.

Antworten des UDP-Namenservers Namenserverantworten werden wie folgt formatiert:

src> dst: id op rcode Flags a / n / au Typklassendaten (len) helios.domain> h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273)helios.domain> h2opolo.1537: 2 NXDomain * 0/1/0 (97)

Im ersten Beispiel Helios antwortet auf Abfrage-ID 3 von h2opolo mit drei Antwortdatensätzen, drei Namenserverdatensätzen und sieben zusätzlichen Datensätzen. Der erste Antwortsatz ist der Typ A (Adresse), und seine Daten sind die Internetadresse 128.32.137.3. Die Gesamtgröße der Antwort betrug 273 Bytes ohne UDP- und IP-Header. Der op (Query) und der Antwortcode (NoError) wurden weggelassen, ebenso wie die Klasse (C_IN) des A-Datensatzes.

Im zweiten Beispiel Helios antwortet auf Abfrage 2 mit einem Antwortcode einer nicht vorhandenen Domäne (NXDomain) ohne Antworten, einem Nameserver und keinen Berechtigungsdatensätzen. Das '*' zeigt an, dass das autoritative Antwort Bit wurde gesetzt. Da keine Antworten vorhanden waren, wurden weder Typ, Klasse noch Daten gedruckt.

Andere Flag-Zeichen, die möglicherweise angezeigt werden, sind '-' (Rekursion verfügbar, RA, nicht set) und '|' (abgeschnittene Nachricht, TC, eingestellt). Wenn der Abschnitt "Frage" nicht genau einen Eintrag enthält, " n q 'wird gedruckt.

Beachten Sie, dass Nameserver-Anforderungen und -Antworten in der Regel umfangreich sind und der Standardwert ist Snaplen von 68 Bytes erfassen möglicherweise nicht genug des Pakets, um gedruckt zu werden. Verwenden Sie die-s Flag, um den Snaplen zu erhöhen, wenn Sie den Nameserververkehr ernsthaft untersuchen müssen. '-s 128'hat für mich gut funktioniert.

SMB / CIFS-Dekodierung. tcpdump Enthält eine relativ umfangreiche SMB / CIFS / NBT-Decodierung für Daten unter UDP / 137, UDP / 138 und TCP / 139. Einige grundlegende Dekodierungen von IPX- und NetBEUI-SMB-Daten werden ebenfalls durchgeführt.

Standardmäßig wird eine relativ minimale Dekodierung durchgeführt. Wenn -v verwendet wird, ist die Dekodierung sehr viel detaillierter. Seien Sie gewarnt, dass mit -v ein einzelnes SMB-Paket eine Seite oder mehr aufnehmen kann. Verwenden Sie daher -v nur dann, wenn Sie wirklich alle bloßen Details benötigen.

Wenn Sie SMB-Sitzungen dekodieren, die Unicode-Zeichenfolgen enthalten, möchten Sie möglicherweise die Umgebungsvariable USE_UNICODE auf 1 setzen. Ein Patch zum automatischen Erkennen von Unicode-Zeichenfolgen wäre wünschenswert.

Informationen zu den SMB-Paketformaten und zu allen Feldern finden Sie unter www.cifs.org oder im Verzeichnis pub / samba / specs / auf Ihrer bevorzugten Spiegelseite von samba.org. Die SMB-Patches wurden von Andrew Tridgell ([email protected]) geschrieben.

NFS-Anfragen und Antworten. Sun NFS-Anforderungen (Network File System) und Antworten werden wie folgt gedruckt:

src.xid> dst.nfs: len op args src.nfs> dst.xid: Antwortstat len ​​op-Ergebnisse sushi.6709> wrl.nfs: 112 readlink fh 21,24 / 10.73165wrl.nfs> sushi.6709: antworten ok 40 readlink "../var"sushi.201b> wrl.nfs: 144 Lookup fh 9,74 / 4096.6878 "xcolors"wrl.nfs> sushi.201b: Antwort ok 128 Lookup fh 9,74 / 4134.3150

In der ersten Zeile Host Sushi sendet eine Transaktion mit der ID 6709 zu wrl (Beachten Sie, dass die auf den SRC-Host folgende Nummer eine Transaktions-ID ist. nicht der Quellport). Die Anforderung bestand aus 112 Bytes ohne UDP- und IP-Header. Die Operation war a readlink (Lesen Sie den symbolischen Link) zum Dateihandle ( fh 21,24 / 10,731657119. (Wenn man Glück hat, wie in diesem Fall, kann das Dateihandle als ein wichtiges untergeordnetes Gerätenummerpaar interpretiert werden, gefolgt von der Inode- und Generierungsnummer.) Wrl antwortet "ok" mit dem Inhalt des Links.

In der dritten Zeile Sushi fragt wrl den Namen suchen ' xcolors 'in der Verzeichnisdatei 9,74 / 4096.6878. Beachten Sie, dass die gedruckten Daten vom Vorgangstyp abhängen. Das Format ist selbsterklärend, wenn es in Verbindung mit einer NFS-Protokollspezifikation gelesen wird.

Wenn das Flag -v (verbose) angegeben ist, werden zusätzliche Informationen gedruckt. Zum Beispiel:

sushi.1372a> wrl.nfs: 148 las fh 21,11 / 12,195 8192 Bytes @ 24576wrl.nfs> sushi.1372a: Antworten OK 1472 Lesen REG 100664 IDs 417/0 Sz 29388

(-v gibt auch die IP-Header-TTL-, ID-, Längen- und Fragmentierungsfelder aus, die in diesem Beispiel weggelassen wurden.) In de