Tcpdump - comandă Linux - comandă Unix

NUME

tcpdump - traficul anvelopei într-o rețea

REZUMAT

tcpdump [ -deflnNOpqRStuvxX ] [ -c număr ]

[ -F file_size ] [ -F file ]

[ -i interfață ] [ -m modul ] [ -r fișier ]

[ -s snaplen ] [ -T tip ] [ -U utilizator ] [ -w fișier ]

[ -E algo: secret ] [ expresie ]

DESCRIERE

Tcpdump tipărește anteturile pachetelor pe o interfață de rețea care se potrivește cu expresia booleană. De asemenea, poate fi rulat cu flagul -w , ceea ce îl face să salveze datele de pachete într-un fișier pentru o analiză ulterioară și / sau cu steagul -r , ceea ce îl determină să citească dintr-un fișier de pachete salvat mai degrabă decât să citească pachetele de la o interfață de rețea. În toate cazurile, numai pachetele care se potrivesc cu expresia vor fi procesate de tcpdump .

Tcpdump va continua să capteze pachetele până când va fi întrerupt de un semnal SIGINT (generat, de exemplu, tastând caracterul de întrerupere, în mod obișnuit control-C) sau un semnal SIGTERM (generat în mod obișnuit cu kill (1) comandă); dacă se execută cu parametrul -c , acesta va capta pachete până când va fi întrerupt de un semnal SIGINT sau SIGTERM sau numărul de pachete specificat a fost procesat.

Când tcpdump termină captarea pachetelor, va raporta numărul de:

pachetele `` primite de filtru '' (semnificația acestora depinde de sistemul de operare pe care executați tcpdump și, eventual, de modul în care a fost configurat sistemul de operare - dacă a fost specificat un filtru pe linia de comandă, pachete indiferent dacă au fost potrivite de expresia filtrului, iar pe alte OS-uri contează doar pachetele care au fost potrivite de expresia filtrului și au fost procesate de tcpdump );

pachetele `` scăpate 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 rulează tcpdump , dacă OS raportează acele informații către aplicații; dacă nu, va fi raportat ca 0).

Pe platformele care suportă semnalul SIGINFO, cum ar fi majoritatea BSD-urilor, acesta va raporta aceste constatări atunci când primește un semnal SIGINFO (generat, de exemplu, prin tastarea caracterului "status", de regulă control-T) și va continua să capteze pachete .

Citirea pachetelor dintr-o interfață de rețea poate necesita privilegii speciale:

Sub SunOS 3.x sau 4.x cu NIT sau BPF:

Trebuie să aveți acces de citire la / dev / nit sau / dev / bpf * .

Sub Solaris cu DLPI:

Trebuie să aveți acces la citire / scriere în pseudo dispozitivul de rețea, de exemplu / dev / le . Cu toate acestea, pe cel puțin unele versiuni ale Solaris, acest lucru nu este suficient pentru a permite tcpdump să capteze în mod promiscuu; pe acele versiuni ale Solaris, trebuie să fiți root, sau tcpdump trebuie să fie instalat setuid la rădăcină, pentru a captura în modul promiscuous. 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ă.

Sub HP-UX cu DLPI:

Trebuie să fiți root sau tcpdump trebuie să fie instalat setuid la root.

Sub IRIX cu snoop:

Trebuie să fiți root sau tcpdump trebuie să fie instalat setuid la root.

Sub Linux:

Trebuie să fiți root sau tcpdump trebuie să fie instalat setuid la root.

Sub Uniri Ultrix și Digital UNIX / Tru64 UNIX:

Orice utilizator poate capta traficul de rețea cu tcpdump . Cu toate acestea, niciun utilizator (nici măcar super-utilizatorul) nu poate captura în modul promiscuos pe o interfață, cu excepția cazului în care super-utilizatorul a activat funcția promiscuoasă pe interfața respectivă folosind pfconfig (8) și nici un utilizator ) poate capta traficul unicast primit de către sau trimis de mașină pe o interfață, cu excepția cazului în care super-utilizatorul a activat copierea tuturor modurilor pe acea interfață utilizând pfconfig , astfel încât captarea de pachete utilă pe o interfață probabil necesită fie un mod promiscuuos, - funcționarea tuturor modurilor sau ambele moduri de funcționare să fie activată pe acea interfață.

Sub BSD:

Trebuie să aveți acces de citire la / dev / bpf * .

Citirea unui fișier de pachete salvat nu necesită privilegii speciale.

OPȚIUNI

-A

Încercați să convertiți adresele de rețea și de difuzare la nume.

-c

Ieșiți după primirea pachetelor de numărare .

-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 file_size și, dacă da, închideți fișierul de salvare curent și deschideți unul nou. Salvarea fișierelor după primul fișier de salvare va avea numele specificat cu flagul -w , cu un număr după acesta, începând de la 2 și continuând în sus. Unitățile de file_size sunt milioane de octeți (1.000.000 octeți, nu 1.048.576 octeți).

-d

Dați codul de potrivire a pachetelor compilate într-o formă citibilă la om la ieșirea standard și opriți-le.

-dD

Dump codul de potrivire a pachetelor ca un fragment de program C.

-DDD

Dump codul de potrivire a pachetelor ca numere zecimale (precedate de un număr).

-e

Imprimați antetul nivelului de legătură pe fiecare linie de memorie.

-E

Utilizați algo: secret pentru a decripta pachetele ESP IPsec. Algoritmii pot fi des- cbc , 3des-cbc , blowfish- cbc , rc3-cbc , cast128-cbc sau nici unul . Valoarea implicită este des-ccc . Abilitatea de a decripta pachetele este prezentă numai dacă tcpdump a fost compilat cu criptografia activată. secretul textului ascii pentru cheia secret ESP. Nu putem să luăm valoare binară arbitrară în acest moment. Opțiunea presupune ESP RFC2406, nu RFC1827 ESP. Opțiunea este numai pentru depanare, iar utilizarea acestei opțiuni cu cheia cu adevărat "secretă" este descurajată. Prin prezentarea cheii secrete IPsec pe linia de comandă, aceasta este vizibilă pentru alții, prin ps (1) și alte ocazii.

-f

Imprimați adresele de internet "străine" numeric, mai degrabă decât simbolic (această opțiune este destinată să provoace distrugeri grave ale creierului de pe serverul serverului Sun - de obicei se blochează pentru totdeauna traducerea numerelor de internet non-locale).

-F

Utilizați fișierul ca intrare pentru expresia filtrului. O expresie suplimentară dată în linia de comandă este ignorată.

-i

Ascultați pe interfață . Dacă nu este specificat, tcpdump caută lista interfeței de sistem pentru cea mai mică interfață numerotată, configurată (fără loopback). Legăturile sunt rupte prin alegerea celei mai vechi meciuri.

Pe sistemele Linux cu kerneluri 2.2 sau mai noi, un argument de interfață `` orice '' poate fi folosit pentru a capta pachete din toate interfețele. Rețineți că capturile de pe dispozitivul "orice" nu vor fi efectuate în mod 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 modulul fișier. Această opțiune poate fi utilizată de mai multe ori pentru a încărca mai multe module MIB în tcpdump .

-N

Nu convertiți adresele gazdă în nume. Acest lucru poate fi folosit pentru a evita căutările DNS.

-NN

Nu convertiți 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ă dați acest pavilion, 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 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ă (liniștită?). 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 versiuni de protocol în specificația ESP / AH, tcpdump nu poate deduce versiunea protocolului ESP / AH.

-r

Citiți pachetele din fișier (care a fost creat cu opțiunea -w). Intrarea standard este utilizată dacă fișierul 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 SunOS lui, minim este de fapt 96). 68 de octeți este adecvată pentru IP, ICMP, TCP și UDP, dar poate î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ă limitați accesul la cel mai mic număr care va capta informația de protocol care vă interesează. Setarea în mod automat la 0 înseamnă utilizarea lungimii necesare pentru a prinde pachetele întregi.

-T

Forțe de pachete selectate după " expresie " pentru a fi interpretate tipul specificat. În prezent, tipurile cunoscute sunt cnfp (protocolul Cisco NetFlow), rpc (Remote Procedure Call), rtp (protocolul aplicațiilor în timp real), rtcp (protocolul de control al aplicațiilor în timp real), snp (Simple Network Management Protocol) ), și wb (White Board distribuit).

-t

Nu imprimați o etichetă de timp pe fiecare linie de depozitare.

-tt

Imprimați o marcă de timp neformată pe fiecare linie de memorie.

-U

Creează privilegii root și modifică ID-ul utilizatorului în ID-ul utilizatorului și grupului în grupul principal de utilizatori .

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 nedecupate NFS.

-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

Chiar mai mare ieșire. De exemplu, câmpurile suplimentare sunt tipărite din pachetele de răspuns NFS, iar pachetele SMB sunt complet decodate.

-vvv

Chiar mai mare ieșire. De exemplu, opțiunile telnet SB ... SE sunt tipărite integral. Opțiunile telnet -X sunt tipărite și în hex.

-w

Scrieți pachetele brute în fișier, în loc să le parchezi și să le tipăriți. Ele pot fi imprimate mai târziu cu opțiunea -r. Ieșirea standard este utilizată dacă fișierul este `` - ''.

-X

Imprimați fiecare pachet (minus antetul nivelului de legătură) în hex. Cel mai mic dintre întregii pachete sau octeți snaplen va fi tipărit. 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 placa necesară.

-X

Când tipăriț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 de asemenea setat, unele părți ale unor pachete pot fi imprimate în hex / ascii.

expresie

selectează ce pachete vor fi eliminate. Dacă nici o expresie nu este dată, toate pachetele de pe net vor fi eliminate. În caz contrar, numai pachetele pentru care expresia este "adevărată" vor fi eliminate.

Expresia constă în una sau mai multe primitive. 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

calificativele spun ce fel de lucru se referă la numele de id sau la număr. Tipurile posibile sunt host , net și port . De exemplu, "host foo", "net 128.3", "port 20". Dacă nu există nici un calificativ de tip, se presupune gazdă .

dir

calificativele specifică o anumită direcție de transfer către și / sau de la id . Direcțiile posibile sunt src , dst , src sau dst și src și dst . De exemplu, `src foo ',` dst net 128.3', `src sau dst port ftp-data '. Dacă nu există nici un calificativ dir, se presupune că src sau dst . Pentru straturile de legătură "null" (de exemplu protocoale punct-la-punct, cum ar fi alunecarea), calificările de intrare și ieșire pot fi utilizate pentru a specifica direcția dorită.

proto

calificatorii restricționează potrivirea unui anumit protocol. Prototipurile posibile sunt: eter , fddi , tr , ip , ip6 , arp , rarp , decnet , tcp și udp . 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ă), "bare net" înseamnă "bar net net" sau "port 53" portul (tcp sau udp) 53 '.

["fddi" este de fapt un pseudonim 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 tip Ethernet, astfel încât să puteți filtra aceste câmpuri FDDI la fel ca în cazul câmpurilor Ethernet analogice. Antetele FDDI conțin și alte câmpuri, dar nu le puteți numi explicit într-o expresie filtru.

Î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: gateway , difuzare , expresii mai mici , mai mari și aritmetice. Toate acestea sunt descrise mai jos.

Expresiile mai complexe ale filtrelor sunt construite folosind cuvintele și , sau nu combinând primitivele. 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, portul `tcp dst port ftp sau ftp-data sau domeniu 'este exact la fel ca` tcp dst port ftp sau tcp dst port ftp-data sau tcp dst port domain'.

Substanțele acceptabile sunt:

host gazdă dst

Adevărat dacă câmpul de destinație IPv4 / v6 al pachetului este gazdă , care poate fi fie o adresă, fie un nume.

src host gazdă

Adevărat dacă câmpul sursă IPv4 / v6 al pachetului este gazdă .

gazdă gazdă

Adevărat dacă fie gazda este sursa sau destinația pachetului IPv4 / v6. Oricare dintre expresiile gazdă de mai sus poate fi prefixată cu cuvintele cheie, ip , arp , rarp sau ip6 ca în:

ip host gazdă

care este echivalentă cu:

eter proto \ ip și gazdă gazdă

Dacă gazda este un nume cu mai multe adrese IP, fiecare adresă va fi verificată pentru o potrivire.

eter dst ehost

Este adevărat dacă adresa destinației Ethernet este ehost . Ehost poate fi fie un nume din / etc / eter sau un număr (vedeți eterii (3N) pentru formatul numeric).

ether src ehost

Adevărat dacă adresa sursă a rețelei Ethernet este ehost .

ehost gazdă ehost

Adevărat dacă sursa sau adresa destinației Ethernet este ehost .

gateway gazdă

Adevărat dacă pachetul a folosit gazda ca o poartă. De exemplu, sursa sau destinația Ethernet a fost gazdă, dar nici sursa IP, nici destinația IP nu au 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 a mașinii (fișier cu nume de gazdă, DNS, NIS etc.), cât și de rezoluția adresei gazdă-nume-la-Ethernet mecanism (/ etc / eter, etc.). (O expresie echivalenta este

ehost gazdă ehost și gazdă gazdă nu

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 de destinație IPv4 / v6 a pachetului are un număr de rețea net . Net poate fi fie un nume din / etc / networks sau un număr de rețea (pentru detalii, vezi rețelele (4) ).

src net net

Adevărat dacă adresa sursă IPv4 / v6 a pachetului are un număr de rețea net .

net net

Este adevărat dacă adresa IPv4 / v6 sau adresa destinație a pachetului are un număr de rețea net .

masca net masca net masca

Adevărat dacă adresa IP se potrivește net cu masca netă specifică. Poate fi calificat cu src sau dst . Rețineți că această sintaxă nu este validă pentru net IPv6.

net net / len

Adevărat dacă adresa IPv4 / v6 se potrivește net cu un biți len masă netă largă. Poate fi calificat cu src sau dst .

dst port port

Adevărat dacă pachetul este ip / tcp, ip / udp, ip6 / tcp sau ip6 / udp și are o valoare de port destinație a portului . Portul poate fi un număr sau un nume utilizat în / etc / services (vezi 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 numeric sau ambiguu, numai numărul portului este bifat (de ex. Portul dst 513 va imprima atât traficul tcp / login, cât și traficul udp / cine și domeniul port va imprima atât traficul tcp / domain, cât și traficul de domenii).

port port port src

Adevărat dacă pachetul are o valoare a portului sursă.

port port

Este adevărat dacă portul sursă sau destinație al pachetului este port . Oricare dintre expresiile portului de mai sus poate fi prefixată cu cuvintele cheie, tcp sau udp , ca în:

port port tcp src

care se potrivește numai pachetelor tcp a căror port sursă este port .

mai puțin lungime

Adevărat dacă pachetul are o lungime mai mică sau egală cu lungimea . Aceasta este echivalentă cu:

len <= lungime .

o lungime mai mare

Este adevărat dacă pachetul are o lungime mai mare sau egală cu lungimea . Aceasta este echivalentă cu:

len> = lungime .

protocol prototip ip

Adevărat dacă pachetul este un pachet IP (vezi ip (4P)) protocol protocol protocol . Protocolul poate fi un număr sau unul dintre numele 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.

protocol prototip ip6

Adevărat dacă pachetul este un pachet de protocol protocol IPv6. Rețineți că acest primitiv nu urmărește lanțul antetului de protocol.

Protocolul prototipului ip6

Adevărat dacă pachetul este pachet IPv6 și conține antet de protocol cu protocol de tip în lanțul antetului său de protocol. De exemplu,

Protocolul 6 al ip6

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.

protocol protochin ip

Echivalent cu protocolul protochain ip6 , dar acesta este pentru IPv4.

difuzarea eterului

Este adevărat dacă pachetul este un pachet de difuzare ethernet. Cuvantul eteric este optional.

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

Este adevărat dacă pachetul este un pachet Ethernet multicast. Cuvantul eteric este optional. Aceasta este o stenogramă 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.

protocolul de eter

Adevărat dacă pachetul este de protocol de tip eter. Protocolul poate fi un număr sau unul dintre numele ip , ip6 , arp , rarp , atalk , aarp , decnet , sca , lat , mopdl , moprc , iso , 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 cea mai mare parte a acestor protocoale, identificarea protocolului provine din antetul 802.2 Logical Link Control (LLC) este, de obicei, stratificat pe partea de sus a antetului FDDI sau Token Ring.

Când se filtrează majoritatea identificatorilor de protocol pe FDDI sau pe Token Ring, tcpdump verifică numai câmpul ID al unui antet LLC în așa-numitul format SNAP cu OUI 0x000000 pentru Ethernet încapsulat; nu verifică dacă pachetul este în format SNAP cu OUI de 0x000000.

Excepțiile sunt iso , 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 atalk acolo unde verifică un pachet format SNAP cu OUI de 0x080007 și cu eticheta Appletalk.

În cazul Ethernet, tcpdump verifică câmpul de tip Ethernet pentru majoritatea acestor protocoale; excepțiile sunt iso , sap și netbeui , pentru care verifică un cadru 802.3 și apoi verifică antetul LLC așa cum procedează pentru FDDI și Token Ring, atalk , unde verifică atât etalonul Appletalk într-un cadru Ethernet, cât și pentru În pachetul format SNAP, așa cum se întâmplă 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 în 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 un nume de gazdă DECNET. [Suportul pentru numele de gazdă DECNET este disponibil numai pe sistemele Ultrix care sunt configurate să ruleze DECNET.]

decnet dst gazdă

Adevărat dacă adresa de destinație DECNET este gazdă .

gazdă host gazdă

Este adevărat dacă gazda este fie sursa DECNET, fie adresa destinație.

ip , ip6 , arp , rarp , atalk , aarp , decnet , iso , 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 cum să analizeze aceste protocoale.

vlan [vlan_id]

Este adevărat dacă pachetul este un pachet VLAN IEEE 802.1Q. Dacă este specificat [vlan_id] , este adevărat că pachetul are vlan_id specificat. Rețineți că primul cuvânt cheie vlan întâlnit în expresie modifică decalajul de decodificare pentru restul expresiei , presupunând 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.

Protocolul izo proto

Adevărat dacă pachetul este un pachet OSI de protocol protocol protocol . Protocolul poate fi un număr sau unul dintre numele 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 lucrare incompletă de analiză a acestor 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 speciali pentru pachete de date. Pentru a accesa datele din interiorul pachetului, utilizați următoarea sintaxă:

proto [ expr : dimensiune ]

Proto este unul din eter, fddi, tr, ppp, alunecare, link, ip, arp, rarp, tcp, udp, icmp sau ip6 și indică stratul de protocol pentru operația index. ( eter, fddi, tr, ppp, alunecare și legătură toate se referă la stratul de legătură.) Rețineți că tipurile de protocol tcp, udp și alte tipuri de protocol de nivel superior se aplică doar IPv4, nu IPv6 (acest lucru va fi stabilit în viitor). Debitul octet, raportat la stratul de protocol indicat, este dat de expr . Dimensiunea 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 cheie len , 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 " captează numai datagrame nefragmentate și fragmente zero ale datagramelor fragmentate. Acest control este implicit aplicat operațiilor indexului tcp și udp . De exemplu, tcp [0] înseamnă întotdeauna primul octet al antetului TCP și nu înseamnă niciodată primul byte al unui fragment care intervine.

Unele deviații și valori de câmp pot fi exprimate ca nume, nu ca valori numerice. Următoarele deviații de câmpuri pentru antetul protocolului sunt disponibile: icmptype (câmp tip ICMP), icmpcode (câmp cod ICMP) și tcpflags ( câmpuri TCP-uri).

Următoarele valori ale câmpului tip ICMP sunt disponibile: 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 .

Sunt disponibile următoarele valori pentru câmpurile TCP : tcp-fin , tcp-syn , tcp-rst , tcp-push , tcp-push , tcp-ack , tcp-urg .

Primitivele pot fi combinate folosind:

Un grup parantez de primitivi și operatori (parantezele sunt speciale pentru Shell și trebuie scăpate).

Negarea (" ! " Sau " nu ").

Concatenare (" && " 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ă expresiile și jetoanele, nu juxtapunerea, sunt acum 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

care nu ar trebui să fie confundate cu

nu (gazdă vs sau as)

Argumentele de expresie pot fi transmise la tcpdump fie ca un singur argument, fie ca mai multe argumente, indiferent care este 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

Pentru a imprima toate pachetele care sosesc sau pleacă de la apus :

tcpdump gazdă apus de soare

Pentru a imprima traficul între helios și fie fierbinte, fie ace :

helios gazdă tcpdump și \ (fierbinte sau ace \)

Pentru a imprima toate pachetele IP între ace și orice gazdă, cu excepția heliilor :

tcpdump ip ace gazdă și nu helios

Pentru a tipări întregul trafic între gazdele locale și gazdele de la Berkeley:

tcpdump net ucb-eter

Pentru a imprima toate traficul ftp prin interfața gateway-ului internet: (rețineți că expresia este citată pentru a împiedica shell-ul să interpreteze parantezele:

tcpdump "snup și gateway (port ftp sau ftp-data) '

Pentru a imprima traficul care nu este furnizat și nici nu este destinat gazdelor locale (dacă intrați pe o altă rețea, aceste lucruri nu ar trebui să se realizeze niciodată pe rețeaua locală).

tcpdump ip și netnet net localnet

Pentru a imprima pachetele de început și de sfârșit (pachetele SYN și FIN) pentru fiecare conversație TCP care implică o gazdă non-locală.

tcpdump 'tcp [tcpflags] & (tcp-syn | tcp-fin)! = 0 și nu src și dst net localnet '

Pentru a imprima pachete IP mai lungi de 576 de octeți trimisi prin modulul gateway:

tcpdump 'snup și gateway ip [2: 2]> 576'

Pentru a imprima pachete IP difuzate sau multicast care nu au fost trimise prin difuzare sau multicast prin Ethernet:

tcpdump 'eter [0] & 1 = 0 și ip [16]> = 224'

Pentru a imprima toate pachetele ICMP care nu sunt solicitări / răspunsuri ecou (adică nu pachete ping):

tcpdump 'icmp [icmptype]! = icmp-echo și icmp [icmptype]! = icmp-echoreply'

FORMAT DE IESIRE

Ieșirea din 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. Pe etalon, se imprimă adresa sursă și destinația, protocolul și lungimea pachetului.

În rețelele FDDI, opțiunea "-e" determină tcpdump să imprime câmpul "control cadru", adresa sursă și destinație și lungimea pachetului. (Câmpurile de tip "control frame") guvernează interpretarea restului pachetului.Pachetele normale (cum ar fi cele care conțin datagrame IP) sunt pachete "async", cu o valoare de prioritate între 0 și 7, de exemplu " async4 ". pachetele se presupune că conțin un pachet de control logic 802.2 (LLC), antetul LLC este tipărit dacă nu este o datagramă ISO sau un pachet SNAP așa-numit.

În rețelele Token Ring, opțiunea "-e" determină tcpdump să imprime câmpurile "control acces" și "control cadru", adresele 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ă.

(NB: Următoarea descriere presupune familiarizarea cu algoritmul de comprimare SLIP descris în RFC-1144.)

În legăturile SLIP, se imprimă 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 de legătură pentru pachetele IP . 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 sa schimbat numărul de ordine (sau numărul de ordine și ack). 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ă un scurt eșantion luat de la începutul unui "rlogin" de la rtsg gazdă la csam gazdă:

arp cine-are csam spune rtsg arp reply csam este-la CSAM

Prima linie spune că rtsg a trimis un pachet arp care solicită adresa Ethernet a gazdei csam pe Internet. Csam răspunde cu adresa sa de ethernet (în acest exemplu, adresele ethernet sunt în capace și adresele de internet cu litere mici).

Acest lucru ar arăta mai puțin redundant dacă am fi făcut tcpdump -n :

arp care-a 128.3.254.6 spune 128.3.254.68 răspuns arp 128.3.254.6 este-la 02: 07: 01: 00: 01: c4

Dacă am fi făcut tcpdump -e , faptul că primul pachet este difuzat și cel de-al doilea este punct-la-punct ar fi vizibil:

RTSG Broadcast 0806 64: arp care-a spus csam rtsg CSAM RTSG 0806 64: ars răspuns csam este-la CSAM

Pentru primul pachet se spune că adresa sursei Ethernet este RTSG, destinația este adresa de difuzare Ethernet, câmpul tip conține hex 0806 (tip ETHER_ARP) și lungimea totală a fost de 64 octeți.

Pachete TCP

(NB: 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 vă vor fi de folos.)

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. Steagurile reprezintă 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 secvenței următoarelor date așteptate în cealaltă direcție pe această conexiune. Fereastra este numărul de octeți din spațiul tampon de recepție disponibil în cealaltă direcție pe această conexiune. Urg indică faptul că există date "urgente" în pachet. Opțiunile sunt opțiunile tcp închise în paranteze unghiulare (de exemplu, ).

Src, dst și steagurile 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 de la host rtsg la host csam .

rtsg.1023> csam.login: S 768512: 768512 (0) câștiga 4096 csam.login> rtsg.1023: S 947648: 947648 (0) ack 768513 câștiga 4096 rtsg.1023> csam. Logare: . ack 1 victorie 4096 rtsg.1023> csam.login: P 1: 2 (1) ack 1 victorie 4096 csam.login> rtsg.1023:. ack 2 win 4096 rtsg.1023> csam.login: P 2:21 (19) ack 1 victorie 4096 csam.login> rtsg.1023: P 1: 2 (1) ack 21 victor 4077 csam.login> rtsg.1023: P 2: 3 (1) ack 21 victor 4077 urg 1 csam.login> rtsg.1023: P 3: 4 (1) ack 21 victor 4077 urg 1

Prima linie spune că portul tcp 1023 pe rtsg a trimis un pachet de conectare la port pe csam. S indică faptul că pavilionul SYN a fost setat. Numărul secvenței de pachete a fost de 768512 și nu conține date. (Notatia este `primul: ultimul (nbytes) ', ceea ce inseamna` numere de secventa mai intai , dar fara a include ultimul, care este nbytes octeti de date de utilizator'). a existat o opțiune de dimensiune maximă a segmentului care solicită o mss de 1024 octeți.

Csam răspunde cu un pachet similar, cu excepția faptului că include un ack de tip piggyback pentru SYN-ul lui rtsg. 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ă când 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 octet relativ î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 secvență inițiale.

Pe linia 6, 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 7, csam spune că datele primite sunt trimise de către rtsg până la, dar fără octeți 21. Cele mai multe dintre aceste date sunt aparent așezate în tamponul socket, din moment ce 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. Pe linii 8 și 9, csam trimite doi octeți de date urgente, împinse la rtsg.

Dacă imaginea a fost suficient de mică pentru ca tcpdump să nu captureze întregul antet TCP, acesta interpretează cât mai mult din antet posibil și apoi raportează "[[| tcp ] '' pentru a indica că restul nu poate fi interpretat. Dacă antetul conține o opțiune falsă (una cu o lungime care este fie prea mică, fie dincolo de capătul antetului), tcpdump îl raportează drept "[ opt rău ]" și nu interpretează alte opțiuni (din moment ce este imposibil de spus unde încep). Dacă lungimea antetului indică că există opțiuni, dar lungimea datagramei IP nu este suficient de lungă pentru ca opțiunile să fie acolo, tcpdump îl raportează ca `` [ lungimea HDD rău ] ''.

Captarea pachetelor TCP cu combinații speciale de pavilioane (SYN-ACK, URG-ACK etc.)

Există 8 biți în secțiunea de biți de control al antetului 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 de 3-way handshake când inițializează o nouă conexiune; secvența de conectare cu privire la biții de control TCP este

1) Apelantul trimite SYN

2) Primitorul răspunde cu SYN, ACK

3) Apelantul trimite ACK

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. Avem nevoie de o expresie corectă a filtrului pentru 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 de care suntem interesați. Am numerotat biții în acest octet de la 0 la 7, din 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

și reprezentarea zecimală este

7 6 5 4 3 2 1 0 0 * 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 a 13-a 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. Să vedem 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 |

Acum, biții 1 și 4 sunt stabiliți în octetul 13. Valoarea binară a octetului 13 este


00010010

care se traduce în zecimal

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

Acum, nu putem folosi doar 'tcp [13] == 18' în expresia filtru tcpdump , deoarece 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ă expresia filtrului tcpdump

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

Acest lucru spune că portul care, pe actinida gazdă, a trimis o datagramă udp către portul care, pe difuzarea gazdei, 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 apelurile Sun RPC (RFC-1050) către NFS.

Cereri pentru serverul de nume UDP

(NB: Următoarea descriere presupune familiarizarea cu protocolul Serviciului de Domeniu descris în RFC-1035. Dacă nu sunteți familiarizat cu protocolul, următoarea descriere va apărea în limba greacă.)

Numele solicitărilor serverului sunt formatate ca

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

Gazda h2opolo a cerut serverului de domeniu pe helios pentru o înregistrare de adresă (qtype = A) asociată cu numele ucbvax.berkeley.edu. ID-ul interogării a fost "3". "+" Indică faptul că a fost setat stegul de recurs dorit . 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 cea normală, interogare , 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 era unul normal, C_IN și omite. Orice alt qclass ar fi fost imprimat 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ările autorității sau secțiunea de înregistrări suplimentare, ancount , nscount sau arcount sunt tipărite ca `[ n a] ',` [ n n ] sau "[ n au]" unde n este numărul corespunzător. Dacă oricare dintre biții de răspuns este setat (AA, RA sau rcode) sau oricare dintre biții `must be zero 'sunt setați în octeți doi și trei,' [b2 & 3 = x ] 'este tipărit, unde x este valoarea hex antetul doi și trei.

Răspunsuri la serverul de nume UDP

Răspunsurile serverului de nume sunt formate ca

src> dst: id op rcode steaguri a / n / au tip de date de clasă (len) helios.domain> h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273) helios.domeniu> h2opolo.1537: 2 NXDomain * 0/1/0 (97)

În primul exemplu, helios răspunde la id-ul de interogare 3 de la h2opolo cu 3 înregistrări de răspuns, 3 înregistrări ale serverului de nume și 7 î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 cel de-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. "*" Indică faptul că bitul de răspuns autoritar 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 `- '(recursivă disponibilă, RA, nu este setată) și` |' (mesaj trunchiat, TC, setat). Dacă secțiunea "întrebare" nu conține exact o intrare, este imprimat "[ n q]".

Rețineți că solicitările și răspunsurile serverului de nume tind să fie mari, iar implicit implicit de 68 octeți s-ar putea să nu capteze suficient pachetul de imprimat. Utilizați -s flag pentru a mări snaplen dacă aveți nevoie pentru a investiga serios trafic de server de nume. " 128 " a funcționat bine pentru mine.

Decodificarea SMB / CIFS

tcpdump include decodificarea SMB / CIFS / NBT destul de extinsă pentru datele despre UDP / 137, UDP / 138 și TCP / 139. Unele decodificări primitive ale datelor IPX și NetBEUI SMB sunt de asemenea efectuate.

Implicit se face o decodă destul de minimă, cu o decodare mult mai detaliată dacă se utilizează -v. Fiți avertizat că pachetul SMV -va singur poate ocupa o pagină sau mai multe, deci utilizați doar -v dacă doriți cu adevărat toate detaliile gorale.

Dacă dezactivați sesiunile SMB care conțin șiruri de caractere unicode, atunci este posibil să doriți să setați variabila de mediu USE_UNICODE la 1. Un patch pentru a detecta automat sireturile unicode ar fi binevenit.

Pentru informații despre formatele de pachete SMB și despre ce înseamnă toate domeniile vizitați www.cifs.org sau directorul pub / samba / specs / de pe site-ul dumneavoastră oglindă preferat samba.org. Patch-urile SMB au fost scrise de Andrew Tridgell (tridge@samba.org).

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: răspuns stat len ​​op rezultate sushi.6709> wrl.nfs: 112 readlink fh 21,24 / 10,73165 wrl.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, gazda 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ția a fost un cititor (citiți legătura simbolică) pe mânerul fișierului ( fh ) 21,24 / 10,731657119. (Dacă unul este norocos, ca și în acest caz, mânerul fișierului poate fi interpretat ca o pereche majoră, număr minor de numere de dispozitiv, urmată de numărul inode și numărul de generație.) Wrl răspunde "ok" cu conținutul linkului.

În a treia linie, sushi cere wrlcaute 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 dacă este citit în legătură cu o spec. 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 bytes @ 24576 wrl.nfs> sushi.1372a: răspuns ok 1472 citiți 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 primul rând, sushi cere wrl să citească 8192 octeți din fișierul 21,11 / 12,195, la octetul offset 24576. Răspunsurile Wrl `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.

Rețineți că solicitările NFS sunt foarte mari și că o mare parte din detalii nu vor fi tipărite decât dacă crește viteza . Încercați să utilizați " -s 192 " pentru a viziona traficul NFS.

Pachetele de răspuns NFS nu identifică în mod explicit operația RPC. În schimb, tcpdump ține evidența cererilor "recente" și le potrivește cu răspunsurile folosind ID-ul tranzacției. Dacă un răspuns nu respectă îndeaproape solicitarea corespunzătoare, este posibil să nu fie parsabil.

Solicitări și răspunsuri AFS

Transarc AFS (Andrew File System) cererile și răspunsurile sunt tipărite ca:

src.sport> dst.dport: rx tip de pachet src.sport> dst.dport: rx serviciu de tip pachet apel call-name args src.sport> dst.dport: rx serviciu de tip pachet reply call-name args elvis. 7001> pike.afsfs: rx date fs sunați la redenumiți vechi fid 536876964/1/1 ".newsrc.new" nou fid 536876964/1/1 ".newsrc" pike.afsfs> elvis.7001: rx data fs replică redenumi

În prima linie, elvis-ul gazdă trimite un pachet RX la stiuca. Acesta a fost un pachet de date RX pentru serviciul fs (fileserver) și reprezintă începutul unui apel RPC. Apelul RPC a fost redenumit, cu vechiul ID de fișier director de 536876964/1/1 și un nume vechi al fișierului `.newsrc.new 'și un nou fișier de director de 536876964/1/1 și un nou nume de fișier`. newsrc“. Gazonul gazdă răspunde cu un răspuns RPC la apelul redenumit (care a avut succes, deoarece a fost un pachet de date și nu un pachet de abort).

În general, toate RPC-urile AFS sunt decodificate cel puțin prin numele apelului RPC. Majoritatea RPC-urilor AFS au cel puțin câteva dintre argumentele decodate (în general, doar argumentele "interesante", pentru unele definiții de interesante).

Formatul este destinat să se auto-descrie, dar probabil că nu va fi util pentru oameni care nu sunt familiarizați cu funcționarea AFS și RX.

Dacă parola -v (verbose) este dată de două ori, sunt tipărite pachetele de confirmare și informațiile suplimentare ale antetului, cum ar fi ID-ul apelului RX, numărul de apel, numărul de ordine, numărul de serie și conectorii de pachete RX.

Dacă flagul -v este dat de două ori, se imprimă informații suplimentare, cum ar fi ID-ul apelului RX, numărul de serie și steagurile de pachete RX. Informațiile de negociere MTU sunt, de asemenea, tipărite din pachetele RX ack.

Dacă parametrul -v este dat de trei ori, indicele de securitate și idul de serviciu sunt tipărite.

Codurile de eroare sunt tipărite pentru pachetele abort, cu excepția pachetelor de baliză Ubik (deoarece pachetele de abort sunt folosite pentru a indica un vot da pentru protocolul Ubik).

Rețineți că solicitările AFS sunt foarte mari și multe dintre argumente nu vor fi tipărite decât dacă crește viteza . Încercați să utilizați " -s 256 " pentru a viziona traficul AFS.

Pachetele de răspuns AFS nu identifică în mod explicit operația RPC. În schimb, tcpdump ține evidența solicitărilor "recente" și le potrivește cu răspunsurile folosind numărul de apel și ID-ul serviciului. Dacă un răspuns nu respectă îndeaproape solicitarea corespunzătoare, este posibil să nu fie parsabil.

KIP Appletalk (DDP în UDP)

Pachetele Appletalk DDP încapsulate în datagrame UDP sunt de-încapsulate și eliminate ca pachete DDP (adică, toate informațiile despre antetul UDP sunt eliminate). Fișierul /etc/atalk.names este folosit pentru a traduce numerele net și numerele de noduri la nume. Linile din acest fișier au forma

numarul de telefon 1.254 eter 16.1 icsd-net 1.254.110 as

Primele două linii dau numele rețelelor de appletalk. A treia linie conține numele unei anumite gazde (o gazdă se deosebește de o rețea de octetul 3 în număr - un număr net trebuie să aibă două octeți și un număr gazdă trebuie să aibă trei octeți.) Numărul și numele trebuie să fie separate prin spațiul alb (semne sau file). Fișierul /etc/atalk.names poate conține linii goale sau linii de comentarii (linii care încep cu un "#").

Adresele Appletalk sunt tipărite în forma:

net.host.port 144.1.209.2> icsd-net.112.220 office.2> icsd-net.112.220 jssmag.149.235> icsd-net.2

(În cazul în care /etc/atalk.names nu există sau nu conține o intrare pentru un anumit număr de host / net, adresele sunt tipărite în format numeric.) În primul exemplu, NBP (portul DDP 2) pe net 144,1 nodul 209 trimite la ceea ce asculta pe portul 220 al nodului net icsd 112. A doua linie este aceeași cu excepția faptului că este cunoscut numele complet al nodului sursă ("office"). A treia linie este trimiterea de la portul 235 pe nodul 149 jssmag net pentru difuzarea pe portul NBP icsd-net (rețineți că adresa de difuzare (255) este indicată printr-un nume net fără număr de gazdă - de aceea este o idee bună pentru a păstra numele nodurilor și numele net distincte în /etc/atalk.names).

NBP (protocolul de legare nume) și pachetele ATP (protocol de tranzacție Appletalk) au interpretat conținutul lor. Alte protocoale aruncați doar numele protocolului (sau numărul dacă nu este înregistrat niciun nume pentru protocol) și mărimea pachetului.

Pachetele NBP sunt formate ca următoarele exemple:

icsd-net.112.220> jssmag.2: nbp-lkup 190: "=: LaserWriter @ *" jssmag.209.2> icsd-net.112.220: nbp-reply 190: "RM1140: LaserWriter @ *" 250 techpit.2> -net.112.220: răspuns-nbp 190: "techpit: LaserWriter @ *" 186

Prima linie este o cerere de căutare a numelui pentru laserwriters trimis de host net icsd 112 și difuzată pe jssmag net. ID-ul nbp pentru căutare este 190. A doua linie prezintă un răspuns pentru această solicitare (rețineți că are același id) de la jssmag.209, spunând că are o resursă laserwriter numită "RM1140" înregistrată pe portul 250. Al treilea line este un alt răspuns la aceeași cerere, spunând că techpit-ul gazdelor are un laserwriter "techpit" înregistrat pe portul 186.

Formatul de pachete ATP este demonstrat de următorul exemplu:

jssmag.209.165> helios.132: atp-req 12266 <0-7> 0xae030001 helios.132> jssmag.209.165: atp-resp 12266: 0 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 1 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 2 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 3 (512) 0xae040000 helios.132> jssmag.209.165: resp 12266: 4 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 5 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 6 (512) 0xae040000 helios.132> jssmag. 209.165: atp-resp * 12266: 7 (512) 0xae040000 jssmag.209.165> helios.132: atp-req 12266 <3,5> 0xae030001 helios.132> jssmag.209.165: atp-resp 12266: 3 (512) 0xae040000 helios .132> jssmag.209.165: atp-resp 12266: 5 (512) 0xae040000 jssmag.209.165> helios.132: atp-rel 12266 <0-7> 0xae030001 jssmag.209.133> helios.132: atp-req * 12267 <0 -7> 0xae030002

Jssmag.209 inițiază ID-ul tranzacției 12266 cu helio gazdă solicitând până la 8 pachete (`<0-7> '). Numărul hexajului de la capătul liniei este valoarea câmpului "userdata" din cerere.

Helios răspunde cu pachete de 8 512 de octeți. Codul `: digit 'care urmează id-ului de tranzacție dă numărul de secvență de pachete din tranzacție, iar numărul în paranteză reprezintă cantitatea de date din pachet, excluzând antetul atp. "*" Din pachetul 7 indică faptul că bitul EOM a fost setat.

Jssmag.209 cere ca pachetele 3 & 5 să fie retransmise. Helios le trimite, atunci jssmag.209 eliberează tranzacția. În cele din urmă, jssmag.209 inițiază următoarea solicitare. "*" Din cerere indică faptul că XO ("exact o dată") nu a fost setat.

Fragmentarea IP

Datele grafice Internet fragmentate sunt tipărite ca

(fragment id : dimensiune @ offset +) (fragment id : dimensiune @ offset )

(Prima formă indică mai multe fragmente, al doilea indică faptul că acesta este ultimul fragment.)

Id-ul este id-ul fragmentului. Dimensiunea este dimensiunea fragmentului (în octeți), cu excepția antetului IP. Offset este offsetul acestui fragment (în octeți) din datagrama originală.

Informațiile despre fragmente sunt generate pentru fiecare fragment. Primul fragment conține antetul protocolului de nivel superior și informația frag este imprimată după informațiile de protocol. Fragmentele după prima nu conțin antet de nivel superior al protocolului și informația frag este imprimată după adresele sursă și destinație. De exemplu, aici face parte dintr-un ftp de la arizona.edu la lbl-rtsg.arpa printr-o conexiune CSNET care nu pare să se ocupe de datagrame de 576 octeți:

date arizona.ftp> rtsg.1170:. 1024: 1332 (308) ack 1 victorie 4096 (frag 595a: 328 @ 0 +) arizona> rtsg: (frag 595a: 204 @ 328) rtsg.1170> date arizona.ftp:. ack 1536 câștiga 2560

Există câteva lucruri de remarcat aici: În primul rând, adresele din linia a doua nu includ numerele porturilor. Acest lucru se datorează faptului că informațiile din protocolul TCP sunt toate în primul fragment și nu avem nicio idee despre numărul portului sau secvenței atunci când tipărim fragmentele ulterioare. În al doilea rând, informațiile despre secvența tcp din prima linie sunt tipărite ca și cum ar fi existat 308 octeți de date de utilizator când, de fapt, există 512 octeți (308 în primul fragment și 204 în cel de-al doilea). Dacă sunteți în căutarea de găuri în spațiul de secvență sau încercarea de a se potrivi cu acks cu pachete, acest lucru vă poate păcăli.

Un pachet cu IP nu fragment fragmente este marcat cu un trailing (DF) .

Marcaje temporale

În mod prestabilit, toate liniile de ieșire sunt precedate de un marcaj de timp. Marcajul de timp este ora curentă a formei

hh: mm: ss.frac

și este la fel de precis ca și ceasul kernel-ului. Eticheta de timp reflectă momentul în care kernelul a văzut primul pachet. Nu se face nici o încercare de a lua în calcul decalajul dintre momentul în care interfața Ethernet a scos pachetul din fir și când kernelul a întreținut întreruperea noului pachet.

VEZI SI

traficul (1C), nit (4P), bpf (4), pcap (3)

Important: Utilizați comanda om ( % man ) pentru a vedea cum se utilizează o comandă pe computerul dvs. particular.