Solicitări http Tcpdump. Tcpdump instrucțiuni și exemple. Afișați numai trafic ip6

22.05.2023 Știri

Acest tutorial vă va arăta cum să izolați traficul în diferite moduri — de la IP, la port, la protocol, la trafic la nivelul aplicației — pentru a vă asigura că găsiți exact ceea ce aveți nevoie cât mai repede posibil.

tcpdump este instrumentul pe care toată lumea ar trebui să-l învețe ca bază pentru analiza pachetelor.

Instalați tcpdump cu apt install tcpdump (Ubuntu) sau yum install tcpdump (Redhat/Centos)

Să începem cu o comandă de bază care ne va aduce trafic HTTPS:

tcpdump -nn S X portul 443

04:45:40.573686 IP 78.149.209.110.27782 > 172.30.0.144 .443 : Steaguri [.], ack 278239097, câștig 28, opțiuni, lungime 0 0x0000: 4500 0034 0014 0000 2e06 c005 4e8e d16e E..4........N..n 0x0010: ac1e 0090 6c86 01bb 8e0a b73e 1095 9779 ....l......>...y 0x0020: 8010 001c d202 0000 0101 080a 3803 7b55 ............8.(U 0x0030: 4801 8100

Puteți obține un singur pachet cu -c 1 , sau n număr cu -c n .

Aceasta a arătat ceva trafic HTTPS, cu un afișaj hex vizibil în partea dreaptă a ieșirii (din păcate, este criptat). Amintiți-vă doar că atunci când aveți îndoieli, rulați comanda de mai sus cu portul de care sunteți interesat și ar trebui să fiți pe drum.

Exemple

PacketWizard™ nu este chiar o marcă comercială, dar ar trebui să fie.

un practicant care se pregătește să ruleze tcpdump

Acum că puteți obține trafic de bază, să trecem prin numeroase exemple de care probabil veți avea nevoie în timpul slujbei dvs. în rețea, securitate sau ca orice tip de PacketWizard™.

Totul pe o interfață

Vezi doar ce se întâmplă, uitându-te la ceea ce lovește interfața ta.

Sau ia toate interfețe cu -i orice .

tcpdump -i eth0

Găsiți trafic după IP

Una dintre cele mai frecvente interogări, folosind host , puteți vedea traficul care merge către sau de la 1.1.1.1.

Tipuri de expresii:

gazdă, rețea și port.

src și dst.

gazdă, rețea și port.

tcp, udp, icmp și multe altele.

gazdă tcpdump 1.1.1.1

06:20:25.593207 IP 172.30.0.144.39270 > one.one.one.one .domain : 12790+ A? google.com. (28) 06:20:25.594510 IP one.one.one.one .domain > 172.30.0.144.39270: 12790 1/0/0 A 172.217.15.78 (44)

Dacă doriți să vedeți traficul doar într-o direcție sau în alta, puteți utiliza src și dst .

tcpdump src 1.1.1.1
tcpdump dst 1.0.0.1

Găsirea pachetelor în funcție de rețea

Pentru a găsi pachete care merg către sau de la o anumită rețea sau subrețea, utilizați opțiunea net.

Puteți combina acest lucru și cu opțiunile src și dst.

tcpdump net 1.2.3.0/24

Obțineți conținutul pachetului cu ieșire Hex

Ieșirea hexagonală este utilă atunci când doriți să vedeți conținutul pachetelor în cauză și este adesea folosită cel mai bine atunci când izolați câțiva candidați pentru o examinare mai atentă.

tcpdump -c 1 -X icmp

rezumat

Iată detaliile la pachet.

  1. tcpdump este un instrument valoros pentru oricine caută să intre în rețele sau .
  2. Modul brut de interfață cu traficul, combinat cu precizia pe care o oferă în inspectarea pachetelor, îl fac cel mai bun instrument posibil pentru învățarea TCP/IP.
  3. Analizatoarele de protocol precum Wireshark sunt grozave, dar dacă vrei să stăpânești cu adevărat pachetul-fu, trebuie să devii mai întâi unul cu tcpdump.

Ei bine, acest manual ar trebui să vă dea putere, dar pagina de manual ar trebui să fie întotdeauna la îndemână pentru cele mai avansate și unice scenarii de utilizare. Sper din tot sufletul că acest lucru v-a fost de folos și nu ezitați dacă aveți întrebări.

Note

  1. În prezent, scriu (un fel de) o carte despre tcpdump pentru No Starch Press.
  2. Imaginea principală este de la SecurityWizardry.com.
  3. Unele dintre filtrele de izolare împrumutate de la

Dacă trebuie să analizați sau să interceptați pachete de rețea în Linux, cel mai bun mod de a face acest lucru este să utilizați un utilitar de consolă tcpdump. Dar problema apare în managementul său destul de complex. Utilizatorul obișnuit va găsi incomod să lucreze cu utilitarul, dar acest lucru este doar la prima vedere. Articolul vă va spune cum funcționează tcpdump, ce sintaxă are, cum să îl utilizați și vă va oferi, de asemenea, numeroase exemple de utilizare.

Citește și: Ghiduri pentru configurarea unei conexiuni la Internet în Ubuntu, Debian, Ubuntu Server

Majoritatea dezvoltatorilor de sisteme de operare bazate pe Linux includ utilitarul tcpdump în lista celor preinstalate, dar dacă din anumite motive lipsește din distribuția dvs., îl puteți descărca și instala oricând prin "Terminal". Dacă sistemul de operare se bazează pe Debian și acesta este Ubuntu, Linux Mint, Kali Linux și altele asemenea, trebuie să rulați această comandă:

sudo apt install tcpdump

În timpul instalării, trebuie să introduceți o parolă. Vă rugăm să rețineți că nu se afișează la tastare; de ​​asemenea, trebuie să introduceți simbolul pentru a confirma instalarea "D"și apăsați introduce.

Dacă aveți Red Hat, Fedora sau CentOS, comanda de instalare va arăta astfel:

sudo yam install tcpdump

După ce utilitarul este instalat, îl puteți utiliza imediat. Acest lucru și multe altele vor fi discutate în continuare în text.

Sintaxă

Ca orice altă comandă, tcpdump are propria sa sintaxă. Cunoscând-o, puteți seta toți parametrii necesari care vor fi luați în considerare la executarea comenzii. Sintaxa este următoarea:

opțiuni tcpdump -i filtre de interfață

Când utilizați comanda, trebuie să specificați interfața pentru urmărire. Filtrele și opțiunile nu sunt variabile necesare, dar permit o personalizare mai flexibilă.

Opțiuni

Deși opțiunea nu trebuie specificată, trebuie totuși să le enumerați pe cele disponibile. Tabelul nu arată întreaga lor listă, ci doar pe cele mai populare, dar sunt mai mult decât suficiente pentru a rezolva majoritatea sarcinilor.

Opțiune Definiție
-A Vă permite să sortați pachetele în format ASCII
-l Adaugă funcționalitate de defilare
-i După intrare, trebuie să specificați interfața de rețea care va fi monitorizată. Pentru a începe monitorizarea tuturor interfețelor, introduceți cuvântul „oricare” după opțiune.
-c Încheie procesul de urmărire după verificarea numărului specificat de pachete
-w Generează un fișier text cu raportul de inspecție
-e Afișează nivelul de conexiune la internet al pachetului de date
-L Afișează numai acele protocoale care sunt acceptate de interfața de rețea specificată
-C Creează un alt fișier în timp ce pachetul este scris dacă dimensiunea acestuia este mai mare decât dimensiunea specificată
-r Deschide un fișier pentru citire care a fost creat folosind opțiunea -w
-j Formatul TimeStamp va fi folosit pentru a înregistra pachetele
-J Vă permite să vizualizați toate formatele de TimeStamp disponibile
-G Servește pentru a crea un fișier cu jurnalele. Opțiunea necesită, de asemenea, specificarea unei valori temporare, după care va fi creat un nou jurnal
-v, -vv, -vvv În funcție de numărul de caractere din opțiune, rezultatul comenzii va deveni mai detaliat (creșterea este direct proporțională cu numărul de caractere)
-f Ieșirea arată numele de domeniu al adreselor IP
-F Vă permite să citiți informații nu din interfața de rețea, ci din fișierul specificat
-D Demonstrează toate interfețele de rețea care pot fi utilizate
-n Dezactivează afișarea numelor de domenii
-Z Specifică utilizatorul sub al cărui cont vor fi create toate fișierele
-K Omiteți analiza sumei de control
-q Afișare scurtă de informații
-H Permite detectarea antetelor 802.11s
-Eu Folosit la capturarea pachetelor în modul monitor

După ce am examinat opțiunile, mai jos vom trece direct la aplicațiile acestora. Între timp, filtrele vor fi luate în considerare.

Filtre

După cum sa menționat chiar la începutul articolului, puteți adăuga filtre la sintaxa tcpdump. Acum vom lua în considerare cele mai populare dintre ele:

Toate filtrele de mai sus pot fi combinate între ele, astfel încât în ​​rezultatul comenzii veți vedea doar informațiile pe care doriți să le vedeți. Pentru a înțelege mai detaliat utilizarea filtrelor de mai sus, merită să dați exemple.

Exemple de utilizare

Sintaxa cel mai frecvent utilizată pentru comanda tcpdump va fi acum descrisă. Nu va fi posibil să le enumerați pe toate, deoarece poate exista un număr infinit de variații.

Vizualizați o listă de interfețe

Se recomandă ca fiecare utilizator să verifice inițial lista tuturor interfețelor de rețea care pot fi monitorizate. Din tabelul de mai sus știm că pentru aceasta trebuie să folosim opțiunea -D deci în terminal rulați următoarea comandă:

După cum puteți vedea, în exemplu există opt interfețe care pot fi vizualizate folosind comanda tcpdump. Articolul va oferi exemple cu ppp0, puteți folosi oricare altul.

Captarea regulată a traficului

Dacă trebuie să monitorizați o singură interfață de rețea, puteți face acest lucru folosind opțiunea -i. După ce îl introduceți, nu uitați să indicați numele interfeței. Iată un exemplu de rulare a unei astfel de comenzi:

sudo tcpdump -i ppp0

Vă rugăm să rețineți: trebuie să introduceți „sudo” înainte de comanda în sine, deoarece necesită drepturi de superutilizator.

Notă: după apăsarea Enter, pachetele capturate vor fi afișate continuu în „Terminal”. Pentru a opri fluxul lor, trebuie să apăsați combinația de taste Ctrl+C.

Dacă rulați comanda fără opțiuni și filtre suplimentare, veți vedea următorul format pentru afișarea pachetelor monitorizate:

22:18:52.597573 IP vrrp-topf2.p.mail.ru.https > 10.0.6.67.35482 : Flags , seq 1:595, ack 1118, win 6494, options , length 594

Unde este evidențiat în culoare:

  • albastru - ora primirii coletului;
  • verde - adresa expeditorului;
  • violet - adresa destinatarului;
  • gri - informații suplimentare despre tcp;
  • roșu - dimensiunea pachetului (afișată în octeți).

Această sintaxă are capacitatea de a fi afișată într-o fereastră "Terminal" fără a utiliza opțiuni suplimentare.

Capturați trafic cu opțiunea -v

După cum se știe din tabel, opțiunea -v vă permite să măriți cantitatea de informații. Să ne uităm la asta cu un exemplu. Să verificăm aceeași interfață:

sudo tcpdump -v -i ppp0

Aici puteți observa că următoarea linie apare în rezultat:

IP (to 0x0, ttl 58, id 30675, offset 0, steaguri, proto TCP (6) , lungime 52

Unde este evidențiat în culoare:

  • portocaliu - versiune de protocol;
  • albastru - durata de viață a protocolului;
  • verde - lungimea antetului câmpului;
  • violet - versiunea pachetului tcp;
  • roșu - dimensiunea pachetului.

De asemenea, puteți adăuga opțiunea la sintaxa comenzii -vv sau -vvv, ceea ce va crește și mai mult cantitatea de informații afișate pe ecran.

Opțiunea -w și -r

Tabelul cu opțiuni a menționat capacitatea de a salva toate datele de ieșire într-un fișier separat, astfel încât să poată fi vizualizate mai târziu. Opțiunea este responsabilă pentru acest lucru -w. Utilizarea este destul de simplă, trebuie doar să o specificați în comandă și apoi să introduceți numele viitorului fișier cu extensia „.pcap”. Să privim totul folosind un exemplu:

sudo tcpdump -i ppp0 -w fișier.pcap

Vă rugăm să rețineți: în timp ce jurnalele sunt scrise într-un fișier, nu este afișat niciun text pe ecranul Terminal.

Când doriți să vizualizați rezultatul înregistrat, trebuie să utilizați opțiunea -r, după care scrieți numele fișierului înregistrat anterior. Se aplică fără alte opțiuni și filtre:

sudo tcpdump -r file.pcap

Ambele opțiuni sunt grozave atunci când trebuie să salvați cantități mari de text pentru o analiză ulterioară.

filtrare IP

Din tabelul de filtrare știm că dst vă permite să afișați pe ecranul consolei doar acele pachete care au fost primite de adresa specificată în sintaxa comenzii. Acest lucru face foarte convenabil să vizualizați pachetele primite de computer. Pentru a face acest lucru, trebuie doar să specificați adresa IP în comandă:

sudo tcpdump -i ppp0 ip dst 10.0.6.67

După cum puteți vedea, pe lângă dst, am specificat și un filtru în comandă ip. Cu alte cuvinte, i-am spus computerului să acorde atenție adresei IP atunci când selectează pachetele, și nu altor parametri.

De asemenea, puteți filtra pachetele trimise după IP. Să folosim IP-ul nostru din nou ca exemplu. Adică, acum vom urmări ce pachete sunt trimise de pe computerul nostru către alte adrese. Pentru a face acest lucru, trebuie să rulați următoarea comandă:

sudo tcpdump -i ppp0 ip src 10.0.6.67

După cum puteți vedea, am schimbat filtrul în sintaxa comenzii dst pe src, spunând astfel mașinii să caute expeditorul prin IP.

Filtrarea după HOST

Prin analogie cu IP, putem specifica un filtru în comandă gazdă pentru a filtra pachetele cu gazda de interes. Adică, în sintaxă, în loc de adresa IP a expeditorului/destinatarului, va trebui să indicați gazda acestuia. Arata cam asa:

sudo tcpdump -i ppp0 dst host google-public-dns-a.google.com

În imagine puteți vedea asta în "Terminal" Sunt afișate doar acele pachete care au fost trimise de pe IP-ul nostru către gazda google.com. După cum puteți înțelege, în loc de gazda Google, puteți introduce oricare alta.

Ca și în cazul filtrarii IP, sintaxa dst poate fi înlocuit cu src pentru a vedea pachetele care sunt trimise la computer:

sudo tcpdump -i ppp0 src host google-public-dns-a.google.com

Vă rugăm să rețineți: filtrul gazdă trebuie să vină după dst sau src, altfel comanda va genera o eroare. În cazul filtrului IP, dimpotrivă, dst și src vin înaintea filtrului ip.

Aplicarea filtrelor și și sau

Dacă trebuie să utilizați mai multe filtre simultan într-o comandă, atunci pentru aceasta trebuie să utilizați un filtru și sau sau(depinde de caz). Specificând filtre în sintaxă și separându-le cu acești operatori, îi „faceți” să funcționeze ca unul singur. Într-un exemplu arată astfel:

sudo tcpdump -i ppp0 ip dst 95.47.144.254 sau ip src 95.47.144.254

Din sintaxa comenzii este clar că vrem să afișăm "Terminal" toate pachetele care au fost trimise la adresa 95.47.144.254 și pachetele primite la aceeași adresă. De asemenea, puteți modifica unele dintre variabilele din această expresie. De exemplu, în loc de IP, specificați HOST sau înlocuiți adresele în sine.

Port și filtru portrange

Filtru port Perfect pentru acele cazuri în care trebuie să obțineți informații despre pachete pe un anumit port. Deci, dacă trebuie să vedeți doar răspunsurile sau solicitările DNS, trebuie să specificați portul 53:

sudo tcpdump -vv -i ppp0 portul 53

Dacă doriți să vizualizați pachetele http, trebuie să introduceți portul 80:

sudo tcpdump -vv -i ppp0 portul 80

Printre altele, este posibil să urmăriți o serie de porturi simultan. Pentru aceasta este folosit un filtru portrange:

sudo tcpdump portrange 50-80

După cum puteți vedea, împreună cu filtrul portrange Nu este necesar să specificați opțiuni suplimentare. Trebuie doar să setați intervalul.

Filtrarea după protocol

De asemenea, puteți afișa numai traficul care corespunde unui anumit protocol. Pentru a face acest lucru, trebuie să utilizați chiar numele acestui protocol ca filtru. Să ne uităm la un exemplu udp:

sudo tcpdump -vvv -i ppp0 udp

După cum puteți vedea în imagine, după executarea comenzii în "Terminal" au fost afișate doar pachetele de protocol udp. În consecință, puteți filtra după alții, de exemplu, arp:

sudo tcpdump -vvv -i ppp0 arp

sau tcp:

sudo tcpdump -vvv -i ppp0 tcp

Filtru plasă

Operator net ajută la filtrarea pachetelor în funcție de denumirea rețelei. Utilizarea acestuia este la fel de ușoară ca și celelalte - trebuie să specificați atributul în sintaxă net, apoi introduceți adresa rețelei. Iată un exemplu de astfel de comandă:

sudo tcpdump -i ppp0 net 192.168.1.1

Filtrați după dimensiunea pachetului

Nu am luat în considerare încă două filtre interesante: Mai puținȘi mai mare. Din tabelul cu filtre știm că acestea servesc la afișarea pachetelor de date mai mari ( Mai puțin) sau mai putin ( mai mare) dimensiunea specificată după introducerea atributului.

Să presupunem că vrem să monitorizăm numai pachetele care nu depășesc marcajul de 50 de biți, atunci comanda va arăta astfel:

sudo tcpdump -i ppp0 mai puțin 50

Acum să ne afișăm "Terminal" pachete mai mari de 50 de biți:

sudo tcpdump -i ppp0 mai mare de 50

După cum puteți vedea, sunt folosite în același mod, singura diferență este în numele filtrului.

Concluzie

La finalul articolului, putem concluziona că echipa tcpdump este un instrument excelent cu care puteți urmări orice pachet de date transmis prin Internet. Dar pentru aceasta nu este suficient să introduceți pur și simplu comanda în sine "Terminal". Puteți obține rezultatul dorit doar dacă utilizați tot felul de opțiuni și filtre, precum și combinațiile acestora.

tcpdump este un puternic analizor de linie de comandă și Libpcap, o bibliotecă portabilă pentru captarea traficului de rețea. Tcpdump tipărește o descriere a conținutului pachetelor pe o interfață de rețea care se potrivește cu o expresie booleană. Poate fi rulat și cu comutatorul -w, care îl determină să salveze datele batch într-un fișier pentru o analiză ulterioară și/sau cu indicatorul -r, care îl determină să citească din fișierul batch salvat. Folosind acest utilitar, puteți intercepta și, de asemenea, analiza traficul de rețea care trece prin computerul pe care rulează acest program.

Aș dori să vorbesc în acest subiect „instalarea și utilizarea tcpdump” despre instalarea tcpdump, precum și despre cum să îl utilizați și pentru ce este necesar.

Cu tcpdump puteți:

  • Puteți depana aplicațiile de rețea.
  • Puteți depana rețeaua sau echipamentul de rețea ca întreg.

Pentru a instala tcpdump pe debian/ubuntu/linux mint trebuie să rulați:

# sudo apt-get install tcpdump

Pentru a instala tcpdump pe RedHat/CentOS/Fedora, utilizați:

# sudo yum install tcpdump

Pentru a instala tcpdump pe MacOS utilizați.

# brew install tcpdump

Folosind tcpdump.

Pentru a verifica dacă tcpdump funcționează pentru noi, puteți rula comanda:

# tcpdump -i eth0 portul 80

Există destul de multe comutatoare pentru utilizarea utilitarului tcpdump în sine, iată o listă cu cele comune:

Dacă trebuie să aflați ce pachete sunt schimbate între 21 de servere (de exemplu, your_server_1 și your_server_2), atunci utilizați comanda pentru aceasta:

# tcpdump găzduiește serverul_vou_1 și serverul_vou_2

Dacă trebuie doar să monitorizați pachetele de ieșire de la gazdă, atunci rulați:

# tcpdump src host your_server

Dacă trebuie doar să monitorizați pachetele primite de la gazdă, atunci rulați:

# tcpdump dst host your_server

De asemenea, puteți asculta pachetele de ieșire sau de intrare de pe server și pe un anumit port, pentru a face acest lucru, pur și simplu adăugați portul pe care doriți să-l ascultați (în cea mai mare parte se folosește 80, 8080).

Vedeți lista de interfețe pe care puteți asculta tcpdumt:

# tcpdump -D

Ascultați interfața eth0:

# tcpdump -i eth0

Ascultați pe orice interfață disponibilă (Necesită versiunea de kernel Linux 2.2 sau mai mare):

# tcpdump -i orice

Afișarea tot ce este pe ecran (tot ce este executat de program):

# tcpdump -v

Afișați o mulțime de lucruri pe ecran (tot ce este executat de program):

# tcpdump -vv

Afișează o mulțime de lucruri pe ecran (tot ce este executat de program):

# tcpdump -vvv

Nu se afișează multe informații atunci când pachetele sunt capturate (nu ca cel standard):

# tcpdump -q

Limitați captura de pachete la 100:

# tcpdump -c 100

Scrieți toate datele (pachetele capturate) într-un fișier numit capture.cap:

# tcpdump -w capture.cap

Scrieți toate datele (pachetele capturate) într-un fișier numit capture.cap și afișați-l pe ecran în timp real:

# tcpdump -v -w capture.cap

Ieșirea pachetelor din fișierul capture.cap:

# tcpdump -r capture.cap

Ieșiți pachete din fișierul capture.cap folosind cât mai multe informații posibil:

# tcpdump -vvv -r capture.cap

Ieșirea IP și porturi în loc de domenii este captura de pachete:

# tcpdump -n

Capturați orice pachete în care gazda destinație este 192.138.1.1. Afișați IP-ul și porturile pe ecran:

# tcpdump -n dst gazdă 192.138.1.1

# tcpdump -n gazdă src 192.138.1.1

Capturați orice pachet de la gazda 192.138.1.1. Afișați IP-ul și porturile pe ecran:

# tcpdump -n gazdă 192.138.1.1

Capturați pachete în care rețeaua este 192.138.1.0/24. Afișați IP-ul și porturile pe ecran:

# tcpdump -n dst net 192.138.1.0/24

# tcpdump -n src net 192.138.1.0/24

Capturați pachete din rețeaua 192.138.1.0/24. Afișați IP-ul și porturile pe ecran:

# tcpdump -n net 192.138.1.0/24

Capturați pachete din portul 23. Afișați IP-ul și porturile pe ecran:

# tcpdump -n dst portul 23

Capturați pachete de la porturile de la 1 la 1023. Afișați IP-ul și porturile pe ecran:

# tcpdump -n dst portrange 1-1023

Capturați numai pachete TCP cu destinație pe porturile de la 1 la 1023. Afișați IP-ul și porturile pe ecran:

# tcpdump -n tcp dst portrange 1-1023

Capturați numai pachete UDP cu destinație pe porturile de la 1 la 1023. Afișați IP-ul și porturile pe ecran:

# tcpdump -n udp dst portrange 1-1023

Capturați pachete de la destinație unde IP este 192.138.1.1 și portul de destinație este 23. Afișare pe ecran:

# tcpdump -n „dst host 192.138.1.1 și dst port 23”

Capturați pachete de la destinație unde IP este 192.138.1.1 și destinație prin porturile 80 sau 443. Afișare:

# tcpdump -n „dst host 192.138.1.1 și (dst port 80 sau dst port 443)”

Capturați orice pachet ICMP:

# tcpdump -v icmp

Capturați orice pachet ARP:

# tcpdump -v arp

Capturați orice pachet ICMP sau ARP:

# tcpdump -v „icmp sau arp”

Capturați orice pachete care sunt difuzate sau multicast:

# tcpdump -n „difuzare sau multidifuzare”

Capturați pachete mari (500 de octeți) mai degrabă decât standardul 68b:

# tcpdump -s 500

Capturați toți octeții de date dintr-un pachet:

# tcpdump -s 0

Vizualizarea „pachete grele”:

# tcpdump -nnvvXSs 1514

Capturați pachete ICMP cu ping și pong:

# tcpdump -nnvXSs 0 -c2 icmp

Concluzie fără multe opțiuni:

# tcpdump -nS

Comunicații de bază (mod foarte detaliat), puteți vedea o cantitate bună de trafic, cu verbozitate:

# tcpdump -nnvvS

O privire profundă asupra traficului, adăugând -X pentru sarcina utilă:

# tcpdump -nnvvXS

Vizualizați un pachet greu și măriți lungimea, captând întregul pachet:

# tcpdump -nnvvXSs 1514

Puteți, de asemenea, să filtrați în funcție de anumite părți ale pachetului, precum și să grupați mai multe condiții. Acest lucru este util atunci când căutați numai SYN-uri sau PCT-uri, de exemplu, iar acestea din urmă pentru izolarea traficului și mai avansată.

Arată-mi toate pachetele URGENTE (URG):

# tcpdump „tcp & 32!=0”

Arată-mi toate pachetele ACKNOWLEDGE (ACK):

# tcpdump „tcp & 16!=0”

Arată-mi toate pachetele PUSH (PSH):

# tcpdump „tcp & 8!=0”

Arată-mi toate pachetele RESET (RST):

# tcpdump „tcp & 4!=0”

Arată-mi toate pachetele SYNCHRONIZE (SYN):

# tcpdump „tcp & 2!=0”

Arată-mi toate pachetele FINISH (FIN):

# tcpdump „tcp & 1!=0”

Arată-mi toate pachetele SYNCHRONIZE/ACKNOWLEDGE (SYNACK):

# tcpdump „tcp=18”

Capturați steaguri TCP folosind tcpflags:

# tcpdump „tcp & & tcp-syn != 0”

Pachete cu steagurile RST și SYN (verificați):

# tcpdump „tcp = 6”

Trafic de la „Evil Bit” (bifare):

# tcpdump „ip & 128 != 0”

Aici îmi voi completa articolul „instalarea și utilizarea tcpdump”, sper că totul este clar și de înțeles.

Pentru sistemele UNIX există o mare varietate de sniffer și analizoare de trafic cu o interfață grafică convenabilă și un set bogat de funcții. Dar niciunul dintre ei nu se poate compara în flexibilitate, versatilitate și ubicuitate cu vechiul tcpdump. Acest utilitar este inclus în multe distribuții Linux și în toate sistemele BSD din cutie și vă poate ajuta atunci când alte instrumente nu sunt disponibile.

Introducere

Utilitarul tcpdump este un sniffer de pachete de rețea cu o interfață de linie de comandă care nu are nici o interfață grafică, nici o interfață pseudo-grafică. Poate părea greoi și prea demodat pentru începători, dar în mâini pricepute se transformă într-un adevărat cuțit elvețian pentru deschiderea oricăror pachete și protocoale de rețea. Administratorii de sistem cu experiență recomandă întotdeauna începătorilor să folosească tcpdump în locul oricăror alte utilitare, datorită clarității și simplității rapoartelor sale.

Tcpdump s-a născut în urmă cu aproape 25 de ani la Universitatea din Berkeley, se dezvoltă în continuare activ și continuă să fie standardul printre instrumentele similare pentru sistemul de operare UNIX. Biblioteca de captură de pachete libpcap, dezvoltată special pentru aceasta, este folosită astăzi de aproape fiecare sniffer pentru sisteme UNIX și multe programe similare pentru Windows.

În acest articol ne vom uita la toate aspectele lucrului cu tcpdump, pornind de la elementele de bază ale lucrului cu programul și terminând cu modul de utilizare a utilitarului pentru a identifica atacurile de rețea, anomaliile și diferitele tipuri de defecțiuni.

Singur cu consola

Să încercăm să ne dăm seama cum funcționează tcpdump și din ce parte ar trebui abordat. Deschideți un terminal și rulați programul ca root (ca orice sniffer, tcpdump trebuie să aibă acces complet la interfețele de rețea), specificând numele interfeței de rețea și limitând numărul de pachete de ieșire la zece:

# tcpdump -i wlan0 -c 10 -n

Comutatorul -n dezactivează rezoluția adreselor IP la nume DNS. Acum să încercăm să urmărim schimbul doar cu o anumită gazdă, de exemplu cu un router de acasă:

# tcpdump -i wlan0 -c 10 -n gazdă 192.168.0.1 și portul 53

Să vedem ce ne-a adus tcpdump, folosind exemplul celor două rânduri prezentate în captura de ecran „Interogare DNS prin ochii lui tcpdump”. Puteți înțelege cu ușurință că aceasta este o solicitare DNS (portul 53) de la gazda 192.168.0.101 la gazda 192.168.0.1 și răspunsul ulterior. Dar ce înseamnă toate celelalte numere și semne?


Numerele 16:22:41.340105 reprezintă momentul în care a fost trimis pachetul, inclusiv milionimile de secundă (așa-numitul frac). Cele două litere IP, după cum ați putea ghici, identifică protocolul stratului de rețea utilizat, urmat de adresa: portul de trimitere și adresa: portul de destinație al pachetului. Tot ceea ce vine după colon depinde direct de protocolul stratului de transport sau de aplicare utilizat. tcpdump este familiarizat cu unele protocoale și le poate descifra într-o formă care poate fi citită de om, în timp ce altele le lasă ca atare și pur și simplu listează conținutul pachetului. În acest caz, tcpdump a decriptat mesajele DNS și a returnat șirul 49244+ A? ya.ru. (23), ceea ce înseamnă: o solicitare (A?) a fost trimisă la adresa asociată cu numele ya.ru., lungimea totală a pachetului minus antetele TCP/IP a fost de 23 de octeți. Prima cifră este ID-ul cererii.

În rândul următor vedem un răspuns, al cărui format este aproape același cu cel al cererii, singura diferență fiind că acum după identificatorul cererii există informații despre numărul de înregistrări găsite (8/2/3) și înregistrează în sine (A 213.180.204.3, A 77.88.21.3 , A 87.250.250.3...).

tcpdump are suport pentru multe protocoale, datorită cărora poate prezenta în formă lizibilă informații despre protocoalele TCP, UDP și ICMP, SMB/CIFS, NFS, AFS, AppleTalk. Dar ce se întâmplă dacă tcpdump nu știe nimic despre protocolul stratului de aplicație utilizat sau nu îl poate determina? În mod normal, va imprima pur și simplu informațiile pachetului. Ar putea arăta cam așa:

Steaguri [.], secv 3666073194:3666074622, ack 3281095139, câștig 2000, opțiuni, lungime 1428

Acesta este un pachet TCP, formatul de prezentare a informațiilor despre acesta în tcpdump este următorul (câmpurile sunt separate prin virgulă):

  • steaguri - steaguri instalate. Indicat prin simbolurile S (SYN), F (FIN), P (PUSH) și R (RST), un punct înseamnă că nu sunt setate steaguri;
  • data-seqno - descrie datele conținute în pachet în următorul format: first:last, unde primul și ultimul sunt numărul de secvență al primului și ultimului octet al datelor transmise, nbytes;
  • ack - următorul număr de secvență (ISN + 1);
  • fereastra - dimensiunea ferestrei;
  • opțiuni - aici pot fi specificate informații suplimentare, de exemplu (dimensiunea maximă a segmentului);
  • lungime - lungimea pachetului.

Toate aceste date pot fi foarte utile la studierea sau depanarea protocoalelor și aplicațiilor de rețea, dar nu ne spun nimic despre conținutul lor. Pentru a vedea conținutul pachetului în format hexazecimal, utilizați indicatorul -X:

# tcpdump -i wlan0 -c 10 -n -X gazdă 192.168.0.1 și portul 80

Această funcție este foarte convenabilă de utilizat pentru analiza protocoalelor în care datele sunt transferate în text clar, cum ar fi HTTP. Pentru protocoalele binare și criptate, va fi, desigur, inutil.
Puteți utiliza, de asemenea, marcatorul -v pentru a obține mai multe informații despre pachet. Apoi, după IP, informații detaliate despre pachetul IP vor apărea în paranteze:

(tos 0x0, ttl 64, id 8339, offset 0, steaguri , proto UDP (17), lungime 51)

În general, totul aici este destul de prozaic. Mai întâi vine tipul de serviciu (TOS), urmat de timpul de viață al pachetului (TTL), ID-ul pachetului, decalajul de la începutul primului pachet din lanț, steaguri, perforarea stratului de transport utilizat (TCP, UDP, ICMP) și lungime.


Caracteristici avansate

Am acoperit deja majoritatea celor mai importante caracteristici ale tcpdump, dar există mult mai mult la funcționalitatea acestuia. De exemplu, am folosit operatorii de gazdă și porturi pentru a specifica adresa și portul de care aveam nevoie pentru a filtra ieșirea, dar ce se întâmplă dacă am dori să vedem doar pachetele care merg la adresa specificată, dar nu ies de la ea? Puteți utiliza operatorul src pentru aceasta:

# tcpdump -i wlan0 -c 10 -n src 192.168.0.1

Există și versiunea sa inversă dst, concepută pentru a indica adresa de destinație. După cum se arată mai sus, toți operatorii pot fi combinați folosind operatorul și (monitorizarea traficului de rețea, excluzând sesiunile SSH și interogările DNS):

# tcpdump -i portul wlan0 nu 22 și portul nu 53

De asemenea, puteți utiliza sau (sau) și cu excepția (nu). În plus, tcpdump înțelege intervalele de porturi:

# tcpdump -i wlan0 -c 10 -n portrange 21-23

Poate filtra pachetele după dimensiunea lor:

# tcpdump -i wlan0 -c 10 -n > 32 și<= 128

Și înțelege măștile de subrețea:

# tcpdump -i wlan0 c 10 -n src net 192.168.0.0/16 și dst net 10.0.0.0/8 sau 172.16.0.0/16

Una dintre cele mai interesante caracteristici ale tcpdump este capacitatea de a filtra pachetele pe baza conținutului de biți sau octeți specifici din anteturile protocolului. Pentru aceasta, se folosește următorul format: proto, unde proto este protocolul, expr este offset-ul în octeți de la începutul antetului pachetului, iar dimensiunea este un câmp opțional care indică lungimea datelor în cauză (implicit este de 1 octet ). De exemplu, pentru a filtra numai pachetele cu marcajul SYN (inițierea strângerii de mână TCP) setat, veți folosi următoarea intrare:

# tcpdump „tcp==2”

Cum functioneaza? Foarte simplu. Cei 13 octeți ai antetului TCP conțin exact opt ​​steaguri, câte un bit pentru fiecare. Al doilea bit este rezervat pentru flag-ul SYN. Următoarea intrare verifică pur și simplu că acest bit este setat. Apropo, o formă mai lizibilă a acestei intrări ar arăta astfel:

# tcpdump „tcp & tcp-syn != 0”

Uz practic

Utilitarul tcpdump este utilizat în mod obișnuit în două scopuri: pentru depanarea rețelei, a aplicațiilor de rețea și a noilor protocoale și pentru a preda elementele de bază ale TCP/IP. Vom merge în altă direcție și vom folosi capacitățile tcpdump pentru a detecta scanarea gazdei și pentru a efectua atacuri de rețea.

În fig. Figura 1 arată cum arată o scanare clasică a portului TCP efectuată cu utilitarul Nmap în jurnalele tcpdump. Puteți vedea clar cum Nmap de la adresa 192.168.0.100 încearcă să stabilească o conexiune TCP cu diferite porturi prin trimiterea unui pachet SYN (S în câmpul steagurilor). Mai întâi, portul 8888 este testat, un pachet RST este primit ca răspuns, ceea ce înseamnă că portul nu este ascultat de niciun serviciu, apoi portul 587 este testat cu același rezultat. În cele din urmă, Nmap trimite un pachet SYN la portul 22 (SSH) și primește un răspuns sub forma unui pachet SYN-ACK:

192.168.0.100.43337 > 192.168.0.111.22: Steaguri [S], secv 2610024277, ... 192.168.0.111.22 > 192.168.0.100.0.100.433, seq. 1 0024278, ... 192.168.0.100 43337 > 192.168.0.111.22: Steaguri [.], ack 1, ...

Portul este deschis și Nmap poate acum închide cu succes conexiunea trimițând un pachet RST și trece la porturile următoare. Cu toate acestea, face ceva mai inteligent: trimite o confirmare a pachetului ACK și trece imediat la porturile următoare. Acest comportament vă permite să ocoliți unele sisteme de detectare a intruziunilor, dar o persoană înarmată cu un sniffer nu poate fi păcălită atât de ușor.

De asemenea, acordați atenție numerelor de porturi căutate; acestea nu sunt generate aleatoriu, ci sunt selectate ținând cont de cea mai mare prevalență. Aceasta înseamnă că se efectuează o scanare rapidă sau, mai precis, Nmap rulează cel mai probabil fără niciun fel de semnalizare.



Acum să ne uităm la o altă metodă de detectare a porturilor deschise - scanarea SYN (nmap -sS). Acest tip de scanare se numește de obicei ascuns, deoarece în timpul acestuia nu se stabilește niciodată o conexiune TCP completă, ceea ce înseamnă că informațiile despre faptul conexiunii nu apar în jurnale. Ieșirea tcpdump pentru acest tip de scanare este prezentată în Fig. 2. Este foarte asemănător cu jurnalul unei scanări TCP obișnuite, dar reacția scanerului la porturile deschise este acum diferită:

192.168.0.100.48585 > 192.168.0.111.22: Steaguri [S], secv 1679394613, ... 192.168.0.111.22 > 192.168.0.100.0.100.485, 685: 679.485, seq. 9 394614, ... 192.168.0.100 48585 > 192.168.0.111.22: Steaguri [R], secv 1679394614, ...

Se poate observa că după primirea pachetului de aprobare SYN-ACK, scannerul nu finalizează stabilirea conexiunii, ci o întrerupe imediat, evitând intrarea în jurnalele. În fig. 3 puteți vedea rezultatul scanării UDP. Totul este foarte simplu aici, Nmap enumerează porturile cu posibile servicii UDP, trimițând câte un pachet de lungime zero la fiecare dintre ele. Dacă portul este închis, sistemul de operare răspunde cu un mesaj ICMP inaccesibil:

16:41:48.798310 IP 192.168.0.100.61020 > 192.168.0.111.18869: UDP, lungime 0 16:41:48.798346 IP 192.168.0.111.160:90.111.160:41:48.798346 > 16:41:48.798346 8.0.100 udp port 18869 inaccesibil, lungime 36

În caz contrar, portul este considerat deschis. O altă metodă de scanare: scanarea nulă prin trimiterea de pachete care nu conțin niciun set de steaguri (nmap -sN). Răspunsul la astfel de pachete poate varia în funcție de sistemul de operare utilizat, dar după cum puteți vedea din următoarea listă, Linux răspunde la ele trimițând pachete RST:

192.168.0.100.39132 > 192.168.0.111.256: steaguri , câștig 3072, lungime 0 192.168.0.111.256 > 192.168.0.100.39132: steaguri

Un atacator poate folosi, de asemenea, scanarea de Crăciun, în care pachetele au setările FIN, URG și PUSH (pachetul pare să strălucească cu steaguri, ca un pom de Crăciun):

192.168.0.100.35331 > 192.168.0.111.5544: Flags , secv 3998959601, win 4096, urg 0, length 0 192.168.0.111.5544, seq 3998959601, win 4096, urg 0, length 0 192.168.0.111.5544, seq. 0, ack 3998959602

După cum puteți vedea, reacția la astfel de pachete este identică. O scanare ACK (-sA) va apărea în jurnalele tcpdump ca trimitere a mai multor pachete cu indicatorul ACK setat și răspunzând la acestea prin trimiterea de pachete RST. Cu toate acestea, dacă sistemul are instalat un firewall, nu vor fi trimise mesaje de răspuns și Nmap va putea înțelege dacă portul este filtrat.

Folosind tcpdump, puteți urmări și diferite tipuri de inundații. De exemplu, o inundație ICMP clasică în jurnalele va arăta astfel:

16:43:06.008305 IP 192.168.0.100 > 192.168.0.111: ICMP tip-#68, lungime 1032 16:43:06.008383 IP 192.168.0.100, tip 1.90.100 > 1.942.16-1.92116-1. 32 16:43:06.008714 IP 192.168.0.100 > 192.168.0.111: ICMP tip-#183, lungime 1032 16:43:06.008831 IP 192.168.0.100 > 192.168.0.111: ICMP tip-# 193, lungime

De o importanță deosebită este aici câmpul care conține ora la care a fost primit pachetul. Nicio aplicație normală nu va trimite multe mesaje ICMP într-o perioadă de timp egală cu o miime de secundă. Alte tipuri de inundații (de exemplu, SYN) sunt definite exact în același mod.

Interacțiunea cu alte programe

Unul dintre cele mai importante avantaje ale tcpdump este că formatul rapoartelor sale în timpul existenței programului a devenit de fapt un standard pentru toți snifferi și astăzi este înțeles de toate instrumentele de analiză a traficului mai mult sau mai puțin serioase. De exemplu, tcpdump poate fi folosit pentru a genera un dump pe o mașină la distanță, apoi trimite-l la mașina locală și analiza-l folosind wireshark:

$ssh [email protected] tcpdump -w - „port !22” | wireshark -k -i -

Aici am folosit opțiunea -w - pentru a scrie dump-ul la ieșirea standard și l-am redirecționat către wireshark care rulează pe mașina locală. În același mod, puteți analiza traficul folosind snort:

$ssh [email protected]„tcpdump -nn -i eth1 -w -” | snort -c /etc/snort/snort.conf -r -

Prin redirecționarea ieșirii programului către intrarea grep, puteți găsi diverse probleme în rețea, de exemplu, identificarea pachetelor cu o sumă de control incorectă, informații despre care pot fi afișate folosind steag-ul -vv:

# tcpdump -nnvv -r dump.cap tcp | grep -v "tcp sum ok" | wc–l

Chestii de administrator

Capacitatea de a filtra pachete pe baza datelor conținute în antet, despre care am discutat la începutul primei secțiuni, este foarte convenabilă de utilizat pentru depanarea diferitelor protocoale și găsirea problemelor de rețea. De exemplu, îl putem folosi pentru a captura pachete de rețea transmise prin intermediul protocolului Cisco Discovery, prin care routerele Cisco schimbă informații despre topologia și starea rețelei:

# tcpdump -nn -v -i eth0 -s 1500 -c 1 "eter == 0?2000"

În același mod, puteți prinde toate pachetele transmise prin protocolul DHCP (DISCOVER, REQUEST, INFORM) pentru a identifica problemele de conectare la client:

# tcpdump -i eth0 -vvv -s 1500 "((portul 67 sau portul 68) și (udp = 0x1))"

Sau captează pachetele transmise ca parte a autentificării POP3:

# tcpdump -i eth0 "tcp port pop3 and ip = 85 and ip = 83" -s 1500 -n

Grep de rețea

Sniffer-ul tcpdump este bun pentru versatilitatea și varietatea de capabilități, dar nu este atât de ușor și convenabil de utilizat pentru a căuta date specifice în interiorul pachetelor transmise. Această sarcină este gestionată mult mai bine de ngrep, care este conceput pentru a afișa pachetele de rețea care trec care se potrivesc cu o mască dată.

De exemplu, pentru a găsi parametrii transmiși de metodele GET și POST într-o sesiune HTTP, puteți utiliza următoarea comandă:

# ngrep -l -q -d eth0 "^GET |^POST" tcp și portul 80

Identificarea leneșilor:

# ngrep -i „joc*|p0rn|adult” -W byline -d eth0 > slackers.txt

Analizăm traficul SMTP pe toate interfețele de rețea:

# ngrep -i „rcpt către|mail de la” port tcp smtp

opțiunile tcpdump

Tabel cu cele mai interesante și utile steaguri tcpdump.

  • -i [interfață] - interfața de rețea pe care să ascultați, oricare ar trebui să fie specificat pentru toți.
  • -n - nu rezolvă adresele IP în nume DNS.
  • -nn - nu convertiți adresele IP și numerele de porturi.
  • -X - arată conținutul pachetului în format text și hexazecimal.
  • -XX - același plus conținutul cadrului Ethernet.
  • -v, -vv, -vvv - crește cantitatea de informații și pachete afișate (mai multe, chiar mai multe, toate).
  • -c [n] - arată doar primele n pachete.
  • -s [n] - numărul de octeți afișați pentru fiecare pachet (poate fi redus pentru lizibilitate sau mărit pentru mai multe informații).
  • -S - arată numerele de secvență TCP absolute.
  • -e - arată antetele cadrelor Ethernet.
  • -q - afișează mai puține informații (pentru o citire mai ușoară).
  • -E - decriptează traficul IPsec folosind cheia specificată.
  • -w - salvează dump-ul programului într-un fișier, argument - folosit pentru a specifica stdout.

concluzii

În mâinile unui utilizator informat, tcpdump se transformă într-un instrument puternic nu numai pentru depanare, ci și pentru investigarea anomaliilor. Datorită unui set bogat de operatori și steaguri, poate fi folosit pentru a ieși din eterul rețelei și a explora ceea ce aveți nevoie cu adevărat.

tcpdump instrucțiuni în rusă și exemple.

-A specifică ieșirea fiecărui pachet (fără antete de nivel de legătură) în format ASCII. Acest mod este util pentru colectarea traficului HTTP.

-c <число пакетов>specifică faptul că programul se termină după capturarea unui număr specificat de pachete.

-C<размер файла>specifică dacă se verifică dimensiunea fișierului de captură înainte ca fiecare pachet nou să fie scris în el. Dacă dimensiunea fișierului depășește parametrul file_size, fișierul este închis
și un fișier nou este creat pentru a scrie pachete. Pentru fișierele de captură se folosește numele specificat de parametrul -w și, începând cu al doilea fișier, numele este adăugat ca
numărul fișierului sufix. Variabila file_size specifică dimensiunea fișierului în milioane de octeți (nu megaocteți = 1.048.576 de octeți).

-d specifică rezultatul unui dump a codului compilat de potrivire a pachetului într-un format care poate fi citit de om și terminarea programului.

-dd Deversează codul potrivit ca fragment de program C.

-ddd aruncă codul de potrivire ca un șir de valori zecimale, precedat de un șir cu valoarea contorului.

-D afișează o listă de interfețe de rețea de pe sistem de la care tcpdump poate colecta pachete. Fiecare interfață de rețea are un nume și un număr, care pot fi urmate de
descriere text a interfeței. Numele și numărul interfeței pot fi utilizate cu indicatorul -i pentru a specifica colectarea pachetelor dintr-o singură interfață.

Această opțiune poate fi foarte utilă pentru sistemele care nu oferă informații despre interfețele de rețea disponibile3.

Indicatorul -D nu este acceptat dacă tcpdump a fost compilat cu o versiune mai veche a libpcap care nu acceptă funcția pcap_findalldevs().

-e tipărește antetul stratului de legătură pe fiecare linie a dump-ului.

-E specifică utilizarea algoritmului și a secretului spi@ipaddr pentru a decripta pachetele IPsec ESP trimise la adresa ipaddr și care conțin valoarea și în câmpul Indexul parametrilor de securitate
spi. Combinația de spi și adresa poate fi repetată folosind virgulă sau linie nouă ca delimitator. Rețineți că setarea secretului pentru pachetele IPv4 ESP în
suportate în prezent.

Algoritmii care pot fi utilizați sunt des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc sau none. Algoritmul implicit este des-cbc. Posibilitate de decriptare
pachetele sunt furnizate numai în cazurile în care opțiunile de suport pentru criptare au fost activate când a fost compilat tcpdump.

Parametrul secret conține textul ASCII al cheii secrete ESP. Dacă secretul începe cu caractere 0x, valoarea hexazecimală va fi citită. Opțiunea presupune utilizarea
ESP conform RFC 2406, nu RFC 1827. Această opțiune este acceptată numai în scopuri de depanare și nu trebuie utilizată cu chei private reale, deoarece cea introdusă în
linia de comandă, cheia IPsec este disponibilă pentru alți utilizatori ai sistemului4.

Pe lângă specificarea explicită a opțiunilor pe linia de comandă, acestea pot fi specificate într-un fișier de opțiuni pe care tcpdump îl va citi când primește primul pachet ESP.

-f setează ieșirea adreselor IPv4 străine în format numeric. Utilizarea acestei opțiuni vă permite să scăpați de problemele care apar pe serverele Sun NIS atunci când încercați să difuzați
adrese non-locale. Strainătatea unei adrese IPv4 este verificată folosind adresa și masca interfeței care a primit pachetul. Dacă adresa interfeței și masca nu sunt disponibile
(de exemplu, când utilizați interfețe nenumerotate sau când capturați pachete de la toate adresele pe Linux folosind o interfață falsă), această opțiune va funcționa
incorect.

-F<файл> specifică utilizarea filtrelor conținute în fișierul specificat. În acest caz, filtrele specificate pe linia de comandă sunt ignorate.

-i<интерфейс> specifică colecția de pachete din interfața specificată. Dacă interfața nu este specificată, tcpdump caută în sistem o listă de interfețe disponibile și selectează dispozitivul activ din acesta cu minimum
număr (excluzând loopback).

Pe sistemele Linux, începând cu kernelul 2.2, este suportată o interfață falsă numită any, care asigură colectarea pachetelor de la toate interfețele active ale sistemului. Vă rugăm să rețineți că taxa
pachetele de la dispozitiv orice se efectuează în modul normal (nu promiscuu).

Dacă sistemul dumneavoastră acceptă indicatorul -D, puteți specifica ca argument numărul interfeței care este imprimat atunci când este utilizat acest indicator.

-l setează linia tampon stdout. Această opțiune este utilă în cazurile în care doriți să vizualizați date în timp ce colectați pachete. De exemplu, comenzi

tcpdump -l | tee dat

tcpdump -l > dat & tail -f dat

oferă înregistrarea pachetelor într-un fișier dat și ieșire simultană către consolă.

-L specifică rezultatul unei liste de tipuri cunoscute de straturi de legătură și terminarea programului.

-m<файл> încarcă modulul de definiții SMI MIB din fișierul specificat. Această opțiune poate fi utilizată în mod repetat pentru a încărca mai multe module MIB.

-n dezactivează conversia adreselor și numerelor de port în nume simbolice.

-N specifică utilizarea numai a numelor de gazdă, nu a numelor de domenii complet calificate. De exemplu, în loc de lhotze.bilim-systems.net, când folosesc această opțiune, stația mea de lucru va fi
notat ca lhotze.

-O dezactivează optimizatorul de cod pentru a verifica dacă pachetele corespund condițiilor de filtrare. Utilizați această opțiune dacă simțiți că optimizatorul nu funcționează corect.

-p spune programului că interfața nu trebuie să fie pusă în modul de captură5. Opțiunea -p nu poate fi utilizată împreună cu gazda eter (local-hw-addr) sau filtrul de difuzare eter.

-q specifică ieșirea cantității minime de informații.

-R setarea acestui flag presupune că pachetele ESP/AH utilizează versiunea veche a specificației6 și tcpdump nu va scoate câmpurile de prevenire a reluării.
redare). Deoarece specificația ESP/AH nu include câmpuri cu numărul versiunii, tcpdump nu poate determina versiunea protocolului ESP/AH din antetele pachetelor.

-r<файл> specifică citirea datelor dintr-un fișier creat anterior folosind comanda tcpdump -w sau folosind un alt program care acceptă formatul tcpdump (de exemplu, Ethereal). Dacă în
Numele fișierului este setat la - și este utilizat fluxul de date de la dispozitivul de intrare standard (stdin).

-S setează ieșirea numerelor de secvență TCP absolute în loc de numere relative.

-s setează captura de octeți din fiecare pachet snaplen în loc de cei 68 de octeți impliciti7. O valoare de 68 este potrivită pentru protocoalele IP, ICMP, TCP și UDP, dar poate duce la pierderea
informații de protocol pentru unele pachete DNS și NFS. Pierderea unor pachete din cauza dimensiunii reduse a cadrului de instantaneu este indicată în datele de ieșire prin câmpuri din formular
[|proto]’, unde proto este numele nivelului de protocol la care o parte a pachetului a fost tăiată8. Rețineți că creșterea cadrului de captură va avea ca rezultat temporar suplimentar
costurile de procesare a pachetelor și o reducere a numărului de pachete tamponate, ceea ce poate duce la pierderea unor pachete. Utilizați valoarea minimă snaplen care vă va permite
evitați să pierdeți informații despre protocolul care vă interesează. Setarea snaplen=0 va captura pachete complete.

-T<тип> setează interpretarea pachetelor selectate folosind filtrul ca pachete de tipul specificat de parametru. Tipurile acceptate în prezent sunt aodv9, cnfp10, rpc11, rtp12, rtcp13,
snmp14, tftp15, vat16 și wb17.

-t dezactivează ieșirea marcajelor de timp în fiecare linie de descărcare.

-tt specifică ieșirea marcajelor de timp neformatate pe fiecare linie a dump-ului.

-ttt specifică ieșirea intervalelor de timp (în microsecunde) dintre capturarea pachetelor precedente și a acestui pachet în fiecare linie a dump-ului.

-tttt specifică ieșirea marcajelor de timp în formatul implicit pentru fiecare linie de descărcare.

-u setează ieșirea mânerelor NFS fără decodare.

-U setează modul „buffering la nivel de lot” pentru fișierele salvate folosind opțiunea -w. În acest mod, fiecare pachet este scris în fișierul de ieșire imediat ce este capturat
(fără a aștepta umplerea tamponului de ieșire). Indicatorul -U nu va fi acceptat dacă tcpdump a fost compilat cu o veche opțiune libpcap care nu acceptă funcția
pcap_dump_flush().

-v specifică ieșirea de informații suplimentare la capturarea fișierelor. Aceste informații pot include valoarea TTL (Time to Live), identificarea, dimensiunea totală, opțiunile IP etc. Când
Când se utilizează acest indicator, se efectuează și verificări suplimentare de integritate a pachetelor folosind sume de control (de exemplu, pentru protocoalele IP și ICMP).

-vv specifică o creștere suplimentară a volumului de informații de ieșire (de exemplu, decodarea completă a pachetelor SMB, ieșirea câmpurilor de răspuns NFS suplimentare etc.).

-vvv setează cantitatea maximă de informații afișate (de exemplu, opțiunile telnet SB ... SE sunt afișate complet). Când sunt utilizate împreună cu comutatorul -X, opțiunile Telnet sunt, de asemenea, afișate în
reprezentare hexazecimală.

-w<файл> specifică înregistrarea pachetelor brute. Pachetele colectate într-un fișier pot fi vizualizate ulterior folosind steag-ul -r sau transferate în alte programe pentru analiză
(de exemplu, eteric). Dacă numele fișierului este -, fișierul este scris pe dispozitivul de ieșire standard (stdout).

-X specifică rezultatul unui dump hexazecimal (fără antetul stratului de legătură) pentru fiecare pachet capturat. Cantitatea de informații afișate este determinată de cea mai mică dintre două valori -
dimensiunea pachetului și valoarea parametrului snaplen. Rețineți că atunci când capturați cadre întregi de strat de legătură, descărcarea poate include și octeți de umplutură dacă pachetul de strat de rețea
are o dimensiune mică.

-xx setează rezultatul unui dump hexazecimal pentru fiecare pachet, inclusiv anteturile stratului de legătură.

-X specifică ieșirea de descărcare în format hexazecimal și ASCII fără antete layer-legături. Această opțiune poate fi foarte convenabilă atunci când se analizează noile protocoale.

-XX specifică ieșirea de descărcare în format hexazecimal și ASCII, inclusiv anteturile stratului de legătură.

-y<тип> specifică tipul de strat de legătură utilizat la capturarea pachetelor. Valorile acceptate pot fi vizualizate folosind steag-ul -L.

Exemple.

  • Prindem tot traficul de ieșire

tcpdump -i re0 -n -nn -ttt dst gazdă 192.168.1.2

  • Prindem tot traficul de ieșire, cu excepția sesiunii noastre ssh, deoarece există un flux de date foarte mare.

tcpdump -i re0 -n -nn -ttt „dst host 192.168.1.110 și nu (src host 192.168.1.2 și dst port 22)”

  • Vizualizați comunicarea dns

tcpdump -i re0 -n -nn -ttt „gazdă 192.168.1.110 și portul 53”

  • Vizualizați pachetele icmp

tcpdump -i re0 -n -nn -ttt „ip proto \icmp”

  • Trafic care se deplasează din rețeaua 10.7.20 cu destinație pe rețeaua 10.7.0. sau 10.7.24.:

tcpdump -nvX src net 10.7.20.0.0/16 și dst net 10.7.0.0/8 sau 10.7.24.0/16

  • Trafic care vine din rețeaua 10.7.0.0 către porturile de destinație 22 sau 4589:

tcpdump „src 10.7.0.0 și (dst port 22 sau 4589)”

  • Vizualizați traficul pe interfață:
  • vezi traficul unei gazde:

gazdă tcpdump 192.168.1.1

  • Vizualizați traficul într-un port:

tcpdump src portul 80

  • Vizualizați traficul IP către gazdă:

tcpdump ip gazdă 192.168.1.2

  • Vedeți traficul ARP către gazdă:

tcpdump arp gazdă 192.168.1.2

  • Ne uităm la traficul RARP către gazdă:

tcpdump rarp gazdă 192.168.1.2

  • Ne uităm la trafic, cu excepția gazdei pav253

tcpdump nu găzduiește pav253

  • Ne uităm la trafic pe pav253 și pav210

tcpdump gazdă pav253 sau gazdă pav210

  • Ne uităm la conținutul pachetelor de pe interfața re0 către site-ul gazdă

tcpdump -X -i re0 site gazdă

  • trafic icq

tcpdump -X -i re0 port aol

  • Ne uităm la conținutul pachetelor de pe interfața tun0 către gazda ya.ru, în timp ce citim 1500 de octeți din fiecare pachet și nu convertim IP-ul în numele gazdei

tcpdump -X -s 1500 -n -i re0 site gazdă

  • Top interacțiuni active

tcpdump -tn -c 10000 -i re0 tcp sau udp | awk -F "." „(printați $1″.”$2″.”$3″.”$4)” | \sort | uniq -c | sort -nr | awk „$1 > 100”

  • Ne uităm la toate pachetele TCP cu flag SYN (început sesiunea).

tcpdump -i eth0 -nn tcp == 2 și src net 192.168.1.0/24

  • Vizualizați pachetele syn și fin din exterior

tcpdump 'tcp & (tcp-syn|tcp-fin) != 0 și nu src și dst net 192.168.1.0'

  • Vizualizați toate pachetele http ipv4 de la portul 80, cu excepția datelor syn/fin/ack

tcpdump „tcp portul 80 și (((ip — ((ip&0xf))<>2)) != 0)’

  • Vizualizați numai pachetele syn