Comandos interesantes: ngrep

ngrep es uno de esos comandos poco conocidos, pero que en algunos casos puede ser de gran utilidad. En muchas ocasiones para saber lo que pasa por la tarjeta de red tenemos que usar tcpdump o programas similares, que aunque obtienen muchísima más información, según lo que nos interese es mucho más complicada de comprender. ngrep viene a simplificar esto, ya que une la facilidad y flexibilidad del comando grep, con la n de network.
La instalación en sistemas debian/ubuntu es muy sencilla, ya que está en los repositorios oficiales.
shell> apt-get install ngrep
Y una vez instalado, comenzamos a trabajar con él de forma muy simple, indicándole en qué interfaz de red se pone a escuchar (-d eth0) y luego si nos interesa tener algún filtro, por ejemplo un puerto concreto destino (port 80). La salida es mucho más comprensible que la ofrecida por tcpdump.
shell> ngrep -d eth2 port 80
interface: eth2 (192.168.1.0/255.255.255.0)
filter: (ip or ip6) and ( port 80 )
#######
T 192.168.1.2:53222 -> 209.85.148.99:80 [AP]
  GET / HTTP/1.1..Host: www.google.com..Connection:....
#
T 209.85.148.99:80 -> 192.168.1.2:53222 [AP]
  HTTP/1.1 302 Found..Location: https://www.google.com...
##
T 192.168.1.2:53222 -> 209.85.148.99:80 [AP]
  GET / HTTP/1.1..Host: www.google.com..Connection:...
#
T 209.85.148.99:80 -> 192.168.1.2:53222 [AP]
  HTTP/1.1 302 Found..Location: https://www.google.com...
###########################
T 192.168.1.2:36417 -> 192.168.1.51:80 [AP]
  POST /dashboard.php?output=html&sid=...
#
T 192.168.1.2:36417 -> 192.168.1.51:80 [AP]
  favobj=hat&favref=hat_webovr&action=refresh&_=...
La ventaja de la que hablamos de ngrep es que permitía usar la facilidad y comodidad de grep en entornos de red, y esta es su gran utilidad, podemos indicarle cualquier tipo de expresión que comprenda grep y, tal como se muestra a continuación, ngrep comenzará a filtrar los datos y resultados.
shell> ngrep -d eth2 "Apache/2.2.16" port 80
interface: eth2 (192.168.1.0/255.255.255.0)
filter: (ip or ip6) and ( port 80 )
match: Apache/2.2.16
####################
T 192.168.1.51:80 -> 192.168.1.2:36477 [A]
  HTTP/1.1 200 OK.. Server: Apache/2.2.16
##
T 192.168.1.51:80 -> 192.168.1.2:36477 [AP]
  HTTP/1.1 304 Not Modified.. Server: Apache/2.2.16
##
T 192.168.1.51:80 -> 192.168.1.2:36477 [AP]
  HTTP/1.1 404 Not Found.. Server: Apache/2.2.16
#########
T 192.168.1.51:80 -> 192.168.1.2:36478 [AP]
  HTTP/1.1 404 Not Found.. Server: Apache/2.2.16
##
T 192.168.1.51:80 -> 192.168.1.2:36477 [AP]
  HTTP/1.1 200 OK.. Server: Apache/2.2.16
##
45 received, 0 dropped
Los símbolos # identifican a todos aquellos paquetes que se han capturado y que no coinciden con la expresión regular con la que debe hacer match.
En su página man (man ngrep) hay muchas más opciones, pero una muy interesante es la opción -W byline, que muestra la salida línea a línea y deja el resultado mucho más comprensible.
shell> ngrep -W byline -d eth2 "Apache/2.2.16" port 80
interface: eth2 (192.168.1.0/255.255.255.0)
filter: (ip or ip6) and ( port 80 )
match: Apache/2.2.16
##########################
T 192.168.1.51:80 -> 192.168.1.2:36508 [A]
HTTP/1.1 200 OK.
Date: Mon, 14 Nov 2011 14:00:23 GMT.
Server: Apache/2.2.16 (Debian).
X-Powered-By: PHP/5.3.3-7+squeeze3.
Set-Cookie: zbx_sessionid=4a438cd920f3d0b7d380527db86722cf.
...

########
T 192.168.1.51:80 -> 192.168.1.2:36508 [AP]
HTTP/1.1 404 Not Found.
Date: Mon, 14 Nov 2011 14:00:23 GMT.
Server: Apache/2.2.16 (Debian).
Vary: Accept-Encoding.
...

###
T 192.168.1.51:80 -> 192.168.1.2:36508 [AP]
HTTP/1.1 404 Not Found.
Date: Mon, 14 Nov 2011 14:00:24 GMT.
Server: Apache/2.2.16 (Debian).
Vary: Accept-Encoding.
Content-Encoding: gzip.
...

##########
T 192.168.1.51:80 -> 192.168.1.2:36509 [AP]
HTTP/1.1 404 Not Found.
Date: Mon, 14 Nov 2011 14:00:24 GMT.
Server: Apache/2.2.16 (Debian).
Vary: Accept-Encoding.
...

##
T 192.168.1.51:80 -> 192.168.1.2:36508 [AP]
HTTP/1.1 200 OK.
Date: Mon, 14 Nov 2011 14:00:24 GMT.
Server: Apache/2.2.16 (Debian).
X-Powered-By: PHP/5.3.3-7+squeeze3.
Set-Cookie: zbx_sessionid=4a438cd920f3d0b7d380527db86722cf.
Content-Length: 365.
...

#
53 received, 0 dropped


2 comentarios :

  1. Pois a verdade e que non coñecía ngrep.

    Un comando que si utilizo bastante e o rgrep, que realmente e un grep -r para facer busquedas recursivas, asi como o find coas múltiples utilidades que ten.

    ResponderEliminar
  2. No conocía rgrep, pero por lo que dice en un grep -r, pero muy interesante saberlo.
    También existe egrep (grep -E) y fgrep (grep -F).

    ResponderEliminar

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios