Tcpdump este o comandă folosită pe diferite sisteme de operare Linux (OS) care colectează pachete TCP / IP care trec printr-un adaptor de rețea. La fel ca un instrument de sniffer de pachete, tcpdump nu poate analiza doar traficul de rețea, ci și salvează-l într-un fișier.
Spre deosebire de unele comenzi furnizate de sistemul de operare în mod implicit, s-ar putea să constatați că nu puteți utiliza tcpdump deoarece nu este instalat. Pentru a instala tcpdump, executați apt-get install tcpdump sau yum instala tcpdump, în funcție de sistemul dvs. de operare.
Cum functioneaza Tcpdump
Tcpdump imprimă anteturile de pachete pe o interfață de rețea care se potrivește cu booleanul expresie . De asemenea, poate fi rulat cu-w , care îl face să salveze datele de pachete într - un fișier pentru o analiză ulterioară și / sau cu-r , care îl determină să citească dintr-un fișier de pachete salvat mai degrabă decât să citească pachetele dintr-o interfață de rețea. În toate cazurile, numai pachetele care se potrivesc expresie vor fi procesate de către tcpdump .
tcpdump va, dacă nu se execută cu-c , continuați să capturați pachetele până când acestea sunt întrerupte de un semnal SIGINT (generate, de exemplu, prin tastarea caracterului de întrerupere, de obicei Ctrl + C) sau un semnal SIGTERM (generat de obicei cuucide(1) comandă); dacă se execută cu-c , va capta pachete până când va fi întreruptă de un semnal SIGINT sau SIGTERM sau dacă numărul de pachete specificat va fi procesat.
Comutatoarele menționate mai sus sunt explicate în detaliu mai târziu în acest articol.
Cand tcpdump termină captarea pachetelor, va raporta numărul de:
- Pachete "primite prin filtru."
- Semnificația acestui lucru depinde de sistemul de operare pe care îl difuzați tcpdump , și, eventual, în modul în care a fost configurat sistemul de operare. Dacă un filtru a fost specificat pe linia de comandă, în unele sisteme de operare se numără pachetele indiferent dacă au fost potrivite de expresia filtrului, iar pentru alții contează doar pachetele care au fost potrivite de expresia filtrului și au fost procesate de tcpdump.
- Pachete "scăzut de kernel."
- Acesta este numărul de pachete care au fost abandonate, din cauza lipsei de spațiu tampon, de mecanismul de captare a pachetelor în sistemul de operare pe care tcpdump se execută, în cazul în care OS raportează aceste informații către aplicații. Dacă nu, va fi raportată ca 0.
Pe platformele care suportă semnalul SIGINFO, cum ar fi cele mai multe BSD-uri (Berkeley Software Distributions), acesta va raporta acele numere atunci când primește un semnal SIGINFO (generat, de exemplu, prin tastarea caracterului "status", de obicei T Ctrl +) și va continua să capteze pachete.
Compatibilitate Tcpdump
Citirea pachetelor de pe o interfață de rețea cu comanda tcpdump poate necesita privilegii speciale ( citind un fișier de pachete salvat nu necesită astfel de privilegii):
- SunOS 3.x sau 4.x cu NIT sau BPF: Trebuie să aveți acces la citire / Dev / niți sau dev / * bpf .
- Solaris cu DLPI: Trebuie să aveți acces la citire / scriere la pseudo dispozitivul de rețea, cum ar fi / Dev / le . Cu toate acestea, cel puțin unele versiuni ale Solaris nu sunt suficiente pentru a permite acest lucru tcpdump pentru a captura în modul promiscuos; pe acele versiuni ale Solaris, trebuie să fie rădăcină sau tcpdump trebuie să fie instalat setuid la rădăcină, în scopul de a captura în modul promiscuos. Rețineți că, în cazul multor interfețe (poate toate), dacă nu capturați în modul promiscuos, nu veți vedea niciun pachet de ieșire, deci o captură care nu se efectuează în modul promiscuos poate să nu fie foarte utilă.
- HP-UX cu DLPI: Trebuie să fie rădăcină sau tcpdump trebuie să fie instalat setuid la rădăcină.
- IRIX cu snoop: Trebuie să fie rădăcină sau tcpdump trebuie să fie instalat setuid la rădăcină.
- Linux: Trebuie să fie rădăcină sau tcpdump trebuie să fie instalat setuid la rădăcină.
- Ultrix și Digital UNIX / Tru64 UNIX: Orice utilizator poate capta traficul de rețea cu tcpdump . Cu toate acestea, nici un utilizator (nici măcar un super-utilizator) nu poate captura în modul promiscuos pe o interfață, cu excepția cazului în care super-utilizatorul a activat funcționarea modului promiscuos pe acea interfață utilizând pfconfig (8) și niciun utilizator (nici măcar super-utilizatorul) nu poate capta traficul unicast primit de sau trimis de mașină pe o interfață, cu excepția cazului în care super-utilizatorul a activat operația de copiere în toate modurile pe interfața respectivă folosind pfconfig , asa de util preluarea de pachete pe o interfață necesită, probabil, fie activarea fie a modului promiscuu, fie a operației de copiere în toate modurile, fie ambele moduri de operare, pe această interfață.
- BSD: Trebuie să aveți acces la citire / Dev / bpf * .
Sintaxă de comandă Tcpdump
Ca toate comenzile computerului, comanda tcpdump funcționează corect numai dacă sintaxa este corectă:
tcpdump -adeflnNOpqRStuvxX -c numara
-C mărime fișier -F fişier
-i interfață -m modul -r fişier
-s snaplen -T tip -U utilizator -w fişier
-E algo: secret expresie
Opțiuni de comandă Tcpdump
Acestea sunt toate opțiunile pe care le puteți utiliza cu comanda tcpdump:
- -A: Încercați să convertiți adresele de rețea și de difuzare la nume.
- -c: Ieșiți după primire numara pachete.
- -C: Înainte de a scrie un pachet brut într-un fișier de salvare, verificați dacă fișierul este în prezent mai mare decât mărime fișier și, dacă da, închideți actualul fișier de salvare și deschideți unul nou.Salvarea fișierelor după primul fișier de salvare va avea numele specificat cu-w , cu un număr după el, începând de la 2 și continuând în sus. Unitățile din mărime fișier sunt milioane de octeți (1.000.000 octeți, nu 1.048.576 octeți).
- -d: Așezați codul de potrivire a pachetelor compilat într-o formă citibilă la om la ieșirea standard și opriți-l.
- -dD: Executați codul de potrivire a pachetelor ca un aC fragment de program.
- -DDD: Codul de potrivire a pachetelor de date ca numere zecimale (precedate de un număr).
- -e: Imprimați antetul nivelului de legătură pe fiecare linie de memorie.
- -E: Utilizare algo: secret pentru decriptarea pachetelor ESP IPsec. Pot fi algoritmides-CTF, 3DES-cbc, Blowfish-CTF, RC3-CTF, cast128-CTF, saunici unul. Valoarea implicită estedes-CTF. Abilitatea de a decripta pachetele este prezentă numai dacă tcpdump a fost compilat cu criptografia activată. secret textul ascii pentru cheia secret ESP. Nu putem să luăm valoare binară arbitrară în acest moment. Opțiunea presupune ESP RFC2406, nu RFC1827 ESP. Această opțiune este doar pentru depanare, iar utilizarea acestei opțiuni cu cheia cu adevărat "secretă" este descurajată. Prezentând cheia secretă IPsec pe linia de comandă, o puteți face vizibilă altora, prin ps (1) și alte ocazii.
- -f: Imprimați mai degrabă numerar decât simbolic adresele de internet "străin" (această opțiune are scopul de a se răni grav pe serverul serverului Sun - de obicei se blochează pentru totdeauna traducerea numerelor de internet nelocale).
- -F: Utilizare fişier ca intrare pentru expresia filtrului. O expresie suplimentară dată în linia de comandă este ignorată.
- -i: Ascultă interfață . Dacă nu este specificat, tcpdump caută interfața de sistem pentru interfața cu cele mai mici numere, configurate până la capăt (fără loopback). Legăturile sunt rupte prin alegerea celei mai vechi meciuri. În sistemele Linux cu kerneluri 2.2 sau mai noi, interfață argumentul "oricare" poate fi folosit pentru a capta pachete de pe toate interfețele. Rețineți că capturile de pe dispozitivul "orice" nu vor fi efectuate în modul promiscuos.
- -l: Faceți linia stdout tamponată. Utile dacă doriți să vedeți datele în timp ce le captați. De exemplu, "tcpdump -l | tee dat" sau "tcpdump -l> dat & tail -f dat".
- -m: Încărcați definițiile modulului SMI MIB din fișier modul . Această opțiune poate fi utilizată de mai multe ori pentru a încărca mai multe module MIB tcpdump .
- -N: Nu convertiți adresele gazdă în nume. Acest lucru poate fi folosit pentru a evita căutările DNS.
- -NN: Nu converti numerele de protocol și de porturi, etc., la nume.
- -N: Nu imprimați calificarea de nume de domeniu al numelor de gazde. De exemplu, dacă dai acest steag, atunci tcpdump va imprima "nic" în loc de "nic.ddn.mil".
- -O: Nu executați optimizatorul de coduri de potrivire a pachetelor. Acest lucru este util numai dacă suspectați o eroare în optimizator.
- -p: nu face puneți interfața în modul promiscuos. Rețineți că interfața ar putea fi în mod promiscuos din alte motive; prin urmare, "-p" nu poate fi folosit ca abreviere pentru "eter gazdă {local-hw-addr} sau difuzare eter".
- -q: Ieșire rapidă (silențioasă). Imprimați mai puține informații de protocol, astfel că liniile de ieșire sunt mai scurte.
- -R: Să presupunem că pachetele ESP / AH se bazează pe specificațiile vechi: RFC1825 la RFC1829. Dacă este specificat, tcpdump nu va imprima câmpul de prevenire a repetării. Deoarece nu există câmp de versiune protocol în specificația ESP / AH, tcpdump nu poate deduce versiunea protocolului ESP / AH.
- -r: Citiți pachetele de la fişier (care a fost creat cu opțiunea -w). Intrarea standard este utilizată dacă fişier este "-''.
- -S: Imprimați numere de secvență TCP absolute, mai degrabă decât relativă.
- -s: Snarf snaplen bytes de date de la fiecare pachet, mai degrabă decât implicit de 68; cu NIT-ul lui SunOS, minimul este de fapt 96. Șaizeci și opt de octeți sunt adecvați pentru IP, ICMP, TCP și UDP, dar pot împrăștia informațiile de protocol din pachetele serverului de nume și NFS (a se vedea mai jos). Pachetele trunchiate din cauza unui instantaneu limitat sunt indicate în ieșire cu " proto '', Unde proto este numele nivelului protocolului la care a avut loc trunchierea. Rețineți că prin preluarea de instantanee mai mari amândouă crește timpul necesar procesării pachetelor și, în mod eficient, scade cantitatea de tamponare a pachetelor. Acest lucru poate duce la pierderea pachetelor. Ar trebui să limitezi snaplen la cel mai mic număr care va captura informațiile din protocolul care vă interesează snaplen la 0 înseamnă utilizarea lungimii necesare pentru a prinde pachetele întregi.
- -T: Pachete de forță selectate de " expresie "pentru a fi interpretate specificate tip . Tipurile actuale cunoscute suntCNFP (Protocolul Cisco NetFlow),rpc (Apel de procedură la distanță),rtp (Protocolul aplicațiilor în timp real)RTCP (Protocolul de control al aplicațiilor în timp real)snmp (Protocol simplu de gestionare a rețelei),TVA (Visual Audio Tool) șiwb (White Board distribuit).
- -t: nu face tipăriți un marcaj de timp pe fiecare linie de depozitare.
- -tt: Imprimați o marcă de timp neformată pe fiecare linie de memorie.
- -U: Creează privilegii de root și modifică ID-ul utilizatorului utilizator și ID grup la grupul primar de utilizator .
- Notă: Red Hat Linux dă automat privilegiile utilizatorului "pcap" dacă nu este specificat altceva.
- -ttt: Imprimați o deltă (în microsecunde) între linia curentă și cea anterioară pe fiecare linie de dump.
- -tttt: Imprimați un marcaj de timp în format implicit, urmat de dată pe fiecare linie de memorie.
- -u: Imprimați mânerele NFS nedecupate.
- -v: (Puțin mai mult) ieșire verbose. De exemplu, timpul de trăire, identificarea, lungimea totală și opțiunile dintr-un pachet IP sunt tipărite. Permite, de asemenea, verificări suplimentare privind integritatea pachetelor, cum ar fi verificarea sumelor de control pentru IP și ICMP.
- vv: Mai mult de ieșire verbose. De exemplu, câmpurile suplimentare sunt tipărite din pachetele de răspuns NFS, iar pachetele SMB sunt complet decodate.
- -vvv: Mai mult de ieșire verbose. De exemplu, telnetSB … SE Opțiunile sunt tipărite în întregime. Cu -X opțiunile telnet sunt tipărite și în hex.
- -w: Scrie pachetele brute la fişier mai degrabă decât parsarea și imprimarea acestora. Ele pot fi imprimate mai târziu cu opțiunea -r. Este folosită ieșirea standard dacă fişier este "-''.
- -X: Imprimați fiecare pachet (minus antetul nivelului de legătură) în hex. Cel mai mic dintre întregul pachet sau snaplen octeții vor fi tipăriți. Rețineți că acesta este întregul pachet de straturi de legătură, astfel încât pentru straturile de legătură care conțin (de exemplu, Ethernet), octeții de umplutură vor fi de asemenea tipăriți atunci când pachetul de nivel superior este mai scurt decât plăcuța necesară.
- -X: Atunci când imprimați hex, imprimați și ascii. Astfel, dacă-X este de asemenea setat, pachetul este imprimat în hex / ascii. Acest lucru este foarte util pentru analizarea noilor protocoale. Chiar dacă-X nu este setat, unele părți ale unor pachete pot fi imprimate în hex / ascii.
- expresie : Selectează ce pachete vor fi eliminate. Daca nu expresie este dat, toate pachetele de pe net vor fi eliminate. În caz contrar, numai pachetele pentru care expresie este "adevărat" va fi dumping. expresie constă dintr-unul sau mai multe primitivele. Primitivele constau, de obicei, dintr-un id (nume sau număr) precedat de unul sau mai multe calificative. Există trei tipuri diferite de calificări:
- tip : Calificatorii spun ce fel de lucru se referă la numele de id sau la număr. Posibile tipuri suntgazdă, net, șiport- de exemplu, "host foo", "net 128.3", "port 20". Dacă nu există niciun calificativ de tip,gazdă este asumat.
- dir : Calificările specifică o anumită direcție de transfer către și / sau de la id . Posibile direcții suntsrc, dst, src sau dst șisrc și dst (de exemplu, "src foo", "dst net 128.3", "src sau port dst port ftp-data"). Dacă nu există nici un calificativ dir,src sau dst este asumat. Pentru straturile de legătură "nul" (adică, protocoale punct-la-punct, cum ar fi alunecarea) intrare și outbound calificativele pot fi folosite pentru a specifica direcția dorită.
- proto : Calificatorii restricționează potrivirea unui anumit protocol. Protosile posibile sunt: eter, FDDI, tr, ip, IP6, arp, RARP, DECNet, tcp, șiudp- de exemplu, "ether src foo", "arp net 128.3", "port tcp 21". Dacă nu există prototip de calificare, se presupune că toate protocoalele sunt compatibile cu tipul. De exemplu, "src foo" înseamnă "(ip sau arp sau rarp) src foo" (cu excepția celei din urmă care nu este o sintaxă legală); "net bar" înseamnă " înseamnă portul (tcp sau udp) 53 '.
- 'fddi' este de fapt un alias pentru "eter"; parserul le tratează în mod identic cu "nivelul de legături de date utilizat pe interfața de rețea specificată". "Antetele FDDI conțin adrese de destinație și sursă de tip Ethernet și conțin adesea tipuri de pachete asemănătoare Ethernet, astfel încât să puteți filtra aceste câmpuri FDDI ca și în cazul câmpurilor Ethernet analogice. Antetele FDDI conțin și alte câmpuri, dar nu le puteți numi explicit într-o expresie a filtrului.
- În mod similar, "tr" este un alias pentru "eter"; afirmațiile paragrafului anterior despre anteturile FDDI se aplică și antetelor Token Ring.
În plus față de cele de mai sus, există câteva cuvinte cheie "primitive" speciale care nu respectă modelul:portal, difuzare, Mai puțin, mai mare, și aritmetic expresii. Toate acestea sunt descrise mai jos.
Expresiile mai complexe ale filtrelor sunt construite folosind cuvinteleși, sau, șinu pentru a combina primitive-de exemplu, "host foo și nu port ftp și nu port ftp-data". Pentru a salva tastarea, listele de calificări identice pot fi omise (de exemplu, "tcp dst port ftp sau ftp-data sau domain" este exact același ca "portul tcp dst port ftp sau tcp dst port ftp-data sau tcp dst port domain"
Acestea sunt primitivele acceptate cu comanda tcpdump:
- dst gazdă gazdă
- Adevărat dacă câmpul de destinație IPv4 / v6 al pachetului este gazdă , care poate fi fie o adresă, fie un nume.
- src gazdă gazdă
- Adevărat dacă câmpul sursă IPv4 / v6 al pachetului este gazdă .
- gazdă gazdă
- Adevărat dacă este fie sursa sau destinația pachetului IPv4 / v6 gazdă . Oricare dintre expresiile gazdă de mai sus poate fi prefixată cu cuvintele cheie,ip, arp, RARP, sauIP6, ca în ip gazdă gazdă (care este echivalentă cu eter proto ip și gazdă gazdă).
- Dacă gazdă este un nume cu adrese IP multiple, fiecare adresă va fi verificată pentru o potrivire.
- eter dst ehost
- Adevărat dacă adresa de destinație Ethernet este ehost . Ehost poate fi fie un nume din / etc / ethers, fie un număr (a se vedea eteri (3N) pentru formatul numeric).
- ether src ehost
- Adevărat dacă adresa sursă Ethernet este ehost .
- eter gazdă ehost
- Este adevărat dacă sursa Ethernet sau adresa de destinație este ehost .
- portal gazdă
- Adevărat dacă pachetul este utilizat gazdă ca o poartă (adică, sursa Ethernet sau adresa de destinație a fost gazdă dar nici sursa IP, nici destinația IP nu a fost gazdă ).
- Gazdă trebuie să fie un nume și trebuie să fie găsit atât de mecanismele de rezolvare a adresei gazdă-nume-la-IP (fișier cu nume de gazdă, DNS, NIS etc.), cât și de mecanismul de rezoluție a adresei gazdă-nume-la-Ethernet (/ etc / eter, etc.).
- O expresie echivalentă este eter gazdă ehost și acum gazdă gazdă , care poate fi folosit cu nume sau numere pentru host / ehost .) Această sintaxă nu funcționează în configurația cu activare IPv6 în acest moment.
- dst net net
- Adevărat dacă adresa destinației IPv4 / v6 a pachetului are un număr de rețea de net . Net poate fi fie un nume din / etc / rețele sau un număr de rețea (a se vedea rețele (4) pentru detalii).
- src net net
- Adevărat dacă adresa sursă IPv4 / v6 a pachetului are un număr de rețea de net .
- net net
- Este adevărat dacă adresa IPv4 / v6 sau adresa destinație a pachetului are un număr de rețea de net .
- net net masca netmask
- Adevărat dacă se potrivește adresa IP net cu specificul netmask . Poate fi calificat cusrc saudst. Rețineți că această sintaxă nu este validă pentru IPv6 net .
- net net / Len
- Adevărat dacă adresa IPv4 / v6 se potrivește net cu o mască de rețea Len biți larg. Poate fi calificat cusrc saudst.
- dst port port
- Este adevărat dacă pachetul este ip / tcp, ip / udp, ip6 / tcp sau ip6 / udp și are o valoare a portului de destinație port . port poate fi un număr sau un nume utilizat în / etc / services (a se vedea tcp (4P) și udp (4P)). Dacă se utilizează un nume, se verifică atât numărul portului, cât și protocolul. Dacă se utilizează un nume sau un nume ambiguu, se verifică numai numărul de port (de ex.dst port 513 va imprima traficul tcp / login și traficul udp / cine, șidomeniu port va imprima atât traficul tcp / domeniu, cât și traficul de domenii).
- portul src port
- Adevărat dacă pachetul are o valoare a portului sursă port .
- port port
- Adevărat dacă portul sursă sau destinația pachetului este port . Oricare dintre expresiile portului de mai sus poate fi prefixată cu cuvintele cheie,tcp sauudp, ca în portul tcp src port , care se potrivește numai cu pachetele tcp a căror port sursă este port .
- Mai puțin lungime
- Adevărat dacă pachetul are o lungime mai mică sau egală cu lungime . Aceasta este echivalentă cu len <= Lungime .
- mai mare lungime
- Adevărat dacă pachetul are o lungime mai mare sau egală cu lungime . Aceasta este echivalentă cu len> = Lungime .
- ip proto protocol
- Adevărat dacă pachetul este un pachet IP (a se vedea ip (4P)) de tip de protocol protocol . Protocol poate fi un număr sau unul dintre nume ICMP , icmp6 , IGMP , IGRP , pim , Ah , esp , VRRP , udp , sau tcp . Rețineți că identificatorii tcp , udp , și ICMP sunt, de asemenea, cuvinte cheie și trebuie scăpate prin backslash (), care este în shell-ul C. Rețineți că acest primitiv nu urmărește lanțul antetului de protocol.
- ip6 proto protocol
- Este adevărat dacă pachetul este un pachet IPv6 de tip protocol protocol . Rețineți că acest primitiv nu urmărește lanțul antetului de protocol.
- prototipul ip6 protocol
- Adevărat dacă pachetul este pachet IPv6 și conține antet de protocol cu tipul protocol în lanțul antetului său de protocol. De exemplu, Protocolul ipv6 6 potrivește orice pachet IPv6 cu antet de protocol TCP în lanțul de antet al protocolului. Pachetul poate conține, de exemplu, antetul de autentificare, antetul de rutare sau antetul opțiunii hop-by-hop, între antetul IPv6 și antetul TCP. Codul BPF emis de această primitivă este complex și nu poate fi optimizat prin codul de optimizare BPF în tcpdump , deci acest lucru poate fi oarecum lent.
- ip protochain protocol
- Echivalentă cuprototipul ip6 protocol , dar aceasta este pentru IPv4.
- difuzarea eterului
- Este adevărat dacă pachetul este un pachet de difuzare Ethernet. eter cuvântul cheie este opțional.
- ip difuzat
- Adevărat dacă pachetul este un pachet de difuzare IP. Controlează atât convențiile de difuzare a tuturor zerurilor, cât și cele ale tuturor și caută o mască de subrețea locală.
- emițător multicast
- Adevărat dacă pachetul este un pachet Ethernet multicast. eter cuvântul cheie este opțional. Aceasta este o stenotă pentru "eter 0 & 1! = 0'.
- ip multicast
- Este adevărat dacă pachetul este un pachet IP multicast.
- ip6 multicast
- Este adevărat dacă pachetul este un pachet multicast IPv6.
- eter proto protocol
- Adevărat dacă pachetul este de tip eter protocol . Protocol poate fi un număr sau unul dintre nume ip , IP6 , arp , RARP , o vorba , AARP , DECNet , sca , lat , mopdl , moprc , izo , stp , IPX , sau NetBEUI . Rețineți că acești identificatori sunt, de asemenea, cuvinte cheie și trebuie evacuați prin backslash ().
- În cazul FDDI (de exemplu,fddi protocol arp') și Token Ring (de exemplu,'tr protocol arp'), pentru majoritatea acestor protocoale, identificarea protocolului provine din antetul 802.2 Logical Link Control (LLC), care este de obicei stratificat peste header-ul FDDI sau Token Ring.
- Când filtrați majoritatea identificatorilor de protocol pe FDDI sau Token Ring, tcpdump verifică numai câmpul ID de protocol al unui antet LLC în așa-numitul format SNAP cu un identificator de unitate organizațională (OUI) de 0x000000, pentru Ethernet încapsulat; nu verifică dacă pachetul este în format SNAP cu OUI de 0x000000.
- Excepțiile sunt izo , pentru care verifică câmpurile DSAP (Point Service Access Point) și SSAP (Point Service Access Point) din antetul LLC, stp și NetBEUI , unde verifică DSAP al antetului LLC și o vorba , unde verifică un pachet format SNAP cu OUI de 0x080007 și etalonul Appletalk.
- În cazul Ethernet, tcpdump verifică câmpul de tip Ethernet pentru majoritatea acestor protocoale; excepțiile sunt izo , sevă , și NetBEUI , pentru care verifică un cadru 802.3 și apoi verifică antetul LLC ca și pentru FDDI și Token Ring; o vorba , unde verifică atât etalonul Appletalk într-un cadru Ethernet, cât și un pachet format SNAP, așa cum procedează pentru FDDI și Token Ring; AARP , unde verifică tipul de ARP Appletalk fie într-un cadru Ethernet, fie într-un cadru SNAP 802.2 cu OUI de 0x000000; și IPX , unde verifică eticheta IPX într-un cadru Ethernet, IPX DSAP în antetul LLC, 802.3 fără încapsulare antet LLC a IPX și eticheta IPX într-un cadru SNAP.
- decnet src gazdă
- Este adevărat dacă adresa sursă DECNET este gazdă , care poate fi o adresă a formularului "10.123" sau a unui nume de gazdă DECNET. Suportul pentru numele de gazdă DECNET este disponibil numai pe sistemele Ultrix configurate să ruleze DECNET.
- decnet dst gazdă
- Este adevărat dacă adresa de destinație DECNET este gazdă .
- gazdă decnet gazdă
- Este adevărat dacă este fie sursa DECNET, fie adresa destinație gazdă .
- ip, IP6, arp, RARP, o vorba, AARP, DECNet, izo, stp, IPX, NetBEUI
- Abrevieri pentru eter proto p Unde p este unul dintre protocoalele de mai sus.
- lat, moprc, mopdl
- Abrevieri pentru eter proto p Unde p este unul dintre protocoalele de mai sus. Rețineți că tcpdump nu știe în prezent cum să analizeze aceste protocoale.
- VLAN Vlan_id
- Este adevărat dacă pachetul este un pachet VLAN IEEE 802.1Q. Dacă Vlan_id este specificat, este valabil numai dacă pachetul are specificat vlan_id . Rețineți că primulVLAN cuvânt cheie întâlnit în expresie modifică decalajul de decodificare pentru restul de date expresie pe presupunerea că pachetul este un pachet VLAN.
- tcp, udp, ICMP
- Abrevieri pentru ip proto p sau ip6 proto p Unde p este unul dintre protocoalele de mai sus.
- izo proto protocol
- Adevărat dacă pachetul este un pachet de tip protocol OSI protocol . Protocol poate fi un număr sau unul dintre nume clnp , ESIS , sau isis .
- clnp, ESIS, isis
- Abrevieri pentru izo proto p Unde p este unul dintre protocoalele de mai sus. Rețineți că tcpdump face o sarcină incompletă de a analiza aceste protocoale.
- expr relop expr
- Adevărat dacă relația are loc, unde relop este unul dintre>, <,> =, <=, =,! =, și expr este o expresie aritmetică compusă din constante întregi (exprimate în sintaxa standard C), operatorii binari normali +, -, *, /, &, |, un operator de lungime și accesori specifici pentru pachete de date. Pentru a accesa datele din interiorul pachetului, utilizați următoarea sintaxă: proto expr: dimensiune .
Proto este unul dineter, FDDI, tr, ppp, alunecare, legătură, ip, arp, RARP, tcp, udp, ICMP, sau IP6, și indică stratul de protocol pentru operația index (eter, FDDI, tr, ppp, alunecare, șilegătură toate se referă la stratul de legătură). Rețineți că tcp, udp și alte tipuri de protocol de nivel superior se aplică doar IPv4, nu IPv6 (acest lucru va fi stabilit în viitor). Debitul octeților, raportat la stratul de protocol indicat, este dat de expr . mărimea este opțională și indică numărul de octeți din domeniul de interes; aceasta poate fi una, două sau patru și implicită la una. Operatorul de lungime, indicat de cuvântul cheieLen, dă lungimea pachetului.
De exemplu, 'eter 0 & 1! = 0"captează toate traficul multicast. Expresia 'ip 0 & 0xf! = 5"captează toate pachetele IP cu opțiuni. Expresia 'ip 6: 2 & 0x1fff = 0"capturează numai datagrame nefragmentate și fragmente zero ale datagramelor fragmentate. Acest control este implicit aplicat latcp șiudp operațiuni de indexare. De exemplu, tcp 0 înseamnă întotdeauna primul octet al TCP antet , și nu înseamnă niciodată primul octet al unui fragment care intervine.
Unele deviații și valori de câmp pot fi exprimate ca nume, nu ca valori numerice. Următoarele decalări ale câmpului antetului de protocol sunt disponibile: icmptype (Câmp tip ICMP),icmpcode (Câmp cod ICMP) șitcpflags (Câmpul TCP steaguri).
Sunt disponibile următoarele valori de câmp ICMP:echoreply-ICMP, unreach-ICMP, sourcequench-ICMP, redirecționează ICMP, ICMP-ecou, routeradvert-ICMP, routersolicit-ICMP, timxceed-ICMP, paramprob-ICMP, tstamp-ICMP, tstampreply-ICMP, ireq-ICMP, ireqreply-ICMP, maskreq-ICMP, maskreply-ICMP.
Următoarele valori ale câmpurilor de etichete TCP sunt disponibile:tcp-fin, tcp-sin, tcp-RST, tcp-push, tcp-push, tcp-ack, tcp-Urg.
Primitivele pot fi combinate utilizând oricare dintre următoarele:
- Un grup parantez de primitivi și operatori (paranteze sunt speciale pentru Shell și trebuie să fie scape)
- Negarea ("!"sau"nu')
- Concatenation ("&&"sau"și')
- Alternare ("||"sau"sau')
Negarea are cea mai mare prioritate. Alternarea și concatenarea au prioritate egală și se asociază de la stânga la dreapta. Rețineți că este explicitși jetoanele, nu juxtapunere, sunt necesare pentru concatenare.
Dacă un identificator este dat fără un cuvânt cheie, cel mai recent cuvânt cheie este asumat. De exemplu, nu gazdă și as este scurt pentru nu gazdă vs și gazdă as. Cu toate acestea, acest lucru nu trebuie confundat cu nu (gazdă vs sau as).
Argumentele expresiei pot fi transmise tcpdump fie ca un singur argument, fie ca argumente multiple, oricare ar fi mai convenabil. În general, dacă expresia conține metacaractere Shell, este mai ușor să o transmiteți ca un singur argument citat. Argumentele multiple sunt concatenate cu spații înainte de a fi analizate.
Exemple Tcpdump
tcpdump gazdă apus de soare
Comanda tcpdump de mai sus este utilizată pentru a imprima toate pachetele care sosesc la sau de la apus de soare. helios gazdă tcpdump și (fierbinte sau ace )
Acest exemplu de tcpdump imprimă traficul între helios si nici Fierbinte sau as. tcpdump ip ace gazdă și nu helios
Puteți utiliza această comandă tcpdump pentru a imprima între toate pachetele IP as și orice altă gazdă, cu excepția helios. tcpdump net ucb-eter
În exemplul de mai sus, tcpdump imprimă tot traficul între gazde locale și gazde la Berkeley. tcpdump "snup și gateway (port ftp sau ftp-data) '
Următorul exemplu de comandă tcpdump este utilizat pentru a imprima toate traficul FTP prin gateway-ul internetului snup . Rețineți că expresia este citată pentru a împiedica shell-ul să interpreteze greșit parantezele. tcpdump ip și nu net localnet
În exemplul tcpdump de mai sus, comanda imprimă traficul care nu este furnizat și nici nu este destinat pentru gazdele locale. tcpdump 'tcp tcpflags & (tcp-syn | tcp-fin)! = 0 și nu src și dst net localnet '
Pentru exemplul de mai sus al tcpdump, comanda este folosită pentru a imprima pachetele de început și sfârșit (pachetele SYN și FIN) pentru fiecare conversație TCP care implică o gazdă nonlocală. tcpdump 'snup și gateway ip 2: 2> 576'
Comanda de mai sus va imprima pachete IP mai lungi de 576 de octeți trimisi prin gateway snup. tcpdump 'eter 0 & 1 = 0 și ip 16> = 224'
Comanda tcpdump afișată mai sus imprimă pachete IP difuzate sau multicast care au fost nu transmis prin transmisie prin Ethernet sau multicast. tcpdump 'icmp icmptype! = icmp-echo și icmp icmptype! = icmp-echoreply'
În acest ultim exemplu de tcpdump, comanda imprimă toate pachetele ICMP care nu sunt solicitări de ecou sau răspunsuri (adică nu pachete ping). Producția de tcpdump este dependent de protocol. Următoarele oferă o scurtă descriere și exemple pentru majoritatea formatelor. Anteturi nivel de legătură. Dacă este dată opțiunea "-e", antetul nivelului de legătură este imprimat. În rețelele Ethernet, sunt tipărite adresele sursă și destinație, protocolul și lungimea pachetului. Pe rețelele FDDI, opțiunea "-e" provoacă tcpdump pentru a imprima câmpul "control cadru", adresa sursă și destinație și lungimea pachetului. Câmpurile "normale" conțin pachete "async", cu o valoare de prioritate între 0 și 7: de exemplu, "async4“. Astfel de pachete se presupune că conțin un pachet de control logic 802.2 (LLC); antetul LLC este tipărit dacă este nu o datagramă ISO sau un așa-numit pachet SNAP. În rețelele Token Ring, opțiunea "-e" provoacă tcpdump pentru a imprima câmpurile "control acces" și "control cadru", adresa sursă și destinație și lungimea pachetului. Ca și în rețelele FDDI, se presupune că pachetele conțin un pachet LLC. Indiferent dacă opțiunea "-e" este specificată sau nu, informațiile despre rutarea sursei sunt tipărite pentru pachetele rulate de sursă. (N.B .: Următoarea descriere presupune familiarizarea cu algoritmul de comprimare SLIP descris în RFC-1144.) În legăturile SLIP, sunt tipărite un indicator de direcție ("I" pentru intrare, "O" pentru ieșire), tip de pachet și informații de compresie. Tipul de pachet este imprimat primul. Cele trei tipuri sunt ip , utcp , și CTCP . Nu sunt tipărite alte informații despre link ip pachete. Pentru pachetele TCP, identificatorul de conexiune este tipărit după tipul. Dacă pachetul este comprimat, antetul său codat este imprimat. Cazurile speciale sunt tipărite ca* S + n și* SA + n , Unde n este suma cu care numărul secvenței (sau numărul de secvență și ack) s-a modificat. Dacă nu este cazul special, se imprimă zero sau mai multe modificări. O modificare este indicată prin U (pointer urgent), W (fereastră), A (ack), S (număr secvență) și I (ID pachet), urmat de delta (+ n sau -n) (= n). În cele din urmă, se imprimă cantitatea de date din pachet și lungimea antetului comprimat. De exemplu, următoarea linie prezintă un pachet TCP comprimat la ieșire, cu un identificator de conexiune implicit; ack-ul sa schimbat cu 6, numărul de ordine cu 49 și ID-ul pachetului cu 6; există 3 octeți de date și 6 octeți de antet comprimat: O ctcp * A + 6 S + 49 I + 6 3 (6)
Pachete Arp / rarp. Ieșirea Arp / rarp arată tipul cererii și argumentele acesteia. Formatul este destinat să fie explicativ. Iată o scurtă proba luată de la începutul unui "rlogin" de la gazdă rtsg a gazdui CSAM : arp cine-csam spune rtsgarp răspuns csam este-la CSAM
Prima linie spune că rtsg a trimis un pachet arp care solicită adresa Ethernet a gazdei csam de pe internet. Csam răspunde cu adresa Ethernet (în acest exemplu, adresele Ethernet se află în majuscule și adrese de internet cu litere mici). Acest lucru ar părea mai puțin redundant dacă am fi făcut-o tcpdump -n : arp care-a 128.3.254.6 spune 128.3.254.68Răspunsul arp 128.3.254.6 este la 02: 07: 01: 00: 01: c4
Dacă am fi făcut-o tcpdump -e , faptul că primul pachet este difuzat și cel de-al doilea punct-la-punct ar fi vizibil: RTSG Broadcast 0806 64: arp care-are csam spune rtsgCSAM RTSG 0806 64: ars răspuns csam este-la CSAM
Pentru primul pachet se spune că adresa sursă Ethernet este RTSG, destinația este adresa de difuzare Ethernet, câmpul de tip conține hex 0806 (tip ETHER_ARP), iar lungimea totală a fost de 64 octeți. Pachete TCP (N.B.: Următoarea descriere presupune familiarizarea cu protocolul TCP descris în RFC-793. Dacă nu sunteți familiarizat cu protocolul, nici această descriere, nici tcpdump nu va fi de folos pentru voi) . Formatul general al unei linii de protocol tcp este: src> dst: flags data-seqno ack fereastră opțiuni de urgență
src și dst sunt adresele IP și porturile sursă și de destinație. Steaguri sunt o combinație între S (SYN), F (FIN), P (PUSH) sau R (RST) sau o singură "." (fără steaguri). Data-seqno descrie porțiunea din spațiul secvențial acoperită de datele din acest pachet (a se vedea exemplul de mai jos). Ack este numărul de ordine al următoarelor date care se așteaptă la cealaltă direcție pe această conexiune. Fereastră este numărul de octeți de spațiu tampon de recepție disponibil în cealaltă direcție pe această conexiune. Urg indică faptul că există date "urgente" în pachet. Opțiuni sunt opțiunile tcp închise în paranteze unghiulare (de exemplu, Src, dst, și steaguri sunt întotdeauna prezente. Celelalte câmpuri depind de conținutul antetului protocolului tcp al pachetului și sunt afișate numai dacă este cazul. Aici este porțiunea de deschidere a unui rlogin din gazdă rtsg a gazdui CSAM . rtsg.1023> csam.login: S 768512: 768512 (0) câștiga 4096 Prima linie spune că portul tcp 1023 pe rtsg a trimis un pachet către port Logare pe CSAM.S indică faptul că SYN steagul a fost stabilit. Numărul secvenței de pachete a fost de 768512 și nu conține date. (Notația este "prima: ultima (nbytes)", ceea ce înseamnă "numere de secvență primul până la, dar nu inclusiv ultimul care este Nbytes octeți de date de utilizator ".) Nu a existat nicio ack-backed-back-back, fereastra de recepție disponibilă a fost de 4096 octeți și a existat o opțiune de dimensiune max-segment care solicită un mss de 1024 octeți. Csam răspunde cu un pachet similar, cu excepția faptului că include un ack pentru RTSG SYN. Rtsg apoi acns csam SYN. "." înseamnă că nu au fost stabilite steaguri. Pachetul nu conține date, astfel încât nu există nici un număr de secvență de date. Rețineți că numărul de secvență ack este un număr întreg (1). Prima dată tcpdump vede o conversație "tcp", imprimă numărul secvenței din pachet. În pachetele ulterioare ale conversației, se imprimă diferența dintre numărul de secvență al pachetului curent și acest număr de secvență inițială. Aceasta înseamnă că numerele de secvențe după prima pot fi interpretate ca poziții de byte relative în fluxul de date al conversației (cu primul octet de date în fiecare direcție fiind '1'). "-S" va suprascrie această caracteristică, determinând ieșirea numerelor de ordine originale. În linia a șasea, rtsg trimite csam 19 octeți de date (octeți 2 până la 20 în partea rtsg -> csam a conversației). Flagul PUSH este setat în pachet. Pe linia a șaptea, csam spune că au primit date trimise de rtsg până la, dar fără a include octetul 21. Cele mai multe dintre aceste date sunt aparent așezate în tamponul socket, deoarece fereastra de recepție a csam a ajuns la 19 bytes mai mică. De asemenea, Csam trimite un octet de date către rtsg în acest pachet. În linii a opta și nouă, csam trimite doi octeți de date urgente, împinse la rtsg. Dacă imaginea a fost suficient de mică tcpdump nu a captat întregul antet TCP, interpretează cât mai mult din antet, după care poate raporta " tcp "pentru a indica restul nu a putut fi interpretat. Dacă antetul conține o opțiune falsă (una cu o lungime care este fie prea mică, fie dincolo de sfârșitul antetului), tcpdump îl raportează ca " rău opt "și nu interpretează alte opțiuni (din moment ce este imposibil să se spună de unde au început). Dacă lungimea antetului indică că există opțiuni dar lungimea datagramei IP nu este suficient de lungă pentru ca opțiunile să fie efectiv acolo, tcpdump îl raportează ca " rău lungime hdr ''. Capturați pachetele cu combinații speciale de pavilioane. Există opt biți în secțiunea de biți de control din antetul TCP: CWR | ECE | URG | ACK | PSH | RST | SYN | FIN Să presupunem că vrem să urmărim pachetele utilizate pentru stabilirea unei conexiuni TCP. Amintiți-vă că TCP utilizează un protocol tridimensional de strângere de mână când inițializează o nouă conexiune; secvența de conectare cu privire la biții de control TCP este: Acum suntem interesați de captarea pachetelor care au doar setul de biți SYN (Pasul 1). Rețineți că nu vrem pachetele de la pasul 2 (SYN-ACK), doar un SYN inițial simplu. Pentru noi avem nevoie de o expresie corectă a filtrului tcpdump . Amintiți-vă structura unui antet TCP fără opțiuni: 0 15 31-----------------------------------------------------------------| portul sursă | portul de destinație |-----------------------------------------------------------------| număr de ordine |-----------------------------------------------------------------| numărul de confirmare |-----------------------------------------------------------------| HL | rsvd | C | E | U | A | P | R | S | F | dimensiunea ferestrei-----------------------------------------------------------------| Sumă de control TCP | indicatorul urgent |-----------------------------------------------------------------
Un antet TCP deține, de obicei, 20 de octeți de date, cu excepția cazului în care sunt disponibile opțiuni. Prima linie a graficului conține octeți 0-3, a doua linie prezintă octeți 4-7, etc. Începând să numere cu 0, biții relevanți de control TCP sunt conținute în octet 13: 0 7| 15| 23| 31----------------|---------------|---------------|----------------| HL | rsvd | C | E | U | A | P | R | S | F | dimensiunea ferestrei----------------|---------------|---------------|----------------| | 13 octet | | |
Să ne uităm mai atent la octetul nr. 13: | | |---------------| | C | E | U | A | P | R | S | F | |---------------| |7 5 3 0|
Acestea sunt biții de control TCP în care suntem interesați. Am numerotat biții în acest octet de la 0 la 7, de la dreapta la stânga, astfel încât bitul PSH este numărul de biți 3, în timp ce bitul URG este numărul 5. Amintiți-vă că dorim să capturați pachete cu setul SYN numai. Să vedem ce se întâmplă cu octetul 13 dacă o datagramă TCP sosește cu setul de biți SYN din antetul său: | C | E | U | A | P | R | S | F | |---------------| |0 0 0 0 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0|
Privind secțiunea de biți de control, vedem că este setat numai numărul de biți 1 (SYN). Presupunând că numărul octet 13 este un număr întreg nesemnat pe 8 biți în ordinea byte de rețea, valoarea binară a acestui octet este: 00000010 Reprezentarea zecimală a acestuia este: 7 6 5 4 3 2 1 00*2 + 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 1*2 + 0*2 = 2
Aproape am terminat, pentru că acum știm că dacă este setat numai SYN, valoarea celui de-al 13-lea octet din antetul TCP, atunci când este interpretată ca un număr întreg nesemnat pe 8 biți în ordinea bytelor de rețea, trebuie să fie exact 2. Această relație poate fi exprimată ca tcp 13 == 2 Putem folosi această expresie ca filtru pentru tcpdump pentru a urmări pachetele care au setat numai SYN: tcpdump -i xl0 tcp 13 == 2 Expresia spune "lăsați cel de-al 13-lea octet al unei datagrame TCP să aibă valoarea zecimală 2", ceea ce este exact ceea ce dorim. Acum, să presupunem că trebuie să capturăm pachetele SYN, dar nu ne pasă dacă ACK sau orice alt bit de control TCP este setat în același timp. Uită-te la ce se întâmplă cu octetul 13 atunci când sosește o datagramă TCP cu setul SYN-ACK: | C | E | U | A | P | R | S | F | |---------------| |0 0 0 1 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0|
Biturile 1 și 4 sunt acum setate în octetul 13. Valoarea binară a octetului 13 este: 00010010 care se traduce în zecimal: 7 6 5 4 3 2 1 00*2 + 0*2 + 0*2 + 1*2 + 0*2 + 0*2 + 1*2 + 0*2 = 18
Nu putem folosi doar 'tcp 13 == 18' în tcpdump filtru, pentru că ar selecta numai acele pachete care au setat SYN-ACK, dar nu cele care au numai setul SYN. Amintiți-vă că nu ne pasă dacă ACK sau orice alt bit de control este setat atâta timp cât SYN este setat. Pentru a ne atinge scopul, trebuie să logic AND valoarea binară a octetului 13 cu o altă valoare pentru a păstra bitul SYN. Știm că vrem ca SYN să fie setat în orice caz, așa că vom logica ȘI valoarea din octetul 13 cu valoarea binară a unui SYN: 00010010 SYN-ACK 00000010 SYN ȘI 00000010 (dorim SYN) ȘI 00000010 (dorim SYN) -------- -------- = 00000010 = 00000010
Vedem că această operație AND oferă același rezultat indiferent dacă este setat ACK sau un alt bit de control TCP. Reprezentarea zecimală a valorii AND, precum și rezultatul acestei operații, este 2 (binar 00000010), deci știm că pentru pachetele cu setare SYN, relația următoare trebuie să fie adevărată: ((valoarea octetului 13) ȘI (2)) == (2) Acest lucru ne indică tcpdump expresia filtrului tcpdump -i xl0 'tcp 13 & 2 == 2' Rețineți că ar trebui să utilizați citate simple sau o coloană înapoi în expresie pentru a ascunde caracterul special AND ('&') din coajă. Pachete UDP. Formatul UDP este ilustrat de acest pachet rwho: actinide.who> broadcast.who: udp 84
Asta spune că portul care pe gazdă actinide a trimis o datagramă udp în port care pe gazdă difuzare , adresa de difuzare pe Internet. Pachetul conținea 84 de octeți de date de utilizator. Unele servicii UDP sunt recunoscute (de la numărul portului sursă sau de destinație) și informațiile de protocol de nivel superior tipărite, în special cererile de servicii de nume de domeniu (RFC-1034/1035) și Sun RPC (RFC-1050) către NFS. Cereri pentru serverul de nume UDP (N.B.: Următoarea descriere presupune familiarizarea cu protocolul Serviciului de domeniu descris în RFC-1035. Dacă nu sunteți familiarizat cu protocolul, următoarea descriere nu va avea sens.) Cererile serverului de nume sunt formatate ca: src> dst: id op? steaguri qtype qclass name (len) h2opolo.1538> helios.domain: 3+ A? ucbvax.berkeley.edu. (37)
Gazdă h2opolo a cerut serverul de domeniu să fie activat helios pentru o înregistrare de adresă (qtype = A) asociată cu numele ucbvax.berkeley.edu. ID-ul interogării a fost '3'. "+" Indică recursivă dorită steagul a fost stabilit. Lungimea interogării a fost de 37 octeți, fără a include anteturile de protocol UDP și IP. Funcția de interogare a fost una normală, întrebare , astfel încât câmpul op a fost omis. Dacă op era altceva, ar fi fost tipărită între '3' și '+'. În mod similar, qclass-ul a fost unul normal, C_IN , și omis. Orice alt qclass ar fi fost tipărit imediat după "A". Câteva anomalii sunt verificate și pot duce la câmpuri suplimentare închise în paranteze pătrate: Dacă o interogare conține un răspuns, înregistrări autoritare sau secțiuni suplimentare de înregistrări, ANcount , nscount , sau arcount sunt imprimate ca " n A', ' n n "sau" n au unde n este numărul potrivit. Dacă oricare dintre biții de răspuns sunt setați (AA, RA sau rcode) sau oricare dintre biții `must be zero 'sunt setați în octeți doi și trei,` b2 & 3 = X ", unde X este valoarea hexă a octeților de antet două și trei. Răspunsuri la serverul de nume UDP. Răspunsurile serverului de nume sunt formatate ca: src> dst: id op rcode steaguri a / n / au tip de date de clasă (len) heliosdomeniu> h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273)heliosdomeniu> h2opolo.1537: 2 NXDomain * 0/1/0 (97)
În primul exemplu, helios răspunde la id - ul de interogare 3 de la h2opolo cu trei înregistrări de răspuns, trei înregistrări ale serverului de nume și șapte înregistrări suplimentare. Prima înregistrare de răspuns este de tip A (adresa), iar datele sale sunt adresa de internet 128.32.137.3. Dimensiunea totală a răspunsului a fost de 273 octeți, excluzând anteturile UDP și IP. Codul op (Query) și răspunsul (NoError) au fost omise, la fel ca și clasa (C_IN) a înregistrării A. În al doilea exemplu, helios răspunde la interogarea 2 cu un cod de răspuns al domeniului inexistent (NXDomain) fără răspuns, un server de nume și nici o înregistrare de autoritate. Semnul "*" indică faptul că răspuns autoritar bit a fost setat. Deoarece nu au existat răspunsuri, nu au fost tipărite niciun tip, clasă sau date. Alte caractere de pavilion care ar putea apărea sunt '-' (recursive disponibile, RA, nu set) și '|' (mesaj trunchiat, TC, setat). Dacă secțiunea "întrebare" nu conține exact o intrare, " n q ". Rețineți că cererile și răspunsurile serverului de nume tind să fie mari, iar setările implicite snaplen de 68 de octeți poate să nu capteze suficient pachetul pentru imprimare. Folosește-s steag pentru a crește viteza dacă trebuie să investiți serios traficul de nume de server. '-128"a funcționat bine pentru mine. Decodificarea SMB / CIFS. tcpdump include decodificarea destul de extinsă a SMB / CIFS / NBT pentru datele despre UDP / 137, UDP / 138 și TCP / 139. Se fac, de asemenea, unele decodificări primitive ale datelor IPX și NetBEUI SMB. Implicit se face o decodă destul de minimă, cu o decodare mult mai detaliată dacă se utilizează -v. Fiți avertizat că cu -v un singur pachet SMB poate ocupa o pagină sau mai multe, deci utilizați doar -v dacă doriți cu adevărat toate detaliile gorale. Dacă deconectați sesiunile SMB care conțin șiruri de caractere unicode, atunci ați putea dori să setați variabila de mediu USE_UNICODE la 1. Un patch pentru a detecta automat șiruri de caractere unicode ar fi binevenit. Pentru informații despre formatele de pachete SMB și despre ce înseamnă toate câmpurile, consultați www.cifs.org sau directorul pub / samba / specs / pe site-ul dumneavoastră oglindă preferat samba.org. Patch-urile SMB au fost scrise de Andrew Tridgell ([email protected]). Cererile și răspunsurile NFS. Sun cererile și răspunsurile Sun NFS (Network File System) sunt tipărite ca: src.xid> dst.nfs: len op args src.nfs> dst.xid: reply stat len op rezultate sushi.6709> wrl.nfs: 112 readlink fh 21,24 / 10,73165wrl.nfs> sushi.6709: răspuns ok 40 readlink "../var"sushi.201b> wrl.nfs: 144 căutare fh 9,74 / 4096,6878 "xcolors"wrl.nfs> sushi.201b: răspuns ok 128 căutare fh 9,74 / 4134,3150
În prima linie, gazdă sushi trimite o tranzacție cu id 6709 la WRL (rețineți că numărul următor gazdei src este un id de tranzacție, nu portul sursă). Solicitarea a fost de 112 octeți, cu excepția anteturilor UDP și IP. Operațiunea a fost a readlink (citiți link-ul simbolic) pe mânerul fișierului ( fh ) 21,24 / 10,731657119. (Dacă cineva este norocos, ca și în acest caz, mânerul fișierului poate fi interpretat ca o pereche majoră, număr minor de dispozitive, urmată de numărul inode și numărul de generație.) WRL răspunde "ok" cu conținutul link-ului. În al treilea rând, sushi solicită WRL pentru a căuta numele " xcolors "în fișierul director 9,74 / 4096,6878. Rețineți că datele tipărite depind de tipul de operare. Formatul este destinat să fie explicativ în mod automat dacă este citit în legătură cu o specificație de protocol NFS. Dacă este indicat pavilonul -v (verbose), sunt tipărite informații suplimentare. De exemplu: sushi.1372a> wrl.nfs: 148 citiți fh 21,11 / 12,195 8192 octeți @ 24576wrl.nfs> sushi.1372a: răspunsul ok 1472 citi REG 100664 ID 417/0 sz 29388
(-v imprimă, de asemenea, câmpurile IP TTL, ID, lungime și fragmentare, care au fost omise din acest exemplu.) În prima linie, sushi solicită WRL pentru a citi 8192 octeți din fișierul 21,11 / 12,195, la octetul offset 24576. WRL răspunsurile "ok"; pachetul prezentat pe a doua linie este primul fragment al răspunsului și, prin urmare, este de numai 1472 octeți (ceilalți octeți vor urma în fragmentele următoare, dar aceste fragmente nu au antete NFS sau chiar UDP și astfel nu pot fi tipărite, în funcție de expresia filtrului utilizat). Deoarece este indicat parametrul -v, unele dintre atributele de fișier (care sunt returnate în plus față de datele fișierelor) sunt tipărite: tipul fișierului ("REG", pentru fișierul obișnuit), modul fișier (în octal), uid și gid și dimensiunea fișierului. Dacă flagul -v este dat mai mult decât o dată, sunt imprimate și alte detalii.
Formatul de ieșire Tcpdump