ngrep - Analizator mrežnih paketa za Linux


Ngrep (mrežni grep) je jednostavan, 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ćava vam da specificirate prošireni regularni ili heksadecimalni izraz koji se podudara sa korisnim opterećenjem podataka (stvarne informacije ili poruka u prenesenim podacima, ali ne i automatski generirani metapodaci) paketa.

Ovaj alat radi sa različitim tipovima protokola, uključujući IPv4/6, TCP, UDP, ICMPv4/6, IGMP kao i Raw na brojnim interfejsima. Radi na isti način kao tcpdump alat za njuškanje paketa.

Paket ngrep je dostupan za instalaciju iz zadanih sistemskih spremišta u mainstream Linux distribucijama koristeći alat za upravljanje paketima kao što je prikazano.

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

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

1. Sljedeća komanda će vam pomoći da uskladite sve ping zahtjeve na zadanom radnom interfejsu. Morate otvoriti drugi terminal i pokušati pingati drugu udaljenu mašinu. Oznaka -q govori ngrep da radi tiho, da ne šalje nikakve informacije osim zaglavlja paketa i njihovog korisnog opterećenja.

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 ga prekinete.

2. Da uparite samo saobraćaj koji ide na određenu odredišnu lokaciju, 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 surfujete internetom, pokrenite sljedeću naredbu da nadgledate koje datoteke vaš pretraživač 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 vidite sve aktivnosti koje prelaze izvorni ili odredišni port 25 (SMTP), pokrenite sljedeću naredbu.

sudo ngrep port 25

5. Za praćenje bilo kakvog 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 imena portova usluga pohranjena u “/etc/services ” (na sistemima 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 na HTTP serveru (port 80), on će odgovarati svim zahtjevima prema odredišnom hostu 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. Ipak, teško ga je raščlaniti, pa pogledajmo šta se dešava kada primijenite način rada -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. Za štampanje vremenske oznake u obliku GGGG/MM/DD HH:MM:SS.UUUUUU svaki put kada se paket podudara, koristite zastavu -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. Da biste izbjegli stavljanje interfejsa koji se nadgleda u promiskuitetni način rada (gdje presreće i čita svaki mrežni paket koji stigne u cijelosti), dodajte oznaku -p.

sudo ngrep -p -W byline port 80

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

sudo ngrep -N -W byline

Za više informacija pogledajte ngrep man stranicu.

man ngrep

ngrep Github spremište: https://github.com/jpr5/ngrep

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