ngrep - Un analitzador de paquets de xarxa per a Linux


Ngrep (network grep) és un analitzador de paquets de xarxa senzill però potent. És una eina semblant a grep aplicada a la capa de xarxa: coincideix amb el trànsit que passa per una interfície de xarxa. Us permet especificar una expressió regular o hexadecimal ampliada per coincidir amb les càrregues útils de dades (la informació o missatge real de les dades transmeses, però no les metadades generades automàticament) dels paquets.

Aquesta eina funciona amb diversos tipus de protocols, inclosos IPv4/6, TCP, UDP, ICMPv4/6, IGMP i Raw en diverses interfícies. Funciona de la mateixa manera que l'eina d'olor de paquets tcpdump.

El paquet ngrep està disponible per instal·lar-se des dels dipòsits predeterminats del sistema a les distribucions principals de Linux mitjançant l'eina de gestió de paquets com es mostra.

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

Després d'instal·lar ngrep, podeu començar a analitzar el trànsit a la vostra xarxa Linux utilitzant els exemples següents.

1. L'ordre següent us ajudarà a fer coincidir totes les sol·licituds de ping a la interfície de treball predeterminada. Heu d'obrir un altre terminal i provar de fer ping a una altra màquina remota. El senyalador -q indica a ngrep que funcioni en silenci, que no emeti cap altra informació que no sigui les capçaleres de paquets i les seves càrregues útils.

$ 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  

Podeu prémer Ctrl + C per finalitzar-lo.

2. Per fer coincidir només el trànsit que va a un lloc de destinació concret, per exemple, google.com, executeu l'ordre següent i, a continuació, proveu d'accedir-hi des d'un navegador.

$ 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. Si esteu navegant per la web, executeu l'ordre següent per controlar quins fitxers demana el vostre navegador:.

$ 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 veure tota l'activitat que creua el port d'origen o de destinació 25 (SMTP), executeu l'ordre següent.

$ sudo ngrep port 25

5. Per supervisar qualsevol trànsit de syslog basat en xarxa per detectar l'aparició de la paraula \error, utilitzeu l'ordre següent.

 
$ sudo ngrep -d any 'error' port 514

És important destacar que aquesta eina pot convertir els noms de ports de servei emmagatzemats a \/etc/services (en sistemes semblants a Unix com Linux) en números de port. Aquesta ordre és equivalent a l'ordre anterior.

$ sudo ngrep -d any 'error' port syslog

6. També podeu executar ngrep contra un servidor HTTP (port 80), coincidirà amb totes les sol·licituds amb l'amfitrió de destinació tal com es mostra.

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

Com podeu veure a la sortida anterior, totes les transmissió de capçaleres HTTP es mostren amb els seus detalls. Tanmateix, és difícil d'analitzar, així que mirem què passa quan apliqueu el mode de línia -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 imprimir una marca de temps en forma de AAAA/MM/DD HH:MM:SS.UUUUUU cada vegada que coincideixi un paquet, utilitzeu el senyalador -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 evitar posar la interfície que s'està supervisant en mode promiscu (on intercepta i llegeix cada paquet de xarxa que arriba en la seva totalitat), afegiu el senyalador -p.

$ sudo ngrep -p -W byline port 80

9. Una altra opció important és -N que és útil en cas que estigueu observant protocols en brut o desconeguts. Li diu a ngrep que mostri el número de subprotocol juntament amb l'identificador d'un sol caràcter.

$ sudo ngrep -N -W byline

Per obtenir més informació, consulteu la pàgina man de ngrep.

$ man ngrep

Repositori de Github ngrep: https://github.com/jpr5/ngrep

Això és tot! Ngrep (network grep) és un analitzador de paquets de xarxa que entén la lògica del filtre BPF de la mateixa manera que tcpdump. Ens agradaria conèixer els vostres pensaments sobre ngrep a la secció de comentaris.