ngrep - analizator mrežnih paketa za Linux


Ngrep (network grep) jednostavan je, ali moćan analizator mrežnih paketa. To je alat sličan grepu koji se primjenjuje na mrežni sloj – usklađuje promet koji prolazi preko mrežnog sučelja. Omogućuje vam da navedete prošireni regularni ili heksadecimalni izraz za usklađivanje s korisnim opterećenjem podataka (stvarna informacija ili poruka u prenesenim podacima, ali ne i automatski generirani metapodaci) paketa.

Ovaj alat radi s različitim vrstama protokola, uključujući IPv4/6, TCP, UDP, ICMPv4/6, IGMP kao i Raw na velikom broju sučelja. Djeluje na isti način kao tcpdump alat za njuškanje paketa.

Paket ngrep dostupan je za instalaciju iz zadanih repozitorija sustava u glavnim distribucijama Linuxa pomoću alata za upravljanje paketima kao što je prikazano.

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

Nakon instaliranja ngrep, možete početi analizirati promet na vašoj Linux mreži koristeći sljedeće primjere.

1. Sljedeća naredba pomoći će vam da uskladite sve ping zahtjeve na zadanom radnom sučelju. Morate otvoriti drugi terminal i pokušati pingati drugo udaljeno računalo. Oznaka -q govori ngrep-u da radi tiho, da ne ispisuje nikakve informacije osim zaglavlja paketa i njihovog sadržaja.

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  

Možete pritisnuti Ctrl + C da biste ga prekinuli.

2. Da biste uparili samo promet koji ide na određenu odredišnu stranicu, na primjer ‘google.com’, pokrenite sljedeću naredbu, a zatim joj pokušajte pristupiti iz preglednika.

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. Ako surfate webom, pokrenite sljedeću naredbu da nadgledate koje datoteke vaš preglednik traži:.

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. Da biste vidjeli sve aktivnosti koje prelaze izvorni ili odredišni port 25 (SMTP), pokrenite sljedeću naredbu.

sudo ngrep port 25

5. Za nadgledanje mrežnog syslog prometa za pojavu riječi “greška”, koristite sljedeću naredbu.

 
sudo ngrep -d any 'error' port 514

Važno je da ovaj alat može pretvoriti nazive portova usluga pohranjene u “/etc/services” (na sustavima sličnim Unixu kao što je Linux) u brojeve portova. Ova naredba je ekvivalentna gornjoj naredbi.

sudo ngrep -d any 'error' port syslog

6. Također možete pokrenuti ngrep protiv HTTP poslužitelja (port 80), on će uskladiti sve zahtjeve s odredišnim hostom kao što je prikazano.

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....
##

Kao što možete vidjeti u gornjem izlazu, svi prijenosi HTTP zaglavlja prikazani su u svojim krvavim detaljima. Međutim, teško ga je raščlaniti, pa pogledajmo što se događa kada primijenite -W način autorskog reda.

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. Za ispis vremenske oznake u obliku GGGG/MM/DD HH:MM:SS.UUUUUU svaki put kada se paket podudara, koristite oznaku -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. Kako biste izbjegli stavljanje sučelja koje se nadzire u promiskuitetni način (gdje presreće i čita svaki mrežni paket koji stigne u cijelosti), dodajte oznaku -p.

sudo ngrep -p -W byline port 80

9. Druga važna opcija je -N koja je korisna u slučaju da promatrate neobrađene ili nepoznate protokole. Kaže ngrep-u da prikaže broj podprotokola zajedno s identifikatorom od jednog znaka.

sudo ngrep -N -W byline

Za više informacija pogledajte ngrep stranicu s uputama.

man ngrep

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

To je sve! Ngrep (network grep) je analizator mrežnih paketa koji razumije logiku BPF filtera na isti način kao tcpdump. Željeli bismo znati vaše mišljenje o ngrepu u odjeljku komentara.