Búsqueda de sitios web

ngrep: un analizador de paquetes de red para Linux


Ngrep (network grep) es un analizador de paquetes de red simple pero potente. 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 compararla con las cargas de datos (la información o el mensaje real 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 detección de paquetes tcpdump.

El paquete ngrep está disponible para instalar desde los repositorios predeterminados del sistema en las principales distribuciones de Linux utilizando 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 le ayudará a hacer coincidir todas las solicitudes de ping en la interfaz de trabajo predeterminada. Debe abrir otra terminal e intentar hacer ping a otra máquina remota. El indicador -q le dice a ngrep que trabaje silenciosamente, que no genere ninguna información que no sea los encabezados de los 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 finalizarlo.

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 y luego 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 ..                                                                       

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 está navegando por la web, ejecute el siguiente comando para controlar qué archivos solicita su 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 red para detectar la aparición de 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 los puertos de servicio almacenados en “/etc/services” (en sistemas tipo 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 en un servidor HTTP (puerto 80), hará coincidir todas las solicitudes con el 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 puede ver en el resultado anterior, todas las transmisiones de encabezados HTTP se muestran con todo detalle. Sin embargo, es difícil de analizar, así que veamos qué sucede cuando aplicas el modo de firma -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 tiempo en el formato AAAA/MM/DD HH:MM:SS.UUUUUU cada vez que coincida un paquete, utilice la bandera -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 poner la interfaz que se está monitoreando 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é observando protocolos sin procesar o desconocidos. Le indica 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

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

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