Skip to main content

Tcpdump: voorbeelden, opties en meer

[Networking- FortiGate] How to capture packet using sniffer command? (Juni- 2026)

[Networking- FortiGate] How to capture packet using sniffer command? (Juni- 2026)
Anonim

Tcpdump is een opdracht die wordt gebruikt op verschillende Linux-besturingssystemen (OS's) die TCP / IP-pakketten verzamelen die door een netwerkadapter gaan. Net als bij een packet sniffer-tool kan tcpdump niet alleen het netwerkverkeer analyseren, maar het ook in een bestand opslaan.

In tegenstelling tot sommige opdrachten die standaard door het besturingssysteem worden geleverd, kan het zijn dat u tcpdump niet kunt gebruiken omdat deze niet is geïnstalleerd. Om tcpdump te installeren, voer je uit apt-get install tcpdump of yum installeer tcpdump, afhankelijk van uw besturingssysteem.

Hoe Tcpdump werkt

Tcpdump drukt de headers van pakketten af ​​op een netwerkinterface die overeenkomt met de Booleaanse waarde uitdrukking . Het kan ook worden uitgevoerd met de-w vlag, waardoor het de pakketgegevens opslaat in een bestand voor latere analyse en / of met de-r vlag, waardoor het uit een opgeslagen pakketbestand leest in plaats van pakketten uit een netwerkinterface te lezen. In alle gevallen alleen pakketten die overeenkomen uitdrukking wordt verwerkt door tcpdump .

tcpdump zal, indien niet uitgevoerd met de-C vlag, ga door met het vastleggen van pakketten totdat het wordt onderbroken door een SIGINT-signaal (bijvoorbeeld gegenereerd door het typen van uw interrupt-teken, meestal Ctrl + C) of een SIGTERM-signaal (meestal gegenereerd met dedoden(1) opdracht); indien uitgevoerd met de-C vlag, het zal pakketten opvangen totdat het wordt onderbroken door een SIGINT- of SIGTERM-signaal of het opgegeven aantal pakketten is verwerkt.

De hierboven genoemde switches worden later in dit artikel in detail uitgelegd.

Wanneer tcpdump stopt met het vastleggen van pakketten, het rapporteert het aantal:

  • Pakketten "ontvangen per filter."
    • De betekenis hiervan is afhankelijk van het besturingssysteem waarop u actief bent tcpdump , en mogelijk op de manier waarop het besturingssysteem is geconfigureerd. Als een filter is opgegeven op de opdrachtregel, telt het in sommige besturingssystemen pakketten, ongeacht of deze zijn gematcht door de filterexpressie, en op andere worden alleen pakketten geteld die zijn gematcht door de filterexpressie en zijn verwerkt door tcpdump.
  • Pakketten "droped by kernel."
    • Dit is het aantal pakketten dat is weggelaten vanwege een gebrek aan bufferruimte door het pakketinvangmechanisme in het besturingssysteem waarop tcpdump wordt uitgevoerd als het besturingssysteem deze informatie meldt aan applicaties. Zo niet, dan wordt dit gerapporteerd als 0.

Op platforms die het SIGINFO-signaal ondersteunen, zoals de meeste BSD's (Berkeley Software Distributions), zal het die tellingen rapporteren wanneer het een SIGINFO-signaal ontvangt (bijvoorbeeld gegenereerd door uw "status" -teken in te typen, meestal Ctrl + T) en gaat door met het vastleggen van pakketten.

Tcpdump-compatibiliteit

Voor het lezen van pakketten van een netwerkinterface met de opdracht tcpdump moet u speciale rechten hebben ( lezing een opgeslagen pakketbestand vereist dergelijke rechten niet):

  • SunOS 3.x of 4.x met NIT of BPF: U moet leestoegang tot hebben / Dev / nit of dev / bpf * .
  • Solaris met DLPI: U moet lees- / schrijftoegang tot het netwerk-pseudo-apparaat hebben, zoals / Dev / le . Op zijn minst enkele versies van Solaris is dit echter niet voldoende om toe te staan tcpdump om in promiscueuze modus vast te leggen; in die versies van Solaris moet je root zijn, of tcpdump moet setuid worden geïnstalleerd om te rooten, om te vangen in promiscueuze modus. Merk op dat, op veel (misschien alle) interfaces, als je niet in promiscueuze modus vastlegt, je geen uitgaande pakketten zult zien, dus een opname die niet in de promiscuemodus wordt gedaan, is misschien niet erg nuttig.
  • HP-UX met DLPI: Je moet root zijn of tcpdump moet setuid worden geïnstalleerd op root.
  • IRIX met snoop: Je moet root zijn of tcpdump moet setuid worden geïnstalleerd op root.
  • Linux: Je moet root zijn of tcpdump moet setuid worden geïnstalleerd op root.
  • Ultrix en Digital UNIX / Tru64 UNIX: Elke gebruiker kan netwerkverkeer vastleggen met tcpdump . Geen gebruiker (zelfs niet de supergebruiker) kan echter in een promiscueuze modus op een interface vastleggen, tenzij de supergebruiker de modus voor promiscue modus op die interface heeft ingeschakeld met behulp van pfconfig (8), en geen gebruiker (zelfs niet de supergebruiker) kan unicast-verkeer opvangen dat is ontvangen door of verzonden door de machine op een interface, tenzij de supergebruiker de modus voor het kopiëren van alle modi op die interface heeft ingeschakeld met behulp van pfconfig , dus nuttig het vastleggen van pakketten op een interface vereist waarschijnlijk dat ofwel de modus voor promiscue modus of de modus voor het kopiëren van alle modi of beide bewerkingsmodi op die interface is ingeschakeld.
  • BSD: U moet leestoegang tot hebben / Dev / BPF * .

Tcpdump Command Syntaxis

Zoals alle computeropdrachten werkt de opdracht tcpdump alleen correct als de syntaxis correct is:

tcpdump -adeflnNOpqRStuvxX -C tellen

-C bestandsgrootte -F het dossier

-ik interface -m module -r het dossier

-s snaplen -T type -U gebruiker -w het dossier

-E algo: geheim uitdrukking

Opdrachtopties Tcpdump

Dit zijn alle opties die u kunt gebruiken met de opdracht tcpdump:

  • -een: Poging om netwerk- en broadcast-adressen naar namen te converteren.
  • -C: Afsluiten na ontvangst tellen pakketten.
  • -C: Voordat u een onbewerkt pakket naar een opslagbestand schrijft, controleert u of het bestand momenteel groter is dan bestandsgrootte en, zo ja, sluit u het huidige bestand en opent u een nieuw bestand.Savefiles na het eerste savebestand krijgt de naam die is opgegeven met de-w vlag, met een nummer erachter, beginnend bij 2 en verder omhoog. De eenheden van bestandsgrootte zijn miljoenen bytes (1.000.000 bytes, niet 1.048.576 bytes).
  • -d: Dump de gecompileerde pakket-overeenkomende code in een door mensen leesbare vorm naar standaarduitvoer en stop.
  • -dd: Dump pakket-overeenkomende code als eenC programmafragment.
  • -ddd: Dump pakket-overeenkomende code als decimale getallen (voorafgegaan door een telling).
  • -e: Druk de kop van het koppelingsniveau af op elke stortlinie.
  • -E: Gebruik algo: geheim voor het decoderen van IPsec ESP-pakketten. Algoritmen kunnen zijndes-cbc, 3DES-CBC, blowfish-cbc, RC3-cbc, CAST128-cbcofgeen. De standaard isdes-cbc. De mogelijkheid om pakketten te decoderen is alleen aanwezig als tcpdump is gecompileerd met cryptografie ingeschakeld. geheim de ascii-tekst voor ESP geheime sleutel. We kunnen op dit moment geen willekeurige binaire waarde aannemen. De optie gaat uit van RFC2406 ESP, niet van RFC1827 ESP. De optie is alleen bedoeld voor foutopsporing en het gebruik van deze optie met een echt 'geheime' sleutel wordt afgeraden. Door de geheime sleutel van IPsec op de opdrachtregel te plaatsen, maakt u deze zichtbaar voor anderen via ps (1) en andere gelegenheden.
  • -f: Druk 'buitenlandse' internetadressen numeriek in plaats van symbolisch af (deze optie is bedoeld om ernstige hersenbeschadiging rond te krijgen in de yp-server van Sun - meestal hangt het voor altijd door het vertalen van niet-lokale internetnummers).
  • -F: Gebruik het dossier als invoer voor de filterexpressie. Een extra uitdrukking op de opdrachtregel wordt genegeerd.
  • -ik: Luister verder interface . Indien niet gespecificeerd, tcpdump zoekt in de lijst met systeeminterfaces naar de laagst genummerde, geconfigureerde interface (met uitzondering van loopback). Banden worden verbroken door de vroegste match te kiezen. Op Linux-systemen met 2.2 of latere kernels, een interface argument van "any" kan gebruikt worden om packets van alle interfaces vast te leggen. Merk op dat captures op het "any" apparaat niet gedaan zullen worden in promiscuous modus.
  • l: Maak standaardbuffer gebufferd. Handig als u de gegevens wilt zien tijdens het vastleggen ervan. Bijvoorbeeld "tcpdump -l | tee dat '' of" tcpdump -l> dat & tail -f dat ''.
  • -m: Laad SMI MIB-module definities van bestand module . Deze optie kan verschillende keren worden gebruikt om meerdere MIB-modules in te laden tcpdump .
  • -n: Converteer geen hostadressen naar namen. Dit kan worden gebruikt om DNS-zoekacties te voorkomen.
  • -nn: Converteer geen protocol- en poortnummers etc. ook naar namen.
  • -N: Druk geen domeinnaamkwalificatie van hostnamen af. Bijvoorbeeld, als u deze vlag geeft, dan tcpdump zal "nic" in plaats van "nic.ddn.mil" afdrukken.
  • -O: Voer de pakketoptimalisatiecode-aanpassingscode niet uit. Dit is alleen nuttig als u een probleem in de optimizer vermoedt.
  • -p: doe niet zet de interface in promiscuous modus. Merk op dat de interface om een ​​andere reden in promiscue modus kan zijn; vandaar dat '-p' niet kan worden gebruikt als een afkorting voor 'etherhost {local-hw-addr} of ether broadcast'.
  • -q: Snelle (stille) uitvoer. Druk minder protocolinformatie af, zodat de uitvoerlijnen korter zijn.
  • -R: Veronderstel dat ESP / AH-pakketten gebaseerd zijn op oude specificaties: RFC1825 tot RFC1829. Indien opgegeven, tcpdump zal replay prevention-veld niet afdrukken. Aangezien er geen protocolversie is in de ESP / AH-specificatie, tcpdump kan de versie van het ESP / AH-protocol niet afleiden.
  • -r: Lees pakketten van het dossier (die is gemaakt met de optie -w). Standaard invoer wordt gebruikt als het dossier is "- ''.
  • -S: Druk absolute, in plaats van relatieve, TCP-volgnummers af.
  • -s: Snarf snaplen bytes met gegevens van elk pakket in plaats van de standaardwaarde van 68; met SunOS's NIT is het minimum eigenlijk 96. Achtenzestig bytes is voldoende voor IP, ICMP, TCP en UDP, maar kan protocolinformatie afsnijden van naamserver en NFS-pakketten (zie hieronder). Pakketten die zijn ingekort vanwege een beperkte momentopname worden in de uitvoer aangegeven met "| proto '', waar proto is de naam van het protocolniveau waarop de truncatie is opgetreden. Merk op dat het nemen van grotere snapshots beide de hoeveelheid tijd verhoogt die nodig is om pakketten te verwerken en in feite de hoeveelheid pakketbuffering vermindert. Dit kan ertoe leiden dat pakketten verloren gaan. Je zou moeten beperken snaplen tot het kleinste aantal dat de protocolinformatie verzamelt waarin u geïnteresseerd bent. Instelling snaplen tot 0 betekent gebruik de vereiste lengte om hele pakketten te vangen.
  • -T: Forceer pakketten geselecteerd door " uitdrukking "om het opgegeven te interpreteren type . Momenteel bekende typen zijncnfp (Cisco NetFlow-protocol),rpc (Op afstand gemaakt telefoongesperk),rtp (Real-Time Applications-protocol),RTCP (Real-Time Applications-controleprotocol),snmp (Simple Network Management Protocol),vat (Visual Audio Tool), enwb (verdeeld White Board).
  • -t: doe niet druk een tijdstempel af op elke stortlinie.
  • -T: Druk een niet-opgemaakte tijdstempel af op elke stortlinie.
  • -U: Laat root-privileges vervallen en wijzigt gebruikers-ID in gebruiker en groeps-ID voor de primaire groep van gebruiker .
  • Notitie: Red Hat Linux verlaagt de rechten automatisch naar gebruiker "pcap" als er niets anders gespecificeerd is.
  • -ttt: Druk een delta (in microseconden) af tussen de huidige en de vorige regel op elke stortlinie.
  • -tttt: Druk een tijdstempel af in de standaardindeling en ga verder met de datum op elke stortlinie.
  • -u: Afdrukken van niet-gecodeerde NFS-handles.
  • -v: (Iets meer) uitgebreide uitvoer. De tijd om te leven, identificatie, totale lengte en opties in een IP-pakket worden bijvoorbeeld afgedrukt. Maakt ook aanvullende controle van pakketintegriteit mogelijk, zoals het verifiëren van de IP- en ICMP-headercontrolesom.
  • -vv: Nog meer uitgebreide uitvoer. Er worden bijvoorbeeld extra velden afgedrukt vanuit NFS-antwoordpakketten en SMB-pakketten worden volledig gedecodeerd.
  • -vvv: Nog meer uitgebreide uitvoer. Bijvoorbeeld telnetSBSE opties worden volledig afgedrukt. Met -X telnet-opties worden ook in hexuitdraai afgedrukt.
  • -w: Schrijf de onbewerkte pakketten naar het dossier in plaats van ze te ontleden en af ​​te drukken. Ze kunnen later worden afgedrukt met de optie -r. Standaarduitvoer wordt gebruikt als het dossier is "- ''.
  • -X: Print elk pakket (minus de kop van het koppelingsniveau) in hex. De kleinste van het hele pakket of snaplen bytes worden afgedrukt. Merk op dat dit het volledige koppelingslaagpakket is, dus voor koppelingslagen die blok zijn (bijv. Ethernet), zullen de opvullende bytes ook worden afgedrukt wanneer het hogere laagpakket korter is dan de vereiste opvulling.
  • -X: Print ascii ook bij het afdrukken van hex. Dus als-X is ook ingesteld, het pakket wordt afgedrukt in hex / ascii. Dit is erg handig voor het analyseren van nieuwe protocollen. Zelfs indien-X is niet ook ingesteld, sommige delen van sommige pakketten kunnen worden afgedrukt in hex / ascii.
  • uitdrukking : Selecteert welke pakketten worden gedumpt. Als Nee uitdrukking wordt gegeven, alle pakketten op het net worden gedumpt. Anders alleen pakketten waarvoor uitdrukking is 'waar' wordt gedumpt. De uitdrukking bestaat uit een of meer primitieven. Primitieven bestaan ​​meestal uit een ID kaart (naam of nummer) voorafgegaan door een of meer kwalificatietoernooien. Er zijn drie verschillende soorten kwalificatie:
  • type : Qualifiers zeggen wat voor soort ding de id-naam of het nummer verwijst naar. Mogelijke typen zijngastheer, netto-, enhaven- bijvoorbeeld 'host foo', 'net 128.3', 'port 20'. Als er geen typekwalificatie is,gastheer wordt verondersteld.
  • dir : Kwalificeringen specificeren een bepaalde overdrachtsrichting naar en / of van ID kaart . Mogelijke richtingen zijnsrc, dst, src of dst ensrc en dst (bijvoorbeeld 'src foo', 'dst net 128.3', 'src of dst port ftp-data'). Als er geen dir-kwalificatie is,src of dst wordt verondersteld. Voor 'nul' linklagen (d.w.z. point-to-point-protocollen zoals slip) de inbound en uitgaande kwalificaties kunnen worden gebruikt om een ​​gewenste richting op te geven.
  • proto : Qualifiers beperken de overeenkomst tot een bepaald protocol. Mogelijke proto's zijn: ether, FDDI, tr, ik p, IP6, arp, rarp, DECnet, tcp, enudp- bijvoorbeeld 'ether src foo', 'arp net 128.3', 'tcp port 21'. Als er geen proto-kwalificatie is, worden alle protocollen gebruikt die consistent zijn met het type. Bijvoorbeeld: 'src foo' betekent '(ip of arp of rarp) src foo' (behalve de laatste is geen juridische syntaxis), 'nettabalk' betekent '(ip of arp of rarp) nettabalk' en 'poort 53' betekent '(tcp of udp) poort 53'.
    • 'fddi' is eigenlijk een alias voor 'ether'; de parser behandelt ze identiek in de betekenis van "het datalinkniveau dat wordt gebruikt op de opgegeven netwerkinterface." FDDI-headers bevatten Ethernet-achtige bron- en bestemmingsadressen en bevatten vaak Ethernet-achtige pakkettypen, zodat u op deze FDDI-velden kunt filteren zoals met de analoge Ethernet-velden.FDDI-headers bevatten ook andere velden, maar u kunt ze niet expliciet een naam geven in een filterexpressie.
    • Evenzo is 'tr' een alias voor 'ether'; de uitspraken van de vorige paragraaf over FDDI-headers zijn ook van toepassing op Token Ring-headers.

Naast het bovenstaande zijn er enkele speciale "primitieve" sleutelwoorden die het patroon niet volgen:poort, uitzending, minder, groter, en rekenkundig uitdrukkingen. Al deze worden hieronder beschreven.

Complexere filteruitdrukkingen worden opgebouwd door de woorden te gebruikenen, of, enniet om primitieven te combineren, bijvoorbeeld "host foo en geen poort ftp en geen poort ftp-data". Om typewerk te voorkomen, kunnen identieke kwalificatielijsten worden weggelaten (bijv. "Tcp dst port ftp of ftp-data or domain" is exact hetzelfde als "tcp dst port ftp of tcp dst port ftp-data of tcp dst port domain".)

Dit zijn de primitieven die zijn toegestaan ​​met het tcpdump-commando:

  • dst host gastheer
    • Waar als het IPv4 / v6-bestemmingsveld van het pakket dat is gastheer , wat een adres of een naam kan zijn.
  • src host gastheer
    • Waar als het IPv4 / v6 bronveld van het pakket dat is gastheer .
  • gastheer gastheer
    • Waar als de IPv4 / v6-bron of de bestemming van het pakket dat is gastheer . Elk van de bovenstaande hostuitdrukkingen kan met de sleutelwoorden worden toegevoegd,ik p, arp, rarpofIP6, als in ip host gastheer (wat gelijk is aan ether proto ik p en gastheer gastheer).
    • Als gastheer is een naam met meerdere IP-adressen, elk adres zal worden gecontroleerd op een overeenkomst.
  • ether dst ehost
    • Waar als het Ethernet-bestemmingsadres dat is ehost . Ehost kan een naam van / etc / ethers of een nummer zijn (zie ethers (3N) voor numeriek formaat).
  • ether src ehost
    • Waar als het Ethernet-bronadres is ehost .
  • ether gastheer ehost
    • Waar als de Ethernet-bron of het bestemmingsadres dat is ehost .
  • poort gastheer
    • Waar als het pakket werd gebruikt gastheer als een gateway (d.w.z. de Ethernet-bron of het bestemmingsadres was gastheer maar noch de IP-bron noch de IP-bestemming was gastheer ).
    • Gastheer moet een naam zijn en moet worden gevonden door zowel de hostnaam-naar-IP-adresoplossingsmechanismen van de machine (hostnaambestand, DNS, NIS, enz.) als door het host-naam-naar-Ethernetadresresolutiemechanisme van de machine (/ etc / ethers, etc.).
    • Een equivalente expressie is ether gastheer ehost en nu hosten gastheer , die voor namen of nummers kan worden gebruikt host / ehost .) Deze syntaxis werkt op dit moment niet in een voor IPv6 geschikte configuratie.
  • dst net netto-
    • Waar als het IPv4 / v6-bestemmingsadres van het pakket een netwerknummer heeft van netto- . Netto kan een naam van / etc / networks of een netwerknummer zijn (zie netwerken (4) voor details).
  • src net netto-
    • Waar als het IPv4 / v6-bronadres van het pakket een netwerknummer heeft van netto- .
  • netto- netto-
    • Waar als de IPv4 / v6-bron of het bestemmingsadres van het pakket een netwerknummer heeft van netto- .
  • netto- netto- masker netmask
    • Waar als het IP-adres overeenkomt netto- met de specifieke netmask . Mag worden gekwalificeerd metsrc ofdst. Merk op dat deze syntaxis niet geldig is voor IPv6 netto- .
  • netto- netto- / len
    • Waar als het IPv4 / v6-adres overeenkomt netto- met een netmasker len stukjes breed. Mag worden gekwalificeerd metsrc ofdst.
  • dst poort haven
    • Waar als het pakket ip / tcp, ip / udp, ip6 / tcp of ip6 / udp is en een waarde voor de bestemmingspoort heeft van haven . De haven kan een nummer zijn of een naam die wordt gebruikt in / etc / services (zie tcp (4P) en udp (4P)). Als een naam wordt gebruikt, worden zowel het poortnummer als het protocol gecontroleerd. Als een nummer of dubbelzinnige naam wordt gebruikt, wordt alleen het poortnummer gecontroleerd (bijv.dst poort 513 zal zowel tcp / login-verkeer als udp / who-verkeer afdrukken, enpoort domein zal zowel tcp / domein- als udp / domeinverkeer afdrukken).
  • src poort haven
    • Waar als het pakket een bronpoortwaarde heeft van haven .
  • haven haven
    • Waar als de bron of de bestemmingspoort van het pakket is haven . Elk van de bovenstaande poortuitdrukkingen kan met de sleutelwoorden worden toegevoegd,tcp ofudp, als in tcp src poort haven , die alleen overeenkomt met tcp-pakketten waarvan de bronpoort is haven .
  • minder lengte
    • Waar als het pakket een lengte heeft kleiner dan of gelijk aan lengte . Dit komt overeen met len <= Lengte .
  • groter lengte
    • Waar als het pakket een lengte groter dan of gelijk aan heeft lengte . Dit komt overeen met len> = Lengte .
  • ip proto protocol
    • Waar als het pakket een IP-pakket is (zie ik p (4P)) van het protocoltype protocol . Protocol kan een nummer of een van de namen zijn icmp , icmp6 , IGMP , IGRP , pim , Ah , esp , VRRP , udp of tcp . Merk op dat de identificaties tcp , udp , en icmp zijn ook sleutelwoorden en moeten worden geëscaped via backslash (), wat is in de C-schil. Merk op dat deze primitieve de keten van de protocolheader niet achtervolgt.
  • ip6 proto protocol
    • Waar als het pakket een IPv6-pakket van protocoltype is protocol . Merk op dat deze primitieve de keten van de protocolheader niet achtervolgt.
  • ip6 protochain protocol
    • Waar als het pakket een IPv6-pakket is en een protocolheader met type bevat protocol in de protocolheaderingsketen. Bijvoorbeeld, ipv6 protochain 6 komt overeen met elk IPv6-pakket met de TCP-protocolheader in de protocolheaderingsketen. Het pakket kan bijvoorbeeld een authentificatieheader, routeringsheader of hop-by-hop optieheader bevatten tussen de IPv6-header en de TCP-header. De BPF-code die wordt geëmitteerd door deze primitieve is complex en kan niet worden geoptimaliseerd door BPF optimizer-code in tcpdump , dus dit kan enigszins langzaam zijn.
  • ip protochain protocol
    • Gelijk aanip6 protochain protocol , maar dit is voor IPv4.
  • ether uitzending
    • Waar als het pakket een Ethernet broadcast-pakket is. De ether trefwoord is optioneel.
  • ip uitzending
    • Waar als het pakket een IP-uitzendingspakket is. Het controleert of de conventies voor alle nullen en iedereen omroep zijn en zoekt het lokale subnetmasker op.
  • ether multicast
    • Waar als het pakket een Ethernet multicast-pakket is. De ether trefwoord is optioneel. Dit is een afkorting voor 'ether 0 & 1! = 0'.
  • ip multicast
    • Waar als het pakket een IP multicast-pakket is.
  • ip6 multicast
    • Waar als het pakket een IPv6-multicast-pakket is.
  • ether proto protocol
    • Waar als het pakket van het ether-type is protocol . Protocol kan een nummer of een van de namen zijn ik p , IP6 , arp , rarp , een praatje , aarp , DECnet , SCA , LAT , mopdl , moprc , iso , stp , ipx of netbeui . Merk op dat deze ID's ook trefwoorden zijn en via backslash () moeten worden geëscaped.
    • In het geval van FDDI (bijv.fddi protocol arp') en Token Ring (bijv.tr protocol arp'), voor de meeste van die protocollen, is de protocolidentificatie afkomstig van de 802.2 Logical Link Control (LLC) -header, die meestal als een laag boven op de FDDI- of Token Ring-header staat.
    • Bij het filteren van de meeste protocol-ID's op FDDI of Token Ring, tcpdump controleert alleen het protocol-ID-veld van een LLC-header in de zogenaamde SNAP-indeling met een organisatie-eenheididentificatie (OUI) van 0x000000, voor ingekapseld Ethernet; het controleert niet of het pakket in SNAP-indeling is met een OUI van 0x000000.
    • De uitzonderingen zijn iso , waarvoor het de DSAP (Destination Service Access Point) en SSAP (Source Service Access Point) -velden van de LLC-header controleert, stp en netbeui , waar het de DSAP van de LLC-header controleert, en een praatje , waar het controleert op een SNAP-formaat pakket met een OUI van 0x080007 en de Appletalk-etype.
    • In het geval van Ethernet, tcpdump controleert het veld Ethernet-type voor de meeste van die protocollen; de uitzonderingen zijn iso , sap , en netbeui , waarvoor wordt gecontroleerd op een 802.3-frame en vervolgens de LLC-kop wordt gecontroleerd zoals voor FDDI en Token Ring; een praatje , waarbij het zowel voor de Appletalk-etype in een Ethernet-frame als voor een SNAP-formaat-pakket als voor FDDI en Token Ring controleert; aarp , waar het controleert op de Appletalk ARP-etype in een Ethernet-frame of een 802.2 SNAP-frame met een OUI van 0x000000; en ipx , waar het controleert op het IPX-etype in een Ethernet-frame, de IPX DSAP in de LLC-header, de 802.3 zonder LLC-headerinkapseling van IPX en de IPX-etype in een SNAP-frame.
  • decnet src gastheer
    • Waar als het DECNET-bronadres is gastheer , wat een adres kan zijn van het formulier "10.123" of een DECNET-hostnaam. Ondersteuning voor DECNET-hostnaam is alleen beschikbaar op Ultrix-systemen die zijn geconfigureerd om DECNET uit te voeren.
  • decnet dst gastheer
    • Waar als het DECNET-bestemmingsadres is gastheer .
  • decnet host gastheer
    • Waar als de DECNET-bron of het bestemmingsadres dat is gastheer .
  • ik p, IP6, arp, rarp, een praatje, aarp, DECnet, iso, stp, ipx, netbeui
    • Afkortingen voor ether proto p waar p is een van de bovenstaande protocollen.
  • LAT, moprc, mopdl
    • Afkortingen voor ether proto p waar p is een van de bovenstaande protocollen. Let daar op tcpdump weet momenteel niet hoe deze protocollen te ontleden.
  • vlan Vlan_id
    • Waar als het pakket een IEEE 802.1Q VLAN-pakket is. Als Vlan_id is opgegeven, alleen waar als het pakket de opgegeven bevat vlan_id . Merk op dat de eerstevlan zoekwoord aangetroffen in uitdrukking verandert de decodeerverschuivingen voor de rest van uitdrukking in de veronderstelling dat het pakket een VLAN-pakket is.
  • tcp, udp, icmp
    • Afkortingen voor ip proto p of ip6 proto p waar p is een van de bovenstaande protocollen.
  • iso proto protocol
    • Waar als het pakket een OSI-pakket van protocoltype is protocol . Protocol kan een nummer of een van de namen zijn CLNP , ESIS of isis .
  • CLNP, ESIS, isis
    • Afkortingen voor iso proto p waar p is een van de bovenstaande protocollen. Let daar op tcpdump doet een onvolledige taak van het ontleden van deze protocollen.
  • expr relop expr
    • Waar als de relatie geldt, waar relop is een van>, <,> =, <=, =,! =, en expr is een rekenkundige uitdrukking samengesteld uit gehele constanten (uitgedrukt in standaard C-syntaxis), de normale binaire operatoren +, -, *, /, &, |, een lengte-operator en speciale pakketdatatoegang. Gebruik de volgende syntaxis om toegang te krijgen tot gegevens in het pakket: proto uitdr: maat .

Proto is een vanether, FDDI, tr, ppp, uitglijden, link, ik p, arp, rarp, tcp, udp, icmpof IP6en geeft de protocollaag voor de indexbewerking aan (ether, FDDI, tr, ppp, uitglijden, enlink alle verwijzen naar de linklaag). Let daar op tcp, udp en andere protocoltypen van de bovenste laag zijn alleen van toepassing op IPv4, niet op IPv6 (dit wordt in de toekomst opgelost). De byte-offset ten opzichte van de aangegeven protocollaag wordt gegeven door expr . Grootte is optioneel en geeft het aantal bytes in het interessegebied aan; het kan één, twee of vier zijn en standaard een. De lengte-operator, aangegeven door het sleutelwoordlen, geeft de lengte van het pakket.

Bijvoorbeeld, 'ether 0 & 1! = 0'vangt alle multicast-verkeer op. De uitdrukking 'ip 0 & 0xf! = 5'vangt alle IP-pakketten met opties. De uitdrukking 'ip 6: 2 & 0x1fff = 0'vangt alleen niet-gefragmenteerde datagrammen en frag nul van gefragmenteerde datagrammen. Deze controle wordt impliciet toegepast op detcp enudp index operaties. Bijvoorbeeld, tcp 0 betekent altijd de eerste byte van TCP hoofd en betekent nooit de eerste byte van een tussenliggend fragment.

Sommige offsets en veldwaarden kunnen worden uitgedrukt als namen in plaats van als numerieke waarden. De volgende veldcompensaties van de protocolkop zijn beschikbaar: icmptype (ICMP-type veld),icmpcode (ICMP-codeveld) entcpflags (Veld TCP-vlaggen).

De volgende veldwaarden van het ICMP-type zijn beschikbaar:icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-redirect, icmp-echo, icmp-routeradvert, icmp-routersolicit, icmp-timxceed, icmp-paramprob, icmp-tstamp, icmp-tstampreply, icmp-IREQ, icmp-ireqreply, icmp-maskreq, icmp-maskreply.

De volgende veldwaarden voor TCP-vlaggen zijn beschikbaar:tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-push, tcp-ack, tcp-urg.

Primitieven kunnen worden gecombineerd met behulp van een van de volgende:

  • Een groep met haakjes van primitieven en operatoren (haakjes zijn speciaal voor de Shell en moeten worden ontsnapt)
  • Ontkenning ('!'of `niet')
  • Concatenatie ('&&'of'en')
  • Afwisseling ('||'of'of')

Ontkenning heeft de hoogste prioriteit. Afwisseling en aaneenschakeling hebben dezelfde prioriteit en associëren van links naar rechts. Merk dat expliciet open tokens, niet juxtapositie, zijn vereist voor aaneenschakeling.

Als een identifier zonder trefwoord wordt gegeven, wordt het meest recente sleutelwoord verondersteld. Bijvoorbeeld, geen host vs en aas is kort voor geen host vs en host aas. Dit moet echter niet worden verward met niet (host vs of aas).

Expression-argumenten kunnen worden doorgegeven aan tcpdump als een enkel argument of als meerdere argumenten, wat het handigst is. Over het algemeen is het, als de uitdrukking Shell-metatekens bevat, gemakkelijker om het als een enkel, aangehaald argument door te geven. Meerdere argumenten worden samengevoegd met spaties voordat ze worden geparseerd.

Tcpdump voorbeelden

tcpdump host sundown

Het bovenstaande tcpdump-commando wordt gebruikt om alle pakketten af ​​te drukken die aankomen of vertrekken zonsondergang.

tcpdump host helios and (hot of ace )

Dit tcpdump-voorbeeld print verkeer tussen helios en ook heet of aas.

tcpdump ip host aas en niet helios

U kunt deze opdracht tcpdump gebruiken om alle IP-pakketten tussen te printen aas en elke host behalve helios.

tcpdump net ucb-ether

In het bovenstaande voorbeeld print tcpdump alle verkeer tussen lokale hosts en hosts op Berkeley.

tcpdump 'gateway snup en (poort ftp of ftp-data)'

Dit volgende voorbeeld van de opdracht tcpdump wordt gebruikt om al het FTP-verkeer via de internetgateway af te drukken snup . Merk op dat de uitdrukking wordt aangehaald om te voorkomen dat de shell de haakjes verkeerd interpreteert.

tcpdump ip en niet net localnet

In het bovenstaande tcpdump-voorbeeld drukt het commando verkeer af dat niet afkomstig is van noch bestemd is voor lokale hosts.

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

Voor het bovenstaande voorbeeld van tcpdump wordt de opdracht gebruikt voor het afdrukken van de start- en eindpakketten (de SYN- en FIN-pakketten) van elk TCP-gesprek waarbij een niet-lokale host betrokken is.

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

Met de opdracht hierboven worden IP-pakketten afgedrukt die langer zijn dan 576 bytes die via de gateway zijn verzonden snup.

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

Met de opdracht tcpdump die hierboven wordt weergegeven, worden IP-broadcast- of multicast-pakketten afgedrukt niet verzonden via Ethernet-uitzending of multicast.

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

In dit laatste voorbeeld van tcpdump drukt de opdracht alle ICMP-pakketten af ​​die geen echo-aanvragen of antwoorden zijn (d.w.z. geen pakketten pingen).

Tcpdump uitvoerformaat

De uitvoer van tcpdump is protocolafhankelijk. Hieronder volgt een korte beschrijving en voorbeelden van de meeste indelingen.

Linkniveau-headers. Als de optie '-e' wordt gegeven, wordt de kop van het koppelingsniveau afgedrukt. Op Ethernet-netwerken worden de bron- en doeladressen, het protocol en de pakketlengte afgedrukt.

Op FDDI-netwerken zorgt de '-E'-optie ervoor tcpdump om het veld 'framebesturing', de bron- en doeladressen en de pakketlengte af te drukken. (Het veld 'frame control' bepaalt de interpretatie van de rest van het pakket Normale pakketten (zoals die met IP-datagrammen) zijn 'async'-pakketten, met een prioriteitswaarde tussen 0 en 7: bijvoorbeeld `async4'. Van dergelijke pakketten wordt aangenomen dat ze een 802.2 Logical Link Control (LLC) -pakket bevatten; de LLC-header wordt afgedrukt als dit zo is niet een ISO-datagram of een zogenaamd SNAP-pakket.

Op Token Ring-netwerken veroorzaakt de optie '-E' tcpdump om de velden 'toegangscontrole' en 'kaderbesturing', de bron- en doeladressen en de pakketlengte af te drukken. Net als op FDDI-netwerken, wordt aangenomen dat pakketten een LLC-pakket bevatten. Ongeacht of de optie '-e' is opgegeven of niet, wordt de bronrouteringsinformatie afgedrukt voor door de bron gerouteerde pakketten.

(NB: de volgende beschrijving veronderstelt dat bekend is met het SLIP-compressiealgoritme dat wordt beschreven in RFC-1144.)

Op SLIP-koppelingen worden een richtingaanwijzer ("I" voor inkomende, "O" voor uitslag), pakkettype en compressie-informatie afgedrukt. Het pakkettype wordt eerst afgedrukt. De drie soorten zijn ik p , UTCP , en ctcp . Er wordt geen verdere koppelingsinformatie afgedrukt ik p pakketten. Voor TCP-pakketten wordt de verbindingsidentificatie afgedrukt volgens het type. Als het pakket is gecomprimeerd, wordt de gecodeerde header ervan afgedrukt. De speciale gevallen worden afgedrukt als* S + n en* SA + n , waar n is de hoeveelheid waarmee het volgnummer (of volgnummer en ack) is gewijzigd. Als dit geen speciaal geval is, worden nul of meer wijzigingen afgedrukt. Een verandering wordt aangegeven door U (urgente aanwijzer), W (venster), A (ack), S (volgnummer) en I (pakket-ID), gevolgd door een delta (+ n of -n), of een nieuwe waarde (= n). Ten slotte wordt de hoeveelheid gegevens in het pakket en de gecomprimeerde headerlengte afgedrukt.

De volgende regel toont bijvoorbeeld een uitgaand gecomprimeerd TCP-pakket met een impliciete verbindingsidentificatie; de ack is veranderd met 6, het volgnummer met 49 en de pakket-ID met 6; er zijn 3 bytes aan data en 6 bytes aan gecomprimeerde header:

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

Arp / rarp-pakketten. Arp / rarp-uitvoer toont het type verzoek en zijn argumenten. Het formaat is bedoeld als vanzelfsprekend. Hier is een kort voorbeeld genomen vanaf het begin van een 'rlogin' van host rtsg te hosten CSAM :

arp who-has csam vertel rtsgarp antwoord csam is-at CSAM

De eerste regel zegt dat rtsg een arp-pakket heeft verzonden met het verzoek om het Ethernet-adres van internethost-csam. Csam antwoordt met zijn Ethernet-adres (in dit voorbeeld zijn Ethernet-adressen in hoofdletters en internetadressen in kleine letters).

Dit zou minder overbodig lijken als we het hadden gedaan tcpdump -n :

arp who-has 128.3.254.6 tell 128.3.254.68arp antwoord 128.3.254.6 is-om 02: 07: 01: 00: 01: c4

Als we het hadden gedaan tcpdump -e , het feit dat het eerste pakket wordt uitgezonden en het tweede punt-naar-punt, zou zichtbaar zijn:

RTSG-uitzending 0806 64: arp who-has csam tell rtsgCSAM RTSG 0806 64: arp antwoord csam is-at CSAM

Voor het eerste pakket zegt dit dat het Ethernet-bronadres RTSG is, de bestemming het Ethernet-uitzendadres is, het typeveld hex 0806 bevat (type ETHER_ARP) en de totale lengte 64 bytes was.

TCP-pakketten (N.B.:De volgende beschrijving veronderstelt dat bekend is met het TCP-protocol dat wordt beschreven in RFC-793. Als u niet bekend bent met het protocol, zullen deze beschrijving noch tcpdump van groot nut voor u zijn) . Het algemene formaat van een tcp-protocolregel is:

src> dst: flags data-seqno ack window urgent options

src en dst zijn de bron- en doel-IP-adressen en -poorten. vlaggen zijn een combinatie van S (SYN), F (FIN), P (PUSH) of R (RST) of een enkele '.' (geen vlaggen). Data-SEQNO beschrijft het gedeelte van de sequentieruimte dat wordt bestreken door de gegevens in dit pakket (zie het onderstaande voorbeeld). Ack is het volgnummer van de volgende gegevens verwacht de andere richting op deze verbinding. Venster is het aantal bytes van ontvangstbufferruimte beschikbaar in de andere richting op deze verbinding. urg geeft aan dat er 'urgente' gegevens in het pakket zijn. opties zijn tcp-opties tussen punthaken (bijv. ).

Src, dst, en vlaggen zijn altijd aanwezig. De andere velden zijn afhankelijk van de inhoud van de tcp-protocolheader van het pakket en worden alleen uitgevoerd indien van toepassing.

Hier is het openingsgedeelte van een rlogin van host rtsg te hosten CSAM .

rtsg.1023> csam.login: S 768512: 768512 (0) win 4096 csam.login> rtsg.1023: S 947648: 947648 (0) ack 768513 win 4096 rtsg.1023> csam.login:. ack 1 wint 4096rtsg.1023> csam.login: P 1: 2 (1) ack 1 win 4096csam.login> rtsg.1023:. ack 2 wint 4096rtsg.1023> csam.login: P 2:21 (19) ack 1 win 4096csam.login> rtsg.1023: P 1: 2 (1) ack 21 win 4077csam.login> rtsg.1023: P 2: 3 (1) ack 21 win 4077 urg 1csam.login> rtsg.1023: P 3: 4 (1) ack 21 win 4077 urg 1

De eerste regel zegt dat tcp-poort 1023 op rtsg een pakket naar poort heeft verzonden Log in op csam. DeS geeft aan dat de SYN vlag was ingesteld. Het pakketvolgordenummer was 768512 en het bevatte geen gegevens. (De notatie is 'first: last (nbytes)', wat 'volgnummers' betekent eerste tot maar niet inbegrepen laatste welke is nbytes bytes van gebruikersgegevens '.) Er was geen back-up met piggyback, het beschikbare ontvangstvenster was 4096 bytes en er was een max-segment-formaat optie met een mss van 1024 bytes.

Csam antwoordt met een soortgelijk pakket, behalve dat het een piggybacked ack voor rtsg's SYN bevat. Rtsg verslaat dan de SYN van csam. De '.' betekent dat er geen vlaggen zijn ingesteld. Het pakket bevatte geen gegevens, dus er is geen gegevensreeksnummer. Merk op dat het ack-volgnummer een klein geheel getal (1) is. De eerste keer tcpdump ziet een tcp 'gesprek', het drukt het volgnummer van het pakket af. Op volgende pakketten van het gesprek wordt het verschil tussen het volgnummer van het huidige pakket en dit initiële volgnummer afgedrukt. Dit betekent dat volgnummers na de eerste kunnen worden geïnterpreteerd als relatieve byteposities in de gegevensstroom van de conversatie (waarbij de eerste gegevensbyte elke richting '1' is). '-S' overschrijft deze functie, waardoor de originele sequentienummers worden uitgevoerd.

Op de zesde regel verzendt rtsg csam 19 bytes aan gegevens (bytes 2 tot 20 in de rtsg -> csam-kant van het gesprek). De PUSH-vlag wordt ingesteld in het pakket. Op de zevende regel zegt csam dat het ontvangen gegevens zijn verzonden door rtsg tot maar niet inclusief byte 21. Het merendeel van deze gegevens zit blijkbaar in de socketbuffer, omdat het ontvangstvenster van csam 19 bytes kleiner heeft gemaakt. Csam stuurt ook één byte aan gegevens naar rtsg in dit pakket. Op de achtste en negende regel stuurt csam twee bytes van dringende, gepushte gegevens naar rtsg.

Als de momentopname klein genoeg was tcpdump heeft niet de volledige TCP-header vastgelegd, het interpreteert zoveel mogelijk van de header als mogelijk en rapporteert vervolgens "| tcp '' om aan te geven dat de rest niet kan worden geïnterpreteerd. Als de kop een valse optie bevat (een met een lengte die te klein is of achter het einde van de kop), tcpdump meldt het als " slecht kiezen '' en interpreteert geen verdere opties (omdat het onmogelijk is om te vertellen waar ze beginnen). Als de headerlengte aangeeft dat er opties aanwezig zijn, maar de IP-datagramlengte niet lang genoeg is om de opties daadwerkelijk daar te laten zijn, tcpdump meldt het als " slechte hdr lengte ''.

Leg pakketten vast met bepaalde vlagcombinaties. Er zijn acht bits in de sectie besturingsbits van de TCP-header:

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

Laten we aannemen dat we pakketten willen bekijken die worden gebruikt bij het opzetten van een TCP-verbinding. Bedenk dat TCP een drieweg-handshake-protocol gebruikt wanneer het een nieuwe verbinding initialiseert; de aansluitvolgorde met betrekking tot de TCP-besturingsbits is:

  1. Beller verzendt SYN.
  2. Ontvanger antwoordt met SYN, ACK.
  3. Beller zendt ACK.

Nu zijn we geïnteresseerd in het vastleggen van pakketten die alleen de SYN-bitset hebben (stap 1). Merk op dat we geen pakketten van stap 2 (SYN-ACK) willen, slechts een eenvoudige eerste SYN. Wat we nodig hebben is een correcte filterexpressie voor tcpdump .

Denk aan de structuur van een TCP-header zonder opties:

0 15 31-----------------------------------------------------------------| bronpoort | bestemmingshaven |-----------------------------------------------------------------| volgnummer |-----------------------------------------------------------------| bevestigingsnummer |-----------------------------------------------------------------| HL | rsvd | C | E | U | A | P | R | S | F | venster grootte |-----------------------------------------------------------------| TCP-checksum | urgente aanwijzer |-----------------------------------------------------------------

Een TCP-header bevat gewoonlijk 20 octetten gegevens, tenzij er opties aanwezig zijn. De eerste regel van de grafiek bevat octetten 0-3, de tweede regel toont octetten 4-7, enz.

Beginnend met tellen met 0, zijn de relevante TCP-besturingsbits opgenomen in octet 13:

0 7| 15| 23| 31----------------|---------------|---------------|----------------| HL | rsvd | C | E | U | A | P | R | S | F | venster grootte |----------------|---------------|---------------|----------------| | 13e octet | | |

Laten we Octet No. van naderbij bekijken. 13:

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

Dit zijn de TCP-besturingsbits waarin we geïnteresseerd zijn. We hebben de bits in dit octet genummerd van 0 tot 7, van rechts naar links, dus het PSH-bit is bit nummer 3, terwijl het URG-bit nummer 5 is.

Bedenk dat we pakketten willen vastleggen met alleen de SYN-set. Laten we eens kijken wat er met octet 13 gebeurt als een TCP-datagram arriveert met de SYN-bitreeks in de header:

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

Als we naar de sectie besturingsbits kijken, zien we dat alleen bitnummer 1 (SYN) is ingesteld.

Ervan uitgaande dat octet nummer 13 een 8-bit geheel getal is in de volgorde van de netwerkbyte, is de binaire waarde van dit octet:

00000010

De decimale weergave is:

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

We zijn bijna klaar, want nu weten we dat als alleen SYN is ingesteld, de waarde van het 13e octet in de TCP-header, wanneer geïnterpreteerd als een 8-bits niet-ondertekend geheel getal in de netwerkbytevolgorde, exact 2 moet zijn.

Deze relatie kan worden uitgedrukt als

tcp 13 == 2

We kunnen deze expressie gebruiken als filter voor tcpdump om pakketten te bekijken die alleen SYN hebben ingesteld:

tcpdump -i xl0 tcp 13 == 2

De uitdrukking zegt "laat het 13e octet van een TCP-datagram de decimale waarde 2 hebben", wat precies is wat we willen.

Laten we nu aannemen dat we SYN-pakketten moeten vangen, maar het maakt ons niet uit of ACK of een ander TCP-besturingsbit tegelijkertijd is ingesteld. Kijk naar wat er met octet 13 gebeurt wanneer een TCP-datagram met SYN-ACK-set arriveert:

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

Bits 1 en 4 zijn nu ingesteld in het dertiende octet. De binaire waarde van octet 13 is:

00010010

wat zich vertaalt naar decimaal:

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

We kunnen 'tcp 13 == 18' niet alleen gebruiken in de tcpdump filterexpressie, omdat alleen die pakketten worden geselecteerd waarvoor SYN-ACK is ingesteld, maar niet die waarvoor alleen SYN is ingesteld. Onthoud dat het ons niet uitmaakt of ACK of een ander besturingsbit is ingesteld zolang SYN is ingesteld.

Om ons doel te bereiken, moeten we logisch gezien EN de binaire waarde van octet 13 gebruiken met een andere waarde om het SYN-bit te behouden. We weten dat we SYN in elk geval willen instellen, dus logisch gezien EN de waarde in het dertiende octet met de binaire waarde van een SYN:

00010010 SYN-ACK 00000010 SYN EN 00000010 (we willen SYN) EN 00000010 (we willen SYN) -------- -------- = 00000010 = 00000010

We zien dat deze AND-bewerking hetzelfde resultaat oplevert ongeacht of ACK of een ander TCP-besturingsbit is ingesteld. De decimale weergave van de EN-waarde en het resultaat van deze bewerking is 2 (binair 00000010), dus we weten dat voor pakketten met SYN set de volgende relatie waar moet zijn:

((waarde van octet 13) AND (2)) == (2)

Dit wijst ons naar de tcpdump filter uitdrukking

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

Merk op dat u enkele aanhalingstekens of een backslash in de uitdrukking moet gebruiken om het speciale teken AND ('&') uit de shell te verbergen.

UDP-pakketten. Het UDP-formaat wordt geïllustreerd door dit pakket:

actinide.who> broadcast.who: udp 84

Dit zegt die poort wie op host actinide stuurde een udp-datagram naar de poort wie op host uitzending , het internet-uitzendadres. Het pakket bevatte 84 bytes aan gebruikersgegevens.

Sommige UDP-services worden herkend (van het bron- of bestemmingspoortnummer) en de protocolinformatie van hoger niveau die wordt afgedrukt, met name DNS-serviceaanvragen (RFC-1034/1035) en Sun RPC-oproepen (RFC-1050) naar NFS.

UDP-naamserveraanvragen (N.B.:De volgende beschrijving veronderstelt dat bekend is met het Domain Service-protocol dat wordt beschreven in RFC-1035. Als u niet bekend bent met het protocol, heeft de volgende beschrijving weinig zin.)

Naamserveraanvragen zijn opgemaakt als:

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

Gastheer h2opolo vroeg de domeinserver helios voor een adresrecord (qtype = A) dat is gekoppeld aan de naam ucbvax.berkeley.edu. De query-ID was '3'. De '+' geeft de recursie gewenst vlag was ingesteld. De querylengte was 37 bytes, exclusief de UDP- en IP-protocolheaders. De querybewerking was de normale, vraag , dus het op-veld was weggelaten. Als het op iets anders was geweest, zou het zijn afgedrukt tussen de '3' en de '+'. Evenzo was de qclass de normale, C_IN en weggelaten. Elke andere qclass zou direct na de 'A' zijn afgedrukt.

Een paar anomalieën worden gecontroleerd en dit kan resulteren in extra velden tussen vierkante haken: als een query een antwoord, authority records of extra records sectie bevat, ancount , nscount of arcount worden afgedrukt als ' n een', ' n n ', of' n au 'waar n is de juiste telling. Als een van de reactiebits is ingesteld (AA, RA of rcode) of een van de `moet nul'-bits zijn, worden deze ingesteld in bytes twee en drie,` b2 & 3 = X 'is afgedrukt, waar X is de hexadecimale waarde van koptekstbytes twee en drie.

UDP-naamserverreacties. Reacties op naamserver worden opgemaakt als:

src> dst: id op rcode vlaggen a / n / au type klassegegevens (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)

In het eerste voorbeeld helios reageert op vraag id 3 van h2opolo met drie antwoordrecords, drie naamserverrecords en zeven extra records. Het eerste antwoordrecord is type A (adres) en de gegevens ervan zijn internetadres 128.32.137.3. De totale grootte van het antwoord was 273 bytes, exclusief UDP- en IP-headers. De op (Query) en responscode (NoError) zijn weggelaten, net als de klasse (C_IN) van de A-record.

In het tweede voorbeeld, helios antwoordt op vraag 2 met een antwoordcode van een niet-bestaand domein (NXDomain) zonder antwoorden, een naamserver en geen autorisatiegegevens. De '*' geeft aan dat de gezaghebbend antwoord bit was ingesteld. Omdat er geen antwoorden waren, werden er geen typen, klassen of gegevens afgedrukt.

Andere vlagtekens die kunnen verschijnen zijn '-' (recursie beschikbaar, RA, niet set) en '|' (afgekapt bericht, TC, set). Als de sectie 'vraag' niet precies één item bevat, ' n q 'wordt afgedrukt.

Houd er rekening mee dat verzoeken en reacties op naamserver meestal groot zijn en standaard zijn snaplen van 68 bytes maakt mogelijk niet voldoende van het pakket om af te drukken. Gebruik de-s vlag om de snaplen te vergroten als u serieus serververkeer serieus wilt onderzoeken. '-S 128'heeft goed voor me gewerkt.

SMB / CIFS-decodering. tcpdump bevat vrij uitgebreide SMB / CIFS / NBT-decodering voor gegevens over UDP / 137, UDP / 138 en TCP / 139. Sommige primitieve decodering van IPX- en NetBEUI SMB-gegevens is ook gedaan.

Standaard wordt een vrij minimale decode gedaan, met een veel gedetailleerdere decode als -v wordt gebruikt. Wees gewaarschuwd dat met -v een enkel SMB-pakket een pagina of meer in beslag kan nemen, dus alleen -v gebruiken als je echt alle bloederige details wilt.

Als u SMB-sessies met unicode-reeksen decodeert, wilt u mogelijk de omgevingsvariabele USE_UNICODE instellen op 1. Een patch voor het automatisch detecteren van unicode-reeksen is welkom.

Voor informatie over SMB-pakketformaten en wat alle velden betekenen, gaat u naar www.cifs.org of de map pub / samba / specs / op uw favoriete samba.org-mirrorsite. De SMB-patches zijn geschreven door Andrew Tridgell ([email protected]).

NFS-verzoeken en -antwoorden. Sun NFS-verzoeken (Network File System) en antwoorden worden afgedrukt als:

src.xid> dst.nfs: len op args src.nfs> dst.xid: antwoord stat Len op resultaten sushi.6709> wrl.nfs: 112 readlink fh 21,24 / 10.73165wrl.nfs> sushi.6709: antwoord ok 40 leeslink "../var"sushi.201b> wrl.nfs: 144 lookup fh 9,74 / 4096.6878 "xcolors"wrl.nfs> sushi.201b: antwoord ok 128 lookup fh 9,74 / 4134.3150

Op de eerste regel, host sushi verzendt een transactie met id 6709 naar WRL (houd er rekening mee dat het nummer dat volgt op de src-host een transactie-ID is, niet de bronpoort). Het verzoek was 112 bytes, exclusief de UDP- en IP-headers. De operatie was een readlink (lees symbolische link) op bestandshandvat ( fh ) 21,24 / 10.731657119. (Als iemand geluk heeft, zoals in dit geval, kan de bestandsingreep worden geïnterpreteerd als een hoofdnummer van een klein apparaatnummer, gevolgd door het inodenummer en het generatie nummer.) WRL antwoordt 'ok' met de inhoud van de link.

In de derde regel, sushi vraagt WRL om de naam op te zoeken ' xcolors 'in mapbestand 9,74 / 4096.6878. Merk op dat de afgedrukte gegevens afhankelijk zijn van het bewerkingstype. Het formaat is bedoeld om voor zichzelf te spreken als gelezen in combinatie met een NFS-protocolspecificatie.

Als de vlag -v (breedsprakig) wordt gegeven, wordt aanvullende informatie afgedrukt. Bijvoorbeeld:

sushi.1372a> wrl.nfs: 148 lees fh 21,11 / 12,195 8192 bytes @ 24576wrl.nfs> sushi.1372a: antwoord ok 1472 lees REG 100664 ids 417/0 sz 29388

(-v drukt ook de IP-header TTL-, ID-, lengte- en fragmentatievelden af, die in dit voorbeeld zijn weggelaten.) In de eerste regel, sushi vraagt WRL om 8192 bytes te lezen uit bestand 21,11 / 12.195, bij byte offset 24576. WRL antwoorden 'ok'; het pakket dat wordt weergegeven op de tweede regel is het eerste fragment van het antwoord en is daarom slechts 1472 bytes lang (de andere bytes zullen volgen in volgende fragmenten, maar deze fragmenten hebben geen NFS- of zelfs UDP-headers en kunnen dus mogelijk niet worden afgedrukt, afhankelijk van de gebruikte filterexpressie). Omdat de vlag -v wordt gegeven, worden sommige bestandskenmerken (die als aanvulling op de bestandsgegevens worden geretourneerd) afgedrukt: het bestandstype ("REG", voor het normale bestand), de bestandsmodus (in octaal), de uid en gid en de bestandsgrootte.

Als de vlag -v meerdere keren wordt gegeven, worden er nog meer details afgedrukt.

Houd er rekening mee dat NFS-aanvragen erg groot zijn en veel van de details niet worden afgedrukt tenzij snaplen is verhoogd. Probeer '-S 192'om NFS-verkeer te bekijken.

NFS-antwoordpakketten identificeren de RPC-bewerking niet expliciet. In plaats daarvan, tcpdump houdt "recente" verzoeken bij en vergelijkt ze met de antwoorden met behulp van de transactie-ID. Als een antwoord het overeenkomstige verzoek niet nauw volgt, is het misschien niet ontleedbaar.

Transarc AFS (Andrew File System) verzoeken en antwoorden.

src.sport> dst.dport: rx-pakkettype src.sport> dst.dport: rx pakkettype serviceaanroep naamsoproep args src.sport> dst.dport: rx-pakkettype servicebeantwoord call-name args elvis.7001> pike.afsfs: rx data fs roep de naam oude fid 536876964/1/1 ".newsrc.new" nieuwe fid 536876964/1/1 ".newsrc"pike.afsfs> elvis.7001: rx data fs antwoord hernoemen

In de eerste regel stuurt host elvis een RX-pakket naar snoek. Dit was een RX-gegevenspakket voor de fs-service (fileserver) en is het begin van een RPC-aanroep.De RPC-aanroep is hernoemd, met het oude mapbestand id van 536876964/1/1 en een oude bestandsnaam van '.newsrc.new', en een nieuw mapbestand id van 536876964/1/1 en een nieuwe bestandsnaam van '. newsrc'. De snoek van de gastheer antwoordt met een RPC-antwoord op de naamsoproep (die succesvol was, omdat het een gegevenspakket was en geen afgelast pakket).

In het algemeen worden alle AFS RPC's ten minste gedecodeerd door de naam van de RPC-oproep. De meeste AFS RPC's hebben tenminste enkele van de argumenten gedecodeerd (meestal alleen de 'interessante' argumenten, voor een of andere definitie van interessant).

Het formaat is bedoeld om zichzelf te beschrijven, maar het zal waarschijnlijk niet nuttig zijn voor mensen die niet bekend zijn met de werking van AFS en RX.

Als de vlag -v (uitgebreid) twee keer wordt gegeven, worden bevestigingspakketten en aanvullende informatie over de koptekst afgedrukt, zoals het ID van de RX-oproep, het oproepnummer, het volgnummer, het serienummer en de RX-pakketvlaggen.

Als de vlag -v tweemaal wordt gegeven, wordt aanvullende informatie afgedrukt, zoals het RX-oproep-ID, het serienummer en de RX-pakketvlaggen. De MTU-onderhandelingsinformatie wordt ook afgedrukt vanuit RX