ngrep - Un analizor de pachete de rețea pentru Linux


Ngrep (grep de rețea) este un analizor de pachete de rețea simplu, dar puternic. Este un instrument asemănător grep aplicat stratului de rețea - se potrivește cu traficul care trece printr-o interfață de rețea. Vă permite să specificați o expresie regulată sau hexazecimală extinsă pentru a se potrivi cu încărcăturile utile de date (informația reală sau mesajul din datele transmise, dar nu metadatele generate automat) ale pachetelor.

Acest instrument funcționează cu diferite tipuri de protocoale, inclusiv IPv4/6, TCP, UDP, ICMPv4/6, IGMP, precum și Raw pe o serie de interfețe. Funcționează în același mod ca instrumentul de sniffing de pachete tcpdump.

Pachetul ngrep este disponibil pentru a fi instalat din depozitele implicite de sistem din distribuțiile Linux principale, folosind instrumentul de gestionare a pachetelor, așa cum se arată.

sudo apt install ngrep
sudo yum install ngrep
sudo dnf install ngrep

După instalarea ngrep, puteți începe să analizați traficul din rețeaua dvs. Linux folosind următoarele exemple.

1. Următoarea comandă vă va ajuta să potriviți toate solicitările ping pe interfața de lucru implicită. Trebuie să deschideți un alt terminal și să încercați să faceți ping pe o altă mașină la distanță. Indicatorul -q îi spune ngrep să lucreze în liniște, să nu scoată nicio informație în afară de anteturile pachetelor și încărcăturile lor utile.

sudo ngrep -q '.' 'icmp'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( icmp ) and ((ip || ip6) || (vlan && (ip || ip6)))
match: .

