Efectuarea capturilor de pachete folosind un sniffer poate fi o metodă extrem de puternică pentru diagnosticarea problemelor complexe. Când toate celelalte nu reușesc, este adesea util să vizualizați datele brute trimise prin cablu. Pachetele nu mint, iar analizarea traficului aplicației dvs. la un nivel scăzut poate dezvălui simptome mai profunde ale unei probleme (sau dezvăluie o problemă despre care nici nu știați că există).
În acest articol, Vom acoperi câteva elemente fundamentale ale utilizării instrumentului tcpdump
bazat pe CLI.
Noțiuni de bază despre sniffer
Deci mai întâi lucrurile mai întâi: la ce ne referim când spunem „sniffer de pachete?” Un sniffer de pachete este pur și simplu o bucată de software care vă permite să capturați pachete în rețeaua dvs. Tcpdump și Wireshark sunt exemple de sniffers de pachete. Tcpdump oferă un sniffer de pachete CLI, iar Wireshark oferă o interfață grafică bogată în funcții pentru adulmecarea și analiza pachetelor.
În mod implicit, tcpdump
funcționează în modul promiscuu. Aceasta înseamnă pur și simplu că toate pachetele care ajung la o gazdă vor fi trimise la tcpdump
pentru inspecție. Această setare include chiar și trafic care nu a fost destinat gazdei specifice pe care o capturați, cum ar fi difuzarea și traficul multicast. Desigur, tcpdump
nu este o piesă magică de software: poate captura numai acele pachete care ajung cumva la una dintre interfețele fizice de pe mașina dvs.
Instalarea tcpdump
este simplu. Este disponibil în depozitele de pachete standard din sistemul Red Hat și îl puteți instala după nume:
Scenarii obișnuite de sniffing a pachetelor
Captarea întregului trafic care intră în mașina dvs. poate suna din punct de vedere conceptual, dar sună, de asemenea, la un nivel destul de scăzut pentru multe dintre activitățile pe care le desfășurăm în activitatea noastră de zi cu zi ca administratori de sistem. Deci, când ați folosi un instrument de captare a pachetelor? De obicei, apelez la un sniffer de pachete când depanez o problemă a aplicației de rețea și am epuizat toate celelalte opțiuni. De multe ori, am efectuat deja depanarea de bază a rețelei și am examinat toate fișierele jurnal ale aplicației, dar încă nu pot ajunge la partea de jos a unei probleme. În acest moment, distrugerea unui sniffer de pachete pentru a observa datele reale trimise pe fir poate fi instructivă.
Un alt caz de utilizare excelent pentru un sniffer de pachete este pedagogic. Urmărirea pachetelor implicate într-un schimb de aplicații poate contribui la îmbunătățirea înțelegerii protocoalelor subiacente. De exemplu, poate fi neprețuit să observi fluxul complet de pachete ale unei interogări DNS recursive atunci când încerci să înțelegi cum funcționează DNS.
Efectuarea capturilor de pachete de bază
Cel mai bun mod de a învăța este doar scufundându-ne, așa că să începem cu câteva capturi de pachete de bază. Mai întâi, să încercăm tcpdump
fără opțiuni speciale. Rețineți că va trebui să fiți superutilizatorul pentru a efectua capturi de pachete (din punct de vedere tehnic, îl puteți rula dintr-un cont obișnuit cu funcții speciale, dar de obicei este mai ușor să îl rulați ca root). Utilizați Ctrl + C sau trimiteți un SIGTERM la tcpdump
ID-ul procesului (PID) pentru a opri captura.
Tcpdump implicit
To vedeți ieșirea implicită a tcpdump
, pur și simplu tastați comanda:
Notă: În loc să aveți o mulțime de ieșiri înainte de a apăsa Ctrl + C, puteți specifica câte pachete doriți să vedeți cu steagul -c
. Comanda de mai sus ar putea fi tcpdump -c 6
pentru a obține aceleași rezultate (șase pachete capturate).
Ieșirea de la tcpdump
poate fi un pic descurajator la început, dar te vei obișnui să-l privești după ce ai folosit acest instrument de câteva ori. Să descompunem câmpurile, de la stânga la dreapta:
Adulmecând o interfață specifică
Observați că partea de sus a rezultatului exemplului anterior vă arată interfața care tcpdump
începe capturarea pe (eth0), iar partea de jos a capturii include statistici rezumative despre pachetele capturate.
Primul lucru pe care probabil îl veți dori să faceți când utilizați tcpdump
este de a specifica o interfață specială pentru efectuarea capturilor. În mod implicit, tcpdump
va alege cea mai mică interfață numerotată care este „sus”. Multe servere au mai multe interfețe și veți dori să fiți explicit cu privire la interfața pe care o utilizați pentru capturare. În plus, unele tipuri de interfețe „speciale”, cum ar fi o interfață netfilter
, pot pluti în partea de sus a listei. Acest comportament poate provoca confuzie, deci este mai bine să specificați interfața care vă interesează.
Să începem prin a vizualiza interfețele disponibile pentru captare:
Cu o listă de interfețe la dispoziția noastră, putem specifica acum interfața de ascultat cu semnalizatorul -i
.Rețineți că se poate utiliza fie numele interfeței, fie numărul din comanda --list-interfaces
:
Privind capturile de mai sus ne oferă informații de bază despre pachetele care traversează reţea. Se pare că aceste pachete conțin ieșire Spanning Tree Protocol (STP), poate de la un comutator în amonte. Din punct de vedere tehnic, acestea nu sunt pachete, sunt straturi de două straturi. Cu toate acestea, veți auzi termenii folosiți în mod interschimbabil atunci când discutați capturi de pachete.
Obținerea de informații suplimentare
Rezultatul simplu de depanare al exemplului anterior poate fi excelent pentru identificarea problemelor evidente, dar uneori avem nevoie de mai multe informații pentru a sapa într-adevăr într-o problemă complexă. Este important să știți cum să reglați detaliile capturii dvs., deoarece vă permite să vă adânciți în datele reale conținute în pachete.
Nivelul de detaliere al tcpdump
este controlat prin adăugarea între unul și trei -v
steaguri la comandă:
Rețineți că, specificând nivelul maxim de detaliere, pot vedea mult mai multe informații despre corpul pachetului. Mai sus, putem vedea informații suplimentare despre datele din pachetul STP, cum ar fi ID-ul podului rădăcină și costul căii de rădăcină. Dacă nu sunteți familiarizați cu STP, nu vă faceți griji. Important de remarcat aici este că, prin creșterea detaliilor, putem obține informații suplimentare despre traficul de rețea.
Vizualizarea octeților exacți ai unui pachet
Creșterea detaliilor este utilă, dar noi încă nu văd carnea conținutului pachetelor. Dacă doriți cu adevărat să vedeți exact octeții care sunt în pachete, puteți utiliza semnalizatoarele -x
și -X
. Steagul -x
tipărește datele din fiecare pachet în hexazec, în timp ce steagul -X
tipărește și datele în ASCII. Iată ieșirea utilizând -x
:
Și iată ieșirea utilizând -X
:
Observați datele hex și ASCII din exemplele de mai sus. În acest caz, efectuam o interogare de înregistrare DNS A pentru . De asemenea, rețineți că am folosit steagul
-c
pentru a specifica numărul de pachete de capturat și am furnizat un filtru de captură de port 53
. Vom discuta despre filtre în articolul următor.
Rămânem cu numerele
Pe măsură ce lucrați cu tcpdump
, este posibil să observați că comportamentul său implicit este de a rezolva automat adresele IP către nume de domenii complet calificate (FQDN). Tcpdump va traduce, de asemenea, numerele de porturi (cum ar fi 22) în nume prietenoase (cum ar fi SSH). Deși acest comportament este frumos, dorim adesea să vedem datele numerice, astfel încât să nu ascundem în niciun fel soluționarea problemelor. Acest comportament implicit poate fi modificat prin trecerea fie -n
pentru a dezactiva căutările de adrese IP, fie -nn
pentru a dezactiva atât căutările de adresă IP, cât și căutările de port.
Iată rezultatul când utilizați -nn
:
Salvarea dump-ului dvs.
La un moment dat, poate doriți pentru a vă salva capturile de pachete pentru o analiză ulterioară sau pentru o analiză mai profundă cu un instrument grafic precum Wireshark. Această sarcină poate fi realizată cu ușurință cu semnalizatorul -w
, care vă permite să scrieți un fișier de captare a pachetelor:
Notă: Puteți citi fișierul salvat folosind tcpdump
cu steagul -r
sau cu o altă aplicație care acceptă formatul de fișier pcap.
După cum putem vedea mai sus , steagul -w
a produs un fișier pcap la îndemână pe care îl putem lua cu noi.
Înfășurarea
Efectuarea capturilor de pachete este o tehnică puternică în inventarul de abilități de depanare a rețelei, mai ales atunci când sunteți blocat de o problemă și restul rețelei pare OK. Înțelegerea modului de utilizare a tcpdump
pe linia de comandă vă poate economisi ore de frustrare atunci când încercați să rezolvați problemele aplicațiilor de rețea, iar sintaxa este destul de intuitivă odată ce vă obișnuiți cu ea.