Tcpdump pachete udp. Utilitarul Tcpdump, exemple de opțiuni de filtre. $ tcpdump opțiuni -i filtre de interfață

22.05.2023 Recenzii

Prin urmare, am decis să-mi creez propria foaie de cheat, astfel încât să fie... Pentru că fără tcpdump, mai mult de un administrator este non-administrator

Introducere

Foarte des, pentru a găsi probleme în rețea, folosesc analizoare de trafic de rețea . tcpdump este unul dintre reprezentanții acestei clase de programe, vă permite să ascultați (afișați/salvați) și să analizați funcționarea rețelei la nivel de pachete de rețea transmise, cadre și alte unități de transmisie a traficului de rețea. În funcție de configurația rețelei, tcpdump poate asculta nu numai pachete destinate unei anumite adrese MAC, ci și pachete de difuzare. Interceptarea pachetelor de rețea se bazează pe modul „promiscuu”. funcționarea adaptorului de rețea.

În funcție de echipamentul de rețea utilizat pentru conectarea computerelor la o rețea Ethernet, există următoarele: capabilități de ascultare a traficului:

  • Bazat online concentratoare tot traficul de la hub este disponibil pentru orice gazdă de rețea.
  • În rețele bazate întrerupătoare(comutatoare) gazda rețelei are acces numai la traficul său, precum și la tot traficul de difuzare a acestui segment.
  • Unele switch-uri gestionate au funcția de a copia traficul unui anumit port în portul de monitorizare („oglindire”, monitorizare port).
  • Când utilizați instrumente speciale (tapers) care sunt incluse într-o întrerupere a conexiunii la rețea și transmit traficul conexiunii către un port separat, este posibil să ascultați portul corespunzător.
  • „Smecheria” cu un hub este că portul switch-ului al cărui trafic trebuie ascultat este pornit prin hub, conectând și un nod de monitor la hub (în acest caz, în majoritatea cazurilor, performanța conexiunii la rețea este redus).

Asa de, utilitarul tcpdump inclus în majoritatea distribuțiilor Unix și vă permite să interceptați și să afișați/salvați traficul de rețea într-un fișier. Utilitarul folosește biblioteca libpcap. Există și un port pentru Windows. Este necesar pentru ca utilitatea să funcționeze. De exemplu, pe Debian este instalat folosind comanda:

Debian:~# apt-get install tcpdump

Utilitățile sunt necesare pentru funcționare (deoarece setările interfeței de rețea sunt modificate - este comutat în modul „promiscuu”). În general formatul de comandă tcpdump are următoarea formă:

Debian:~# tcpdump<опции> <фильтр>

opțiunile utilitarului tcpdump

-i interfață

Specifică interfața din care ar trebui analizat traficul (fără a specifica interfața - analiza „primului care apare”).

Dezactivează rezoluția IP la nume de domeniu. Dacă este specificat -nn, conversia numerelor de port în nume de protocol este interzisă.

Opțiunile de filtrare cele mai frecvent utilizate pentru comanda tcpdump sunt:

dst gazdă

Verifică dacă adresa de destinație a unui pachet IP se potrivește cu valoarea specificată. Este posibil să setați atât IP-ul, subrețea în format 10.0.0.1/24, cât și numele gazdei.

gazdă src

Verifică dacă adresa sursă a unui pachet IP se potrivește cu valoarea specificată. Este posibil să setați atât IP-ul, subrețea în format 10.0.0.1/24, cât și numele gazdei.

gazdă gazdă

Verifică dacă adresa expeditorului sau destinatarului se potrivește cu valoarea specificată. Este posibil să setați atât IP-ul, subrețea în format 10.0.0.1/24, cât și numele gazdei.

net network_name

Verifică dacă adresa expeditorului/destinatarului se află în rețeaua specificată. Este posibil să specificați rețeaua în format CIDR (de exemplu, 10.0.0.1/22) sau să specificați numele rețelei specificat în .

ip | arp | rarp | tcp | udp | icmp [gazdă]

Verifică dacă pachetul aparține unuia dintre protocoalele specificate și, când se specifică o adresă gazdă, verifică dacă adresa expeditorului/destinatarului se potrivește cu cea specificată. Este posibil să setați atât IP-ul, subrețea în format 10.0.0.1/24, cât și numele gazdei.

dst port port_number

Se verifică dacă pachetul aparține protocolului TCP/UDP și dacă portul de destinație este egal cu cel specificat. Puteți specifica numărul portului sau numele specificat în fișierul /etc/services.

src port port_number

Se verifică dacă pachetul aparține protocolului TCP/UDP și dacă portul sursă este egal cu cel specificat. Puteți specifica numărul portului sau numele specificat în fișierul /etc/services.

port port_number

Se verifică dacă pachetul aparține protocolului TCP/UDP și dacă portul de destinație sau sursă este egal cu cel specificat. Puteți specifica numărul portului sau numele specificat în fișierul /etc/services.

difuzare ip

Verifică dacă pachetul IP este un pachet de difuzare.

eter ( src | dst | gazdă ) adresa_MAC

Verifică dacă pachetul de rețea aparține sursei, destinației, sursei sau destinației având adresa MAC dată.

eter difuzat

Verifică dacă pachetul ARP este un pachet de difuzare.

Exemple de utilizare a comenzii tcpdump

Analiza traficului la nivel de rețea (ARP, ICMP) folosind tcpdump

Să presupunem că avem 2 gazde. Gazda 1 cu interfața eth0 și următorii parametri:

Host1:~# ip addr show dev eth0 5: eth0: mtu 1500 qdisc pfifo_fast state NECUNOSCUT qlen 1000 link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff inet 192.168.56.1/24 brd 192.168.56.56 inscope global fe800:56 eth. :800:27ff:fe00:0/64 scope link valid_lft forever preferred_lft forever

Și, de asemenea, host2 cu interfața eth1

Host2:~# ip addr show dev eth1 3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:fd:e5:aa brd ff:ff:ff:ff:ff:ff inet 192.168.56.33/24 scope global eth1 inet6 fe80::ff00:27:a00 :fefd:e5aa/64 scope link valid_lft forever preferred_lft forever

Să presupunem că până acum nu a existat un schimb de date de rețea între gazde și dacă rulați comanda ip neigh show pe gazda 2, veți vedea că nu există intrări în tabelul ARP. Hai să facem un mic experiment. Să rulăm utilitarul tcpdump pe una dintre interfețele virtuale host1:

Host1:~# tcpdump -ne -i eth0 tcpdump: ieșire verbosă suprimată, utilizați -v sau -vv pentru ascultarea completă a protocolului de decodificare pe eth0, tip link EN10MB (Ethernet), dimensiunea capturii 65535 octeți

Gazdă1:~# ping -c 1 192.168.56.33 PING 192.168.56.33 (192.168.56.33) 56(84) octeți de date. 64 de octeți de la 192.168.56.33: icmp_req=1 ttl=64 time=1.06 ms --- 192.168.56.33 ping statistics --- 1 pachet transmis, 1 primit, 0% pierdere pachet, timp 0ms rtt/min/mdevg = 1,067/1,067/1,067/0,000 ms

După aceasta, a apărut o intrare despre adresa IP a host2 în tabelul ARP al sistemului host1:

Host1:~# ip neigh show dev eth0 192.168.56.33 lladdr 01:00:27:77:e5:00 HOST2

Pe consola virtuală, tcpdump ne-a afișat următoarele informații:

Host1:~# tcpdump -ne -i eth0 tcpdump: ieșire verbosă suprimată, utilizați -v sau -vv pentru ascultarea completă a protocolului de decodificare pe eth0, tip link EN10MB (Ethernet), dimensiunea capturii 65535 octeți 12:16:29.465780 0a:00 :27:00:00:00 > ff:ff:ff:ff:ff:ff, etertip ARP (0x0806), lungime 42: Solicitați cine-are 192.168.56.33 spuneți 192.168.56.1, lungime 28 12:16:29.4668 :00:27:77:e5:00 > 0a:00:27:00:00:00, etertip ARP (0x0806), lungime 42: Răspunsul 192.168.56.33 este la 01:00:27:77:e5:00 , lungime 28 12:16:29.466815 0a:00:27:00:00:00 > 01:00:27:77:e5:00, ethertype IPv4 (0x0800), lungime 98: 192.168.56.1 > 192.168.56.1 > 192.MPIC6.163. cerere echo, id 5284, seq 1, lungime 64 12:16:29.467934 01:00:27:77:e5:00 > 0a:00:27:00:00:00, ethertype IPv4 (0x0800), lungime 98:192. .56.33 > 192.168.56.1: răspuns ecou ICMP, id 5284, seq 1, lungime 64 ^C 4 pachete capturate 4 pachete primite de filtru 0 pachete eliminate de nucleu

Fiecare înregistrare de pachet de rețea în acest format conține ora la care pachetul a fost interceptat, adresele MAC sursă și destinație, tipul de protocol, lungimea pachetului și informații despre conținutul pachetului. Prima înregistrare descrie o cerere de difuzare ARP de la adresa MAC a interfeței eth0 a gazdei de sistem1 (" Cine are adresa 192.168.56.33, scrie 192.168.56.1"). A doua intrare- răspuns de la adresa MAC a host2 la adresa MAC a host1 (" 192.168.56.33 are o adresă MAC de 01:00:27:77:e5:00"). A treia și a patra intrare (Solicitare ICMPȘi Răspunsul ICMP) sunt rezultatul comenzii ping care rulează pe host1. Apoi tcpdump a fost întrerupt. Înainte de oprire, tcpdump tipărește statistici de funcționare: numărul de pachete interceptate, primite de filtru și aruncate de kernel

Astfel, sistemul host1, pentru a trimite o cerere de ecou standard către mașina host2, a primit mai întâi adresele MAC ale mașinii host2 folosind protocolul ARP și le-a introdus, legat de adresa IP, în tabelul său ARP.

Analiza traficului la nivelul de transport (TCP, UDP) folosind tcpdump

Să presupunem că un anumit server WEB este instalat pe sistemul host2. Să încercăm să deschidem o pagină de pe acest server web pe mașina host1 folosind browserul consolei lynx:

Gazdă1:~# lynx 192.168.56.33

Pe o altă consolă, mai întâi rulați tcpdump cu parametrii de filtrare:

Host1:~# tcpdump -n -i eth0 gazdă 192.168.56.33 și portul 80 tcpdump: ieșire verbosă suprimată, utilizați -v sau -vv pentru ascultarea completă a protocolului de decodificare pe eth0, tip link EN10MB (Ethernet), dimensiunea capturii 65535 octeți 15 :44:37.837393 IP 192.168.56.1.41533 > 192.168.56.33.80: Steaguri [S], secv 1209026235, win 5840, opțiuni, lungime 0 15:44:33.80. > IP83. 1 92.168.56.1.41533 : Flags , seq 370041518, ack 1209026236, win 5792, options , length 0 15:44:37.838157 IP 192.168.56.1.41533 > 192.168.56, win 5792, options ack 6 length, options 4.3. 0 1 5: 44:37.839254 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags , seq 1:222, ack 1, win 46, options , length 221 15:44:32.18.18. 192 .168.56 .1.41533 : Steaguri [.], ack 222, câștig 1716, opțiuni , lungime 0 15:44:37.848118 IP 192.168.56.33.80 > 192.168.56.1.41533: Steaguri 247:37.848118, a1: opțiuni 247. , lungime 445 15:44:37.848156 IP 192.168.56.1.41533 > 192.168.56.33.80: Steaguri [.], ack 446, win 54, opțiuni , lungime 0 15:44:44:37.38 > IP68. 192. 168.56.1.41533: Indicatori, SEQ 446, ACK 222, Win 1716, Opțiuni, Lungime 0 15: 44: 37.850366 IP 192.168.56.1.41533> 192.168.56.1.41533> 192.168.56.1.41533> 192.168.16.1.41533> 192.168.16.16.1.41533, Opțiunea 4, Op7. tions, leen GTH 0 15:44:37.851267 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 223, win 1716, options , length 0 ...

În acest exemplu, clientul (192.168.56.1) de la portul TCP 41533 stabilește o conexiune la serverul (192.168.56.33) care ascultă pe portul 80, face o cerere, primește datele necesare și conexiunea se termină.

Antetul segmentului TCP, în plus față de numerele portului destinatarului și expeditorului conține o serie de parametri:

  • Număr de secvență(secv). Determină ordinea octeților din fluxul trimis în rețea (offset-ul primului octet din segment relativ la începutul fluxului de date).
  • Numar confirmat(ACK). Numărul maxim de octeți din segmentul primit este mărit cu 1. Confirmările trimise expeditorului servesc simultan ca cerere pentru o nouă porțiune de date.
  • Steaguri de control(SYN - S, ACK, FIN -F, RST - R, PSH - P, URG)
  • Fereastră(win) - numărul de octeți de date așteptați de expeditorul datelor, începând de la octetul al cărui număr este indicat în câmpul de confirmare. Pentru a optimiza transmisia, expeditorul nu așteaptă o confirmare pentru fiecare segment trimis, ci poate trimite un grup în rețea către segment (dar în octeți nu mai mari decât dimensiunea ferestrei). Dacă calitatea canalului este slabă (multe solicitări de retransmisie, confirmări sunt pierdute), fereastra scade; dacă este bună, fereastra crește.
  • Opțiuni. Folosit pentru a rezolva probleme auxiliare. De exemplu, se transmite MSS (Dimensiunea maximă a segmentului) - dimensiunea maximă a segmentului.

Procesul de stabilire a unei conexiuni TCP bidirecționale este reflectat în primele trei intrări tcpdump:

  • Clientul trimite serverului un segment TCP cu steag-ul SYN setat, numărul inițial „aleatoriu” (1209026235), din care vor fi numerotați octeții din fluxul pe care îl trimite, dimensiunea maximă a ferestrei este cantitatea pe care serverul îi este permis să o transmite fără confirmare de la client (5840): 15: 44:37.837393 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [S], seq 1209026235, win 5840, options length
  • Serverul trimite clientului un segment TCP cu steagurile SYN și ACK setate, un număr de început „aleatoriu” (370041518) de la care vor fi numerotați octeții din fluxul pe care îl trimite și dimensiunea maximă a ferestrei pentru client (5792). Acest segment confirmă, de asemenea, primirea unei cereri de conectare de la client: 15:44:37.838118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags , seq 370041518, ack 12369, options 657692, win 657
  • Clientul trimite serverului un segment TCP cu indicatorul ACK setat, care este o confirmare a primirii segmentului de la server (în continuare, tcpdump afișează valorile relative ale seq și ask): 15:44:37.838157 IP 192.168.56.1 .41533 > 192.168.56.33.80: steaguri [. ], ack 1, câștig 46, opțiuni , lungime

După care legătura se consideră stabilită.

În următoarea pereche de înregistrări, clientul trimite o cerere de protocol de nivel de aplicație (221 de octeți) către server în secțiunea de date segment și primește confirmarea de la server a primirii acesteia:

15:44:37.839254 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags , seq 1:222, ack 1, win 46, options , length 221 15:44:32.18.18. 192.168.56.1 .41533: Steaguri [.], ack 222, câștig 1716, opțiuni, lungime 0

În acest caz, indicatorul PSH (P) este utilizat pentru a notifica partea care trimite că partea care primește este gata să primească date. Apoi, serverul trimite datele către client (445 de octeți) și primește confirmarea primirii de la acesta:

15:44:37.848118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags , seq 1:446, ack 222, win 1716, options , length 445 15.184.68:15. 4 1533 > 192.168. 56.33 .80: Steaguri [.], ack 446, câștig 54, opțiuni , lungime 0

Apoi, la inițiativa serverului, conexiunea este întreruptă. Serverul trimite un pachet cu steag-ul FIN setat:

15:44:37.849738 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags , seq 446, ack 222, win 1716, options , length 0

Clientul răspunde, de asemenea, prin trimiterea unui pachet cu flag-ul FIN setat; acest pachet este și o confirmare a primirii unei cereri de terminare a conexiunii de la server:

15:44:37.850366 IP 192.168.56.1.41533 > 192.168.56.33.80: Steaguri , secv 222, ack 447, câștig 54, opțiuni, lungime 0

Serverul poate confirma doar primirea segmentului FIN de la client:

15:44:37.851267 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 223, win 1716, options , length 0

Reacția tcpdump la o încercare de conectare la un port închis 23/tcp:

21:56:14.381091 IP 192.168.56.1.54040 > 192.168.56.33.23: Steaguri [S], secv 2956835311, win 5840, opțiuni, lungime 0 21:581.28.261.361.26. 3 > 192.168.56.1.54040 : Steaguri, secv 0, ack 2956835312, câștig 0, lungime 0

În acest exemplu, se încearcă din sistemul 192.168.56.1 să se conecteze la un serviciu TCP inexistent pe nodul 192.168.56.33. Sistemul de la distanță răspunde prin trimiterea unui segment cu steag-ul RST (resetare) setat.

Răspuns tcpdump la trimiterea unei datagrame UDP la un port închis 53/udp:

21:55:16.925906 IP 192.168.56.1.41979 > 192.168.56.33.53: 6561+ A? www.tut.by. (28) 21:55:16.926615 IP 192.168.56.33 > 192.168.56.1: ICMP 192.168.56.33 udp port 53 inaccesibil, lungime 64

Acest exemplu încearcă să trimită o datagramă UDP la un port inexistent pe un sistem la distanță. UDP răspunde de obicei prin trimiterea unui mesaj ICMP la gazda sursă că portul este inaccesibil.

Alte exemple de utilizare a comenzii tcpdump:

# tcpdump -n -i ppp0 ether src 11:20:b3:d8:d8:2c

Afișați statisticile de rețea din interfața ppp0 (-i ppp0) fără a converti IP-ul în DNS (-n) pentru acele cadre a căror adresă MAC sursă este 11:20:b3:d8:d8:2c.

# tcpdump -n -e -i vlan0 ether broadcast

Ieșirea traficului de difuzare din interfața vlan0.

# tcpdump -n -i eth0 src 192.168.66.1

Pachetele de rețea al căror antet conține adresa IP 192.168.66.1 în câmpul sursă sunt filtrate.

# tcpdump -n -i eth0 gazdă 192.168.66.1

Pachetele în care această adresă IP este specificată ca sursă sau destinație a pachetului sunt filtrate.

# tcpdump -n -i eth0 src net 10.0.0.0 mask 255.0.0.0

Pachetele a căror sursă indică nodurile de rețea 10.0.0.0/8 sunt filtrate.

# tcpdump -n -i eth0 icmp

Emite numai pachete ICMP din interfața eth0.

Cu asta, cred că voi încheia articolul curent. Pe măsură ce apar noi exemple, voi actualiza articolul. Sper ca materialul să-mi fie de folos nu numai mie

Articolul a folosit exemple și câteva materiale din prelegerile intuit.

Salutări, McSim!

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

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

Utilitarul tcpdump este un instrument foarte puternic și popular pentru interceptarea și analiza pachetelor de rețea. Vă permite să vizualizați toate pachetele de intrare și de ieșire dintr-o interfață specifică și funcționează pe linia de comandă. Desigur, puteți folosi Wirshark pentru a analiza pachetele de rețea, este un utilitar grafic, dar uneori sunt situații când trebuie să lucrați doar în terminal.

Tcpdump nu este mai rău decât Wireshark și are toate capabilitățile necesare pentru analiza pachetelor, în plus, puteți salva toate pachetele interceptate într-un fișier pentru a le analiza ulterior folosind același Wireshark. În acest articol ne vom uita la cum să folosiți tcpdump pentru a intercepta pachetele de rețea.

Multe distribuții vin cu comanda tcpdump în mod implicit, dar dacă distribuția dvs. nu o are, o puteți instala foarte ușor din depozitele oficiale. De exemplu, în Ubuntu/Debian:

sudo apt install tcpdum p

Pe Fedora/Red Hat/CentOS:

sudo yum install tcpdump

Când instalarea este finalizată, puteți trece la lucru.

comanda tcpdump