I 192.168.0.104 -> 192.168.0.103 8:0
  ]...~oG[....j....................... !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.103 -> 192.168.0.104 0:0
  ]...~oG[....j....................... !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.104 -> 192.168.0.103 8:0
  ]....oG[............................ !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.103 -> 192.168.0.104 0:0
  ]....oG[............................ !"#$%&'()*+,-./01234567  

Puteți apăsa Ctrl + C pentru a-l termina.

2. Pentru a potrivi numai traficul care ajunge la un anumit site de destinație, de exemplu ‘google.com’, rulați următoarea comandă, apoi încercați să o accesați dintr-un browser.

sudo ngrep -q '.' 'host google.com'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( host google.com ) and ((ip || ip6) || (vlan && (ip || ip6)))
match: .

T 172.217.160.174:443 -> 192.168.0.103:54008 [AP]
  ..................;.(...RZr..$....s=..l.Q+R.U..4..g.j..I,.l..:{y.a,....C{5>[email ..                                                                       

T 172.217.160.174:443 -> 192.168.0.103:54008 [AP]
  .............l.......!,0hJ....0.%F..!...l|.........PL..X...t..T.2DC..... ..y...~Y;[email 

3. Dacă navigați pe web, rulați următoarea comandă pentru a monitoriza ce fișiere solicită browserul dvs.:.

sudo ngrep -q '^GET .* HTTP/1.[01]'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ((ip || ip6) || (vlan && (ip || ip6)))
match: ^GET .* HTTP/1.[01]

T 192.168.0.104:43040 -> 172.217.160.174:80 [AP]
  GET / HTTP/1.1..Host: google.com..User-Agent: Links (2.13; Linux 4.17.6-1.el7.elrepo.x86_64 x86_64; 
  GNU C 4.8.5; text)..Accept: */*..Accept-Language: en,*;q=0.1..Accept-
  Encoding: gzip, deflate, bzip2..Accept-Charset: us-ascii,ISO-8859-1,ISO-8859-2,ISO-8859-3,ISO-8859-4,
  ISO-8859-5,ISO-8859-6,ISO-8859-7,ISO-8859-8,ISO-8859-9,ISO-8859-10,I
  SO-8859-13,ISO-8859-14,ISO-8859-15,ISO-8859-16,windows-1250,windows-1251,windows-1252,windows-1256,
  windows-1257,cp437,cp737,cp850,cp852,cp866,x-cp866-u,x-mac,x-mac-ce,x-
  kam-cs,koi8-r,koi8-u,koi8-ru,TCVN-5712,VISCII,utf-8..Connection: keep-alive.... 

4. Pentru a vedea toată activitatea care traversează sursa sau portul de destinație 25 (SMTP), rulați următoarea comandă.

sudo ngrep port 25

5. Pentru a monitoriza orice trafic syslog bazat pe rețea pentru apariția cuvântului „eroare”, utilizați următoarea comandă.

 
sudo ngrep -d any 'error' port 514

Important, acest instrument poate converti numele porturilor de serviciu stocate în „/etc/services ” (pe sisteme similare Unix, cum ar fi Linux) în numere de porturi. Această comandă este echivalentă cu comanda de mai sus.

sudo ngrep -d any 'error' port syslog

6. De asemenea, puteți rula ngrep pe un server HTTP (portul 80), acesta va potrivi toate solicitările gazdei de destinație, așa cum se arată.

sudo ngrep port 80

interface: eth0 (64.90.164.72/255.255.255.252)
filter: ip and ( port 80 )
####
T 67.169.59.38:42167 -> 64.90.164.74:80 [AP]
  GET / HTTP/1.1..User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i
  686) Opera 7.21  [en]..Host: www.darkridge.com..Accept: text/html, applicat
  ion/xml;q=0.9, application/xhtml+xml;q=0.9, image/png, image/jpeg, image/gi
  f, image/x-xbitmap, */*;q=0.1..Accept-Charset: iso-8859-1, utf-8, utf-16, *
  ;q=0.1..Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0..Cookie: SQ
  MSESSID=5272f9ae21c07eca4dfd75f9a3cda22e..Cookie2: $Version=1..Connection:
  Keep-Alive, TE..TE: deflate, gzip, chunked, identity, trailers....
##

După cum puteți vedea în rezultatul de mai sus, toate transmisiile de anteturi HTTP sunt afișate în detaliile lor sângeroase. Totuși, este greu de analizat, așa că haideți să vedem ce se întâmplă când aplicați modul byline -W.

sudo ngrep -W byline port 80

interface: eth0 (64.90.164.72/255.255.255.252)
filter: ip and ( port 80 )
####
T 67.169.59.38:42177 -> 64.90.164.74:80 [AP]
GET / HTTP/1.1.
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686) Opera ...
Host: www.darkridge.com.
Accept: text/html, application/xml;q=0.9, application/xhtml+xml;q=0.9 ...
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1.
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0.
Cookie: SQMSESSID=5272f9ae21c07eca4dfd75f9a3cda22e.
Cookie2: $Version=1.
Cache-Control: no-cache.
Connection: Keep-Alive, TE.
TE: deflate, gzip, chunked, identity, trailers.

7. Pentru a imprima o marca temporală sub forma AAAA/LL/ZZ HH:MM:SS.UUUUUU de fiecare dată când se potrivește un pachet, utilizați indicatorul -t.

sudo ngrep -t -W byline port 80

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( port 80 ) and ((ip || ip6) || (vlan && (ip || ip6)))
####
T 2018/07/12 16:33:19.348084 192.168.0.104:43048 -> 172.217.160.174:80 [AP]
GET / HTTP/1.1.
Host: google.com.
User-Agent: Links (2.13; Linux 4.17.6-1.el7.elrepo.x86_64 x86_64; GNU C 4.8.5; text).
Accept: */*.
Accept-Language: en,*;q=0.1.
Accept-Encoding: gzip, deflate, bzip2.
Accept-Charset: us-ascii,ISO-8859-1,ISO-8859-2,ISO-8859-3,ISO-8859-4,ISO-8859-5,utf-8.
Connection: keep-alive.

8. Pentru a evita trecerea interfeței monitorizate în modul promiscuu (unde interceptează și citește fiecare pachet de rețea care ajunge în întregime), adăugați indicatorul -p.

sudo ngrep -p -W byline port 80

9. O altă opțiune importantă este -N, care este utilă în cazul în care respectați protocoale brute sau necunoscute. Îi spune ngrep să afișeze numărul sub-protocolului împreună cu identificatorul cu un singur caracter.

sudo ngrep -N -W byline

Pentru mai multe informații, consultați pagina de manual ngrep.

man ngrep

Depozitul ngrep Github: https://github.com/jpr5/ngrep

Asta e tot! Ngrep (network grep) este un analizor de pachete de rețea care înțelege logica filtrului BPF în același mod tcpdump. Am dori să aflăm părerile dvs. despre ngrep în secțiunea de comentarii.