tcpdump

TCPDUMP Ghid pentru începători

TCPDUMP Ghid pentru începători
Tcpdump este un analizor de pachete de rețea de date fără fir și cu sursă deschisă, care funcționează pe interfața liniei de comandă. Este cel mai frecvent instrument CLI utilizat pentru a analiza traficul de rețea. Tcpdump permite utilizatorilor să vadă, să citească sau să captureze traficul de rețea transmis printr-o rețea atașată la computer. Este util în administrarea sistemului, monitorizarea traficului de rețea (pentru probleme sau altele).

Inițial, a fost scris în 1988 de patru lucrători ai Grupului de cercetare a rețelei la laboratorul Lawrence Berkeley din California. A fost organizat unsprezece ani mai târziu de Micheal Richardson și Bill Fenner în 1999, care au creat site-ul tcpdump. Tcpdump funcționează pe toate sistemele de operare de tip Unix. Versiunea Windows a Tcpdump se numește WinDump și folosește WinPcap, alternativa Windows pentru libpcap.

Utilizați snap-ul pentru a instala tcpdump:

$ sudo snap install tcpdump

Utilizați managerul de pachete pentru a instala tcpdump:

$ sudo apt-get install tcpdump (Debian / Ubuntu)
$ sudo dnf install tcpdump (CentOS / RHEL 6 și 7)
$ sudo yum install tcpdump (Fedora / CentOS / RHEL 8)

Să vedem diferite utilizări și rezultate în timp ce explorăm tcpdump!

UDP

Tcpdump poate descărca și pachetele UDP. Vom folosi un instrument netcat (nc) pentru a trimite un pachet UDP și apoi îl vom arunca.

$ echo -n "tcpdumper" | nc -w 1 -u localhost 1337

În comanda dată mai sus, trimitem un pachet UDP format din șir „Tcpdumper” la portul UDP 1337 prin intermediul gazdă locală. Tcpdump captează pachetul trimis prin portul UDP 1337 și îl va afișa.

Acum vom arunca acest pachet folosind tcpdump.

$ sudo tcpdump -i lo udp port 1337 -vvv -X

Această comandă va captura și va arăta datele capturate din pachete în format ASCII, precum și în formă hexagonală.

tcpdump: ascultare pe lo, EN10MB (Ethernet) de tip link, lungime instantaneu 262144 octeți
04:39:39.072802 IP (tos 0x0, ttl 64, id 32650, offset 0, steaguri [DF], proto UDP (17), lungime 37)
gazdă locală.54574> localhost.1337: [udp cksum rău 0xfe24 -> 0xeac6!] UDP, lungimea 9
0x0000: 4500 0025 7f8a 4000 4011 bd3b 7f00 0001 E ...% ... @.@ ...; ..
0x0010: 7f00 0001 d52e 0539 0011 fe24 7463 7064 ... 9 ... $ tcpd
0x0020: 756d 7065 72 umper

După cum putem vedea, pachetul a fost trimis la portul 1337, iar lungimea a fost 9 ca șir tcpdumper este de 9 octeți. De asemenea, putem vedea că pachetul a fost afișat în format hex.

DHCP

Tcpdump poate efectua, de asemenea, investigații asupra pachetelor DHCP prin rețea. DHCP folosește portul UDP nr. 67 sau 68, așa că vom defini și limita tcpdump doar pentru pachetele DHCP. Să presupunem că folosim o interfață de rețea wifi.
Comanda folosită aici va fi:

$ sudo tcpdump -i wlan0 port 67 sau port 68 -e -n -vvv
tcpdump: ascultare pe wlan0, EN10MB de tip link (Ethernet), lungime instantaneu 262144 octeți
03:52:04.004356 00: 11: 22: 33: 44: 55> 00: 11: 22: 33: 44: 66, tip eter IPv4 (0x0800), lungime 342: (tos 0x0, ttl 64, id 39781, offset 0, steaguri [DF ], proto UDP (17), lungime 328)
192.168.10.21.68> 192.168.10.1.67: [udp sum ok] BOOTP / DHCP, Cerere de la 00: 11: 22: 33: 44: 55, lungime 300, xid 0xfeab2d67, Steaguri [none] (0x0000)
Client-IP 192.168.10.16
Client-Ethernet-Address 00: 11: 22: 33: 44: 55
Extensii pentru furnizor-rfc1048
Cookie-ul magic 0x63825363
Mesaj DHCP (53), lungime 1: Eliberare
Server-ID (54), lungime 4: 192.168.10.1
Numele gazdei (12), lungimea 6: „papagal”
END (255), lungime 0
PAD (0), lungimea 0, apare 42

DNS

DNS, cunoscut și sub numele de Domain Name System, confirmă că vă oferă ceea ce căutați prin potrivirea numelui de domeniu cu adresa domeniului. Pentru a inspecta comunicarea la nivel DNS a dispozitivului dvs. pe internet, puteți utiliza tcpdump în felul următor. DNS utilizează portul UDP 53 pentru comunicare.

$ sudo tcpdump -i wlan0 udp port 53
tcpdump: ascultare pe wlan0, EN10MB de tip link (Ethernet), lungime instantaneu 262144 octeți
04:23:48.516616 IP (tos 0x0, ttl 64, id 31445, offset 0, steaguri [DF], proto UDP (17), lungime 72)
192.168.10.16.45899> unul.unu.unu.unu.domeniu: [udp sum ok] 20852+ A? mozilla.cloudflare-dns.com. (44)
04:23:48.551556 IP (tos 0x0, ttl 60, id 56385, offset 0, steaguri [DF], proto UDP (17), lungime 104)
unu.unu.unu.unu.domeniu> 192.168.10.16.45899: [udp sum ok] 20852 q: A? mozilla.cloudflare-dns.com. 2/0/0 mozilla.cloudflare-dns.com. [24s] A 104.16.249.249, mozilla.cloudflare-dns.com. [24s] A 104.16.248.249 (76)
04:23:48.648477 IP (tos 0x0, ttl 64, id 31446, offset 0, steaguri [DF], proto UDP (17), lungime 66)
192.168.10.16.34043> unul.unu.unu.unu.domeniu: [udp sum ok] 40757+ PTR? 1.1.1.1.in-addr.arpa. (38)
04:23:48.688731 IP (tos 0x0, ttl 60, id 56387, offset 0, steaguri [DF], proto UDP (17), lungime 95)
unu.unu.unu.unu.domeniu> 192.168.10.16.34043: [udp sum ok] 40757 q: PTR? 1.1.1.1.in-addr.arpa. 1/0/0 1.1.1.1.in-addr.arpa. [26m53s] PTR one.unu.unu.unu. (67)

ARP

Protocolul de rezoluție a adresei este utilizat pentru a descoperi adresa stratului de legătură, cum ar fi o adresă MAC. Este asociat cu o anumită adresă de nivel internet, de obicei o adresă IPv4.

Folosim tcpdump pentru a captura și a citi datele transportate în pachetele arp. Comanda este la fel de simplă ca:

$ sudo tcpdump -i wlan0 arp -vvv
tcpdump: ascultare pe wlan0, tip EN10MB (Ethernet) de tip link, lungime instantaneu 262144 octeți
03:44:12.023668 ARP, Ethernet (len 6), IPv4 (len 4), Solicitați cine are 192.168.10.1 spun 192.168.10.2, lungime 28
03:44:17.140259 ARP, Ethernet (len 6), IPv4 (len 4), Solicitați cine are 192.168.10.21 spune 192.168.10.1, lungime 28
03:44:17.140276 ARP, Ethernet (len 6), IPv4 (len 4), Răspuns 192.168.10.21 este-la 00: 11: 22: 33: 44: 55 (oui Necunoscut), lungime 28
03:44:42.026393 ARP, Ethernet (len 6), IPv4 (len 4), Solicitați cine are 192.168.10.1 spun 192.168.10.2, lungime 28

ICMP

ICMP, cunoscut și sub numele de Internet Control Message Protocol, este un protocol de suport din suita de protocoluri Internet. ICMP este utilizat ca protocol informațional.

Pentru a vizualiza toate pachetele ICMP pe o interfață, putem folosi această comandă:

$ sudo tcpdump icmp -vvv
tcpdump: ascultare pe wlan0, tip EN10MB (Ethernet) de tip link, lungime instantaneu 262144 octeți
04:26:42.123902 IP (tos 0x0, ttl 64, id 14831, offset 0, steaguri [DF], proto ICMP (1), lungime 84)
192.168.10.16> 192.168.10.1: cerere de ecou ICMP, id 47363, sec. 1, lungime 64
04:26:42.128429 IP (tos 0x0, ttl 64, id 32915, offset 0, steaguri [none], proto ICMP (1), lungime 84)
192.168.10.1> 192.168.10.16: Răspuns la ecou ICMP, id 47363, sec. 1, lungime 64
04:26:43.125599 IP (tos 0x0, ttl 64, id 14888, offset 0, steaguri [DF], proto ICMP (1), lungime 84)
192.168.10.16> 192.168.10.1: cerere de ecou ICMP, id 47363, sec. 2, lungime 64
04:26:43.128055 IP (tos 0x0, ttl 64, id 32916, offset 0, steaguri [none], proto ICMP (1), lungime 84)
192.168.10.1> 192.168.10.16: Răspuns la ecou ICMP, id 47363, sec. 2, lungime 64

NTP

NTP este un protocol de rețea conceput special pentru a sincroniza ora pe o rețea de mașini. Pentru a captura traficul pe NTP:

$ sudo tcpdump dst port 123
04:31:05.547856 IP (tos 0x0, ttl 64, id 34474, offset 0, steaguri [DF], proto UDP (17), lungime 76)
192.168.10.16.ntp> time-b-wwv.nist.gov.ntp: [udp sum ok] NTPv4, Client, lungime 48
Indicator salt: ceas nesincronizat (192), Stratum 0 (nespecificat), sondaj 3 (8s), precizie -6
Întârziere rădăcină: 1.000000, dispersia rădăcinii: 1.000000, ID de referință: (nespecificat)
Timestamp de referință: 0.000000000
Marcaj de timp inițiator: 0.000000000
Primiți marcajul de timp: 0.000000000
Transmiteți marca temporală: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Originator - Primiți marcajul de timp: 0.000000000
Creator - Transmiteți timestamp: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
04:31:05.841696 IP (tos 0x0, ttl 56, id 234, offset 0, steaguri [none], proto UDP (17), lungime 76)
time-b-wwv.nist.gov.ntp> 192.168.10.16.ntp: [udp sum ok] NTPv3, Server, lungime 48
Indicator salt: (0), Stratum 1 (referință primară), sondaj 13 (8192s), precizie -29
Întârziere rădăcină: 0.000244, Dispersie rădăcină: 0.000488, ID de referință: NIST
Timestamp de referință: 3825358208.000000000 (2021-03-21T23: 30: 08Z)
Marcaj de timp inițiator: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Primiți marca temporală: 3825358275.028660181 (2021-03-21T23: 31: 15Z)
Transmiteți marca temporală: 3825358275.028661296 (2021-03-21T23: 31: 15Z)
Originator - Primiți marcajul de timp: +9.480896026
Creator - Transmiteți timestamp: +9.480897141

SMTP

SMTP sau Simple Mail Transfer Protocol este utilizat în principal pentru e-mailuri. Tcpdump poate folosi acest lucru pentru a extrage informații utile de e-mail. De exemplu, pentru a extrage destinatarii / expeditorii de e-mail:

$ sudo tcpdump -n -l port 25 | grep -i 'MAIL DE LA \ | RCPT TO'

IPv6

IPv6 este „următoarea generație” de IP, oferind o gamă largă de adrese IP. IPv6 ajută la realizarea sănătății pe termen lung a internetului.

Pentru a captura trafic IPv6, utilizați filtrul ip6 specificând protocoalele TCP și UDP folosind proto 6 și proto-17.

$ sudo tcpdump -n -i orice ip6 -vvv
tcpdump: tip de legătură de date LINUX_SLL2
tcpdump: ascultare pe orice LINUX_SLL2 de tip link (Linux gătit v2), lungime instantaneu 262144 octeți
04:34:31.847359 lo In IP6 (flowlabel 0xc7cb6, hlim 64, următorul header UDP (17) lungime sarcină utilă: 40) :: 1.49395> :: 1.49395: [udp cksum rău 0x003b -> 0x3587!] UDP, lungime 32
04:34:31.859082 lo In IP6 (flowlabel 0xc7cb6, hlim 64, următorul header UDP (17) lungime sarcină utilă: 32) :: 1.49395> :: 1.49395: [bad udp cksum 0x0033 -> 0xeaef!] UDP, lungime 24
04:34:31.860361 lo In IP6 (flowlabel 0xc7cb6, hlim 64, next-header UDP (17) lungimea sarcinii utile: 40) :: 1.49395> :: 1.49395: [udp cksum rău 0x003b -> 0x7267!] UDP, lungime 32
04:34:31.871100 lo In IP6 (flowlabel 0xc7cb6, hlim 64, următorul header UDP (17) lungime sarcină utilă: 944) :: 1.49395> :: 1.49395: [udp cksum rău 0x03c3 -> 0xf890!] UDP, lungime 936
4 pachete capturate
12 pachete primite prin filtru
0 pachete aruncate de nucleu

„-C 4” oferă un număr de pachete de până la 4 pachete numai. Putem specifica numărul de pachete către n și capturăm n pachete.

HTTP

Hypertext Transfer Protocol este utilizat pentru transferul de date de la un server web la un browser pentru a vizualiza paginile web. HTTP folosește comunicarea de formular TCP. Mai exact, este utilizat portul TCP 80.

Pentru a imprima toate pachetele HTTP IPv4 către și din portul 80:

tcpdump: ascultare pe wlan0, tip EN10MB (Ethernet) de tip link, lungime instantaneu 262144 octeți
03:36:00.602104 IP (tos 0x0, ttl 64, id 722, offset 0, steaguri [DF], proto TCP (6), lungime 60)
192.168.10.21.33586> 192.168.10.1.http: Flags [S], cksum 0xa22b (corect), seq 2736960993, win 64240, opțiuni [mss 1460, sackOK, TS val 389882294 ecr 0, nop, wscale 10], lungime 0
03:36:00.604830 IP (tos 0x0, ttl 64, id 0, offset 0, steaguri [DF], proto TCP (6), lungime 60)
192.168.10.1.http> 192.168.10.21.33586: Steaguri [S.], cksum 0x2dcc (corect), seq 4089727666, ack 2736960994, win 14480, opțiuni [mss 1460, sackOK, TS val 30996070 ecr 389882294, nop, wscale 3], lungime 0
03:36:00.604893 IP (tos 0x0, ttl 64, id 723, offset 0, steaguri [DF], proto TCP (6), lungime 52)
192.168.10.21.33586> 192.168.10.1.http: Steaguri [.], cksum 0x94e2 (corect), seq 1, ack 1, win 63, opțiuni [nop, nop, TS val 389882297 ecr 30996070], lungime 0
03:36:00.605054 IP (tos 0x0, ttl 64, id 724, offset 0, steaguri [DF], proto TCP (6), lungime 481)

Solicitări HTTP ..

192.168.10.21.33586> 192.168.10.1.http: Steaguri [P.], cksum 0x9e5d (corect), seq 1: 430, ack 1, win 63, opțiuni [nop, nop, TS val 389882297 ecr 30996070], lungime 429: HTTP, lungime: 429
GET / HTTP / 1.1
Gazdă: 192.168.10.1
User-Agent: Mozilla / 5.0 (Windows NT 10.0; rv: 78.0) Gecko / 20100101 Firefox / 78.0
Acceptați: text / html, application / xhtml + xml, application / xml; q = 0.9, imagine / webp, * / *; q = 0.8
Accept-Language: en-US, en; q = 0.5
Acceptare-codificare: gzip, deflate
DNT: 1
Conexiune: păstrați-vii
Cookie: _TESTCOOKIESUPPORT = 1; SID = c7ccfa31cfe06065717d24fb544a5cd588760f0cdc5ae2739e746f84c469b5fd
Actualizare-Cereri nesigure: 1

Și răspunsurile sunt surprinse și ele

192.168.10.1.http> 192.168.10.21.33586: Steaguri [P.], cksum 0x84f8 (corect), seq 1: 523, ack 430, win 1944, opțiuni [nop, nop, TS val 30996179 ecr 389882297], lungime 522: HTTP, lungime: 522
HTTP / 1.1 200 OK
Server: server web ZTE 1.0 ZTE corp 2015.
Accept-Ranges: octeți
Conexiune: aproape
X-Frame-Options: SAMEORIGIN
Cache-Control: fără cache, fără magazin
Lungimea conținutului: 138098
Set-Cookie: _TESTCOOKIESUPPORT = 1; CALEA = /; HttpOnly
Tip conținut: text / html; charset = utf-8
X-Content-Type-Options: nosniff
Conținut-Securitate-Politică: cadru-strămoși „auto” „nesigur-în linie” „nesigur-eval”; img-src „sine” date :;
Protecție X-XSS: 1; mod = bloc
Set-Cookie: SID =; expiră = Joi, 01-ianuarie-1970 00:00:00 GMT; cale = /; HttpOnly

TCP

Pentru a captura pachete numai TCP, această comandă va face tot binele:

$ sudo tcpdump -i wlan0 tcp
tcpdump: ascultare pe wlan0, tip EN10MB (Ethernet) de tip link, lungime instantaneu 262144 octeți
04:35:48.892037 IP (tos 0x0, ttl 60, id 23987, offset 0, steaguri [none], proto TCP (6), lungime 104)
tl-in-f189.1e100.net.https> 192.168.10.16.50272: Steaguri [P.], cksum 0xc924 (corect), sec 1377740065: 1377740117, ack 1546363399, win 300, opțiuni [nop, nop, TS val 13149401 ecr 3051434098], lungime 52
04:35:48.892080 IP (tos 0x0, ttl 64, id 20577, offset 0, steaguri [DF], proto TCP (6), lungime 52)
192.168.10.16.50272> tl-in-f189.1e100.net.https: Steaguri [.], cksum 0xf898 (corect), seq 1, ack 52, win 63, opțiuni [nop, nop, TS val 3051461952 ecr 13149401], lungime 0
04:35:50.199754 IP (tos 0x0, ttl 64, id 20578, offset 0, steaguri [DF], proto TCP (6), lungime 88)
192.168.10.16.50272> tl-in-f189.1e100.net.https: Steaguri [P.], cksum 0x2531 (corect), sec 1:37, ack 52, win 63, opțiuni [nop, nop, TS val 3051463260 ecr 13149401], lungime 36
04:35:50.199809 IP (tos 0x0, ttl 64, id 7014, offset 0, steaguri [DF], proto TCP (6), lungime 88)
192.168.10.16.50434> hkg12s18-in-f14.1e100.net.https: Steaguri [P.], cksum 0xb21e (corect), sec 328391782: 328391818, ack 3599854191, win 63, opțiuni [nop, nop, TS val 3656137742 ecr 2564108387], lungime 36
4 pachete capturate
4 pachete primite prin filtru
0 pachete aruncate de nucleu

În mod normal, captura de pachete TCP are ca rezultat mult trafic; puteți specifica în detaliu cerințele dvs. adăugând filtre la captură, cum ar fi:

Port
Specifică portul de monitorizat

$ sudo tcpdump -i wlan0 tcp port 2222

IP sursă
Pentru a vizualiza pachete dintr-o sursă specificată

$ sudo tcpdump -i wlan0 tcp src 192.168.10.2

IP de destinație
Pentru a vizualiza pachetele la o destinație specificată

$ sudo tcpdump -i wlan0 tcp dst 192.168.10.2

Salvarea capturii de pachete în fișiere

Pentru a salva captura de pachete pentru a face analize ulterior, putem folosi opțiunea -w a tcpdump care necesită un parametru nume de fișier. Aceste fișiere sunt salvate într-un format de fișier pcap (captură de pachete), care poate fi utilizat pentru a salva sau a trimite capturi de pachete.

De exemplu:

$ sudo tcpdump -w / capturat.pcap

Putem adăuga filtre dacă dorim să captăm pachete TCP, UDP sau ICMP etc.

Citirea capturilor de pachete din fișiere

Din păcate, nu puteți citi fișierul salvat prin comenzi obișnuite de „citire a fișierului”, cum ar fi cat, etc. Rezultatul este cu totul excepțional, și este greu de spus ce este în fișier. '-r' este folosit pentru a citi pachetele salvate în .fișier pcap, stocat mai devreme de „-w” sau alt software care stochează pcaps:

$ sudo tcpdump -r / ieșiri.pcap

Aceasta imprimă datele colectate de la pachetele capturate pe ecranul terminalului într-un format lizibil.

Foaie de cheats Tcpdump

Tcpdump poate fi utilizat cu alte comenzi Linux, cum ar fi grep, sed, etc., pentru a extrage informații utile. Iată câteva combinații utile și cuvinte cheie combinate în utilizare cu tcpdump pentru a obține informații valoroase.

Extrageți agenți de utilizator HTTP:

$ sudo tcpdump -n | grep "User-Agent:"

Adresele URL solicitate prin HTTP pot fi monitorizate folosind tcpdump, cum ar fi:

$ sudo tcpdump -v -n | egrep -i "POST / | GET / | Gazdă:"

Poti de asemenea Extrageți parolele HTTP din solicitările POST

$ sudo tcpdump -nn -l | egrep -i "POST / | pwd = | passwd = | parola = | Gazdă:"

Cookie-urile de pe server sau client pot fi extrase folosind:

$ sudo tcpdump -n | egrep -i 'Set-Cookie | Gazdă: | Cookie:'

Capturați cereri și răspunsuri DNS utilizând:

$ sudo tcpdump -i wlp58s0 -s0 port 53

Imprimați toate parolele text simplu:

$ sudo tcpdump port http sau port ftp sau port smtp sau port imap sau port pop3 sau port telnet -l -A | egrep -i -B5 'pass = | pwd = | log = | login = | user = | user | nume utilizator = | pw = | passw = | passwd = | parola = | pass: | utilizator: | nume utilizator: | parolă: | autentificare: | treceți '

Filtre comune Tcpdump

  • -A Afișează pachete în format ASCII.
  • -c Numărul de pachete de capturat.
  • -numara Numărul de pachete de imprimare numai la citirea unui fișier capturat.
  • -e Imprimați adrese MAC și anteturi la nivel de link.
  • -h sau -help Tipărește versiunea și informațiile de utilizare.
  • -versiune Afișați numai informațiile despre versiune.
  • -eu Specificați interfața de rețea pe care să o capturați.
  • -K Preveniți încercările de a verifica sumele de control ale oricărui pachet. Adaugă viteză.
  • -m Specificați modulul de utilizat.
  • -n Nu convertiți adrese (i.e., adrese de gazdă, numere de port etc.) la nume.
  • -număr Imprimați un număr de pachet opțional la începutul fiecărei linii.
  • -p Interziceți interfeței să intre în modul promiscuu.
  • Alegeți direcția pentru pachetele care trebuie capturate. Trimiteți sau primiți.
  • -q Ieșire silențioasă / rapidă. Tipărește mai puține informații. Ieșirile sunt mai scurte.
  • -r Folosit pentru a citi pachete de pe un pcap .
  • -t Nu imprimați o marcă de timp pe fiecare linie de descărcare.
  • -v Tipărește mai multe informații despre ieșire.
  • -w Scrieți pachetele brute în fișier.
  • -X Tipărește ieșirea ASCII.
  • -X Tipărește ASCII cu hex.
  • -listă-interfețe Afișează toate interfețele de rețea disponibile unde pachetele pot fi capturate de tcpdump.

Încetare

Tcpdump a fost un instrument foarte utilizat utilizat în cercetarea și aplicațiile de securitate / rețea. Singurul dezavantaj tcpdump are „Fără GUI”, dar este prea bun pentru a fi ținut în afara topurilor de top. După cum scrie Daniel Miessler, „Analizoarele de protocol precum Wireshark sunt grozave, dar dacă doriți să stăpâniți cu adevărat pachetul-fu, trebuie să deveniți unul cu tcpdump mai întâi.”

Cum se afișează suprapunerea OSD în aplicații și jocuri Linux pe ecran complet
Jucarea jocurilor pe ecran complet sau utilizarea aplicațiilor în modul ecran complet fără distragere vă poate elimina din informațiile relevante ale ...
Top 5 cărți de captură a jocului
Cu toții am văzut și ne-au plăcut jocurile de streaming pe YouTube. PewDiePie, Jakesepticye și Markiplier sunt doar câțiva dintre cei mai buni jucător...
Cum să dezvolți un joc pe Linux
Acum un deceniu, nu mulți utilizatori de Linux ar fi prezis că sistemul lor de operare preferat va fi într-o zi o platformă populară de jocuri pentru ...