Înainte de a trece la exemple de lucru cu utilitarul, să ne uităm la sintaxa și opțiunile de bază ale acestuia. Comanda are următoarea sintaxă:

$ tcpdump opțiuni -i filtre de interfață

Când apelați, trebuie să treceți interfața pe care o veți monitoriza. Dacă interfața nu este specificată, va fi folosită prima din listă. Opțiunile configurează afișarea și capabilitățile de bază ale utilitarului, iar filtrele vă permit să filtrați pachetele inutile. Acum să ne uităm la opțiunile principale:

  • -A- scoateți toate pachetele în format ASCII;
  • -c- închide programul după interceptarea celui de-al n-lea număr de pachete;
  • -C- când scrieți pachete într-un fișier, verificați dimensiunea fișierului, iar dacă este mai mare decât cea specificată, creați un fișier nou;
  • -D- afișarea unei liste de interfețe de rețea disponibile;
  • -e- afișați informații despre nivelul de conexiune pentru fiecare pachet, acest lucru poate fi util, de exemplu, pentru afișarea adresei MAC;
  • -f- afișarea numelui de domeniu pentru adresele IP;
  • -F- citiți pachete dintr-un fișier, nu dintr-o interfață;
  • -G- creați un nou fișier jurnal după o anumită perioadă de timp;
  • -H- detectează anteturile 802.11s;
  • -i- numele interfeței pentru interceptarea pachetelor. Puteți captura pachete din toate interfețele; pentru a face acest lucru, specificați oricare;
  • -Eu- comutați interfața în modul monitor pentru a captura toate pachetele care trec;
  • -j- setați formatul de marcaj de timp pentru înregistrarea pachetelor;
  • -J- vizualizați marcajele de timp disponibile;
  • -K- nu verificați sumele de control ale pachetelor;
  • -l- adăugați suport de defilare la ieșire;
  • -L- afișarea protocoalelor de conectare acceptate pentru interfață;
  • -n- nu afisati nume de domenii;
  • -r- citeste pachete dintr-un fisier creat cu -w;
  • -v, -vv, -vvv- rezultate mai detaliate;
  • -q- afisarea unui minim de informatii;
  • -w- scrie ieșirea într-un fișier;
  • -Z- utilizatorul în numele căruia vor fi create fișierele.

Acestea nu sunt toate opțiunile, dar vă vor fi suficiente pentru a rezolva majoritatea problemelor. Vom folosi filtre mai des. Folosind filtre, puteți filtra numai acele tipuri de pachete pe care doriți să le vedeți. Puteți filtra după adresa IP, protocol, rețea, interfață și mulți alți parametri. Dar ne vom uita la filtrele tcpdump folosind exemple.

Cum se utilizează tcpdump

Înainte de a trece la utilizarea tcpdump, trebuie să vă uitați la ce interfețe de rețea puteți utiliza. Pentru a face acest lucru, executați comanda cu opțiunea -D:

Să începem să privim exemplele tcpdump prin captarea traficului pe interfața eth0; pentru mine, aceasta este interfața principală care este conectată la Internet. Programul necesită drepturi de superutilizator pentru a rula, așa că nu uitați să utilizați sudo:

sudo tcpdump -i eth0

Pentru a opri comanda, apăsați Ctrl+C. În rezultat, veți vedea imediat toate pachetele interceptate. Formatul de înregistrare pentru fiecare pachet va arăta astfel:

13:03:41.795599 IP udp032919uds.hawaiiantel.net.6881> 192.168.1.2.52055 : Steaguri [.], secv 640160396:640161844, ack 436677393, câștig 2050, opțiuni, lungime 1448

Acest format este tipic pentru pachetele de date; în funcție de protocol, textul evidențiat cu negru va diferi. Mai întâi vine marcajul de timp, apoi protocolul, apoi adresa IP a expeditorului este verde, iar adresa destinatarului, în acest caz, computerul nostru, este albastră. Urmează parametrii tcp suplimentari și la sfârșit dimensiunea pachetului în octeți. Detaliile ieșirii pot fi controlate folosind opțiunile -v. De exemplu:

sudo tcpdump -v -i eth0

Informațiile despre protocolul IP apar deja aici:

IP (to 0x0, ttl 64, id 50309, offset 0, steaguri, proto TCP (6), lungime 64)

Putem afla informații despre durata de viață a pachetului TTL, versiunea protocolului TCP și lungimea câmpului antet. Opțiunea -vv va afișa verificarea sumei de verificare a pachetului și conținutul în unele cazuri.

După opțiuni puteți specifica filtre pentru pachete. Iată principalii parametri după care puteți filtra pachetele:

  • gazdă- numele gazdei;
  • ip- Adresa IP;
  • proto- protocol;
  • net- adresa de rețea sau de subrețea;
  • port- adresa portului;
  • src- parametru legat de expeditor;
  • dst- parametru legat de destinatar;
  • Următoarele protocoale sunt disponibile: eter, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcpȘi udp.

Puteți combina toate acestea între ele pentru a obține rezultatul dorit. Să ne uităm mai detaliat folosind exemple. Să filtrăm numai pachetele adresate computerului nostru:

sudo tcpdump -i eth0 ip dst 192.168.1.2

De asemenea, putem selecta pachete trimise către un anumit nod:

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

După cum puteți vedea, acestea sunt pachete DNS și în loc de steaguri TCP, acestea conțin informații utile, o solicitare pentru adresa IP a gazdei. De asemenea, puteți selecta pachete de răspuns de la o anumită gazdă:

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

Acesta nu este conținutul complet al pachetului, dacă doriți să-l obțineți, trebuie să utilizați opțiunea -v sau -vv:

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

Cu operatorul și puteți combina mai multe filtre într-unul singur:

sudo tcpdump -i eth0 dst host google-public-dns-a.google.com și src host google-public-dns-a.google.com

Operațiunile de îmbinare disponibile sunt și și sau și puteți folosi și paranteze pentru a indica precedența. Nu trebuie să specificați gazdă, în multe cazuri src sau dst este suficient, utilitarul în sine va înțelege ce s-a vrut să spună. Același design poate fi folosit pentru porturi. De exemplu, putem filtra toate cererile sau răspunsurile la DNS (pe portul 53):

sudo tcpdump -vv -i eth0 portul 53

Același lucru se poate face și pentru http (portul 80):

sudo tcpdump -vv -i eth0 portul 80

Desigur, dst și src pot fi, de asemenea, folosite aici pentru rezultate mai specifice. Puteți filtra nu doar un port, ci o întreagă gamă de porturi:

sudo tcpdump portrange 21-23

Dacă specificați unul dintre protocoale, veți filtra numai pachetele din acel protocol, cum ar fi tcp, udp sau arp:

sudo tcpdump -vv arp

În același mod, puteți selecta toate pachetele udp:

sudo tcpdump -vv udp

De asemenea, este disponibil un filtru după denumirea rețelei:

sudo tcpdump net 129.168.1.1/24

În plus, puteți filtra pachetele după dimensiunea lor, de exemplu mai puțin de 32 de octeți:

sudo tcpdump mai mic de 32

Sau mai mult de 128:

tcpdump mai mare de 128

sudo tcpdump -i eth0 -w file.pcap

Acest fișier poate fi deschis folosind orice program pentru citirea unor astfel de fișiere, cum ar fi Wireshark. Pentru a deschide pachetele salvate într-un fișier, utilizați opțiunea -r:

sudo tcpdump -r file.pcap

Mai este un punct căruia merită să fii atent. Acesta este un format pentru afișarea conținutului pachetelor. Puteți scoate conținutul pachetului în format ASCII utilizând opțiunea -A:

sudo tcpdump -A -i eth0

De asemenea, puteți afișa conținut în format HEX și ASCII, utilizați -XX pentru aceasta:

sudo tcpdump -XX -i eth0

concluzii

În acest articol, ne-am uitat la modul de utilizare a tcpdump. Acesta este un analizor de rețea foarte puternic care funcționează numai prin linia de comandă. Sper că aceste informații v-au fost utile și acum să folosiți tcpdump va fi mult mai ușor, dacă aveți întrebări, întrebați în comentarii!

Pentru a încheia videoclipul cu o prelegere despre tcpdump:

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.