Ricerca nel sito web

ngrep - Un analizzatore di pacchetti di rete per Linux


Ngrep (network grep) è un analizzatore di pacchetti di rete semplice ma potente. È uno strumento simile a grep applicato al livello di rete: corrisponde al traffico che passa su un'interfaccia di rete. Consente di specificare un'espressione regolare o esadecimale estesa da confrontare con i payload dei dati (le informazioni o il messaggio effettivi nei dati trasmessi, ma non i metadati generati automaticamente) dei pacchetti.

Questo strumento funziona con vari tipi di protocolli, inclusi IPv4/6, TCP, UDP, ICMPv4/6, IGMP e Raw su numerose interfacce. Funziona allo stesso modo dello strumento di sniffing dei pacchetti tcpdump.

Il pacchetto ngrep è disponibile per l'installazione dai repository di sistema predefiniti nelle principali distribuzioni Linux utilizzando lo strumento di gestione dei pacchetti come mostrato.

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

Dopo aver installato ngrep, puoi iniziare ad analizzare il traffico sulla tua rete Linux utilizzando i seguenti esempi.

1. Il seguente comando ti aiuterà a far corrispondere tutte le richieste ping sull'interfaccia di lavoro predefinita. È necessario aprire un altro terminale e provare a eseguire il ping di un altro computer remoto. Il flag -q dice a ngrep di funzionare silenziosamente, di non restituire alcuna informazione oltre alle intestazioni dei pacchetti e ai loro carichi utili.

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  

Puoi premere Ctrl + C per terminarlo.

2. Per abbinare solo il traffico diretto a un particolare sito di destinazione, ad esempio "google.com", esegui il seguente comando, quindi prova ad accedervi da 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. Se stai navigando sul Web, esegui il seguente comando per monitorare quali file richiede il tuo browser:.

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. Per visualizzare tutte le attività che attraversano la porta di origine o di destinazione 25 (SMTP), esegui il seguente comando.

sudo ngrep port 25

5. Per monitorare qualsiasi traffico syslog basato sulla rete per rilevare la presenza della parola "errore ", utilizzare il seguente comando.

 
sudo ngrep -d any 'error' port 514

È importante sottolineare che questo strumento può convertire i nomi delle porte dei servizi memorizzati in "/etc/services" (su sistemi simili a Unix come Linux) in numeri di porta. Questo comando è equivalente al comando precedente.

sudo ngrep -d any 'error' port syslog

6. Puoi anche eseguire ngrep su un server HTTP (porta 80), abbinerà tutte le richieste all'host di destinazione come mostrato.

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

Come puoi vedere nell'output sopra, tutte le trasmissioni delle intestazioni HTTP vengono visualizzate nei loro cruenti dettagli. Tuttavia è difficile da analizzare, quindi vediamo cosa succede quando applichi la modalità riga -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. Per stampare un timestamp nel formato AAAA/MM/GG HH:MM:SS.UUUUUU ogni volta che un pacchetto viene abbinato, usa il flag -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. Per evitare di mettere l'interfaccia monitorata in modalità promiscua (dove intercetta e legge ogni pacchetto di rete che arriva nella sua interezza), aggiungi il flag -p.

sudo ngrep -p -W byline port 80

9. Un'altra opzione importante è -N che è utile nel caso in cui stai osservando protocolli grezzi o sconosciuti. Indica a ngrep di visualizzare il numero del sottoprotocollo insieme all'identificatore a carattere singolo.

sudo ngrep -N -W byline

Per ulteriori informazioni, consultare la pagina man ngrep.

man ngrep

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

È tutto! Ngrep (network grep) è un analizzatore di pacchetti di rete che comprende la logica del filtro BPF allo stesso modo di tcpdump. Ci piacerebbe conoscere la tua opinione su ngrep nella sezione commenti.