ngrep - Un analizador de paquetes de red para Linux


Ngrep ( grep de red ) es un simple pero potente analizador de paquetes de red. Es una herramienta similar a grep aplicada a la capa de red: coincide con el tráfico que pasa a través de una interfaz de red. Le permite especificar una expresión regular o hexadecimal extendida para que coincida con las cargas útiles de datos (la información real o el mensaje en los datos transmitidos, pero no los metadatos generados automáticamente) de los paquetes.

Esta herramienta funciona con varios tipos de protocolos, incluidos IPv4/6, TCP, UDP, ICMPv4/6, IGMP y Raw en varias interfaces. Funciona de la misma manera que la herramienta de rastreo de paquetes tcpdump.

El paquete ngrep está disponible para instalarse desde los repositorios predeterminados del sistema en las distribuciones de Linux convencionales mediante la herramienta de administración de paquetes como se muestra.

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

Después de instalar ngrep , puede comenzar a analizar el tráfico en su red Linux utilizando los siguientes ejemplos.

1. El siguiente comando lo ayudará a hacer coincidir todas las solicitudes de ping en la interfaz de trabajo predeterminada. Debe abrir otro terminal e intentar hacer ping a otra máquina remota. El indicador -q le dice a ngrep que trabaje de manera silenciosa, para que no genere ninguna información que no sea los encabezados de paquetes y sus cargas útiles.

$ 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  

Puede presionar Ctrl + C para terminarlo.

2. Para hacer coincidir solo el tráfico que se dirige a un sitio de destino en particular, por ejemplo, ‘google.com’ , ejecute el siguiente comando e intente acceder a él desde 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 protected]                                                                       

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 protected]

3. Si estás navegando por la web, ejecuta el siguiente comando para monitorear qué archivos solicita tu 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. Para ver toda la actividad que cruza el puerto de origen o destino 25 ( SMTP ), ejecute el siguiente comando.

$ sudo ngrep port 25

5. Para monitorear cualquier tráfico de syslog basado en la red para detectar la palabra "error" , use el siguiente comando.

 
$ sudo ngrep -d any 'error' port 514

Es importante destacar que esta herramienta puede convertir los nombres de puertos de servicio almacenados en “/ etc/services” (en sistemas similares a Unix como Linux) en números de puerto. Este comando es equivalente al comando anterior.

$ sudo ngrep -d any 'error' port syslog

6. También puede ejecutar ngrep contra un servidor HTTP (puerto 80 ), coincidirá con todas las solicitudes al host de destino como se muestra.

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

Como se puede ver en la salida anterior, todas las transmisiones de encabezados HTTP se muestran en su detalle sangriento. Sin embargo, es difícil analizarlo, así que vigilemos lo que sucede cuando aplicas el modo de línea -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. Para imprimir una marca de hora en la forma de YYYY/MM/DD HH: MM: SSUUUUUU cada vez que coincida un paquete usa la marca -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. Para evitar que la interfaz sea monitoreada en modo promiscuo (donde intercepta y lee cada paquete de red que llega en su totalidad), agregue el indicador -p .

$ sudo ngrep -p -W byline port 80

9. Otra opción importante es -N , que es útil en caso de que estés observando protocolos en bruto o desconocidos. Le dice a ngrep que muestre el número de subprotocolo junto con el identificador de un solo carácter.

$ sudo ngrep -N -W byline

Para obtener más información, consulte la página de manual de ngrep .

$ man ngrep

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

¡Eso es todo! Ngrep ( grep de red ) es un analizador de paquetes de red que entiende la lógica del filtro BPF de la misma manera que tcpdump. Nos gustaría saber su opinión sobre ngrep en la sección de comentarios.