Netcat

Netcat, o nc que es la forma en que se utiliza en el intérprete de mandatos, es una herramienta utilizada para supervisar y escribir sobre conexiones tanto por TCP como por UDP. Puede abrir conexiones TCP, enviar paquetes UDP, escuchar sobre puertos arbitrarios tanto TCP como UDP, supervisión de puertos y más, tanto para IPv4 como IPv6.

CentOS 5, Red HatTM Enterprise Linux 5 …

yum -y install nc

O Debian/Ubuntu

apt-get install netcat

Conexiones simples.

Para iniciar una conexión hacia algún puerto en algún sistema, se utiliza el mandato nc seguido de una dirección IP y un puerto al cual conectarse. En el siguiente ejemplo se realizará una conexión hacia el puerto 25 (SMTP) de 127.0.0.1:

nc 127.0.0.1 25

Si hay un servidor de correo funcionado, lo anterior puede devolver una salida similar a la siguiente:

220 localhost.localdomain ESMTP ; Wed, 28 May 2008 10:24:52 -0500
quit
221 2.0.0 localhost.localdomain closing connection

Revisión de puertos.

Para revisar los puertos abiertos, se utiliza nc con la opción -z para solicitar se trate de escuchar por puertos abiertos, y un puerto o rango de puertos. En el siguiente ejemplo, se pide al mandato nc revisar la presencia de puertos abiertos TCP (modo predeterminado) entre el rango del puerto 21 al 25.

nc -vz 127.0.0.1 21-25

Lo anterior puede devolver una salida como la siguiente, si se encontrasen abiertos los puertos 21, 22 y 25.

Connection to 127.0.0.1 21 port [tcp/ftp] succeeded!
Connection to 127.0.0.1 22 port [tcp/ssh] succeeded!
Connection to 127.0.0.1 25 port [tcp/smtp] succeeded!

Opcionalmente se pueden revisar si están abiertos los puertos abiertos por UDP añadiendo la opción -u.
En el siguiente ejemplo se solicita al mandato nc revisar que puertos UDP abiertos que se encuentran entre el rango del puerto 21 al 80.

nc -zu 127.0.0.1 21-80

Lo anterior puede devolver una salida como la siguiente si se encuentran abiertos los puertos UDP 53, 67 y 68:

Connection to 127.0.0.1 53 port [udp/domain] succeeded!
Connection to 127.0.0.1 67 port [udp/bootps] succeeded!
Connection to 127.0.0.1 68 port [udp/bootpc] succeeded!

Si se quiere obtener una salida más descriptiva, solo es necesario especificar nc -vz y la dirección IP si se quiere revisar puertos TCP abiertos, o bien nc -vzu para puertos UDP abiertos, donde -v define se devuelva una salida más descriptiva. En el siguiente ejemplo se pide al mandato nc revisar los puertos TCP abiertos entre el puerto 20 al 25.

nc -vz 127.0.0.1

La salida de lo anterior devolverá, a diferencia de utilizar solo -z, que puertos están cerrados.

nc: connect to 127.0.0.1 port 20 (tcp) failed: Connection refused
Connection to 127.0.0.1 21 port [tcp/ftp] succeeded!
Connection to 127.0.0.1 22 port [tcp/ssh] succeeded!
nc: connect to 127.0.0.1 port 23 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 24 (tcp) failed: Connection refused
Connection to 127.0.0.1 25 port [tcp/smtp] succeeded!

Creando un modelo cliente servidor.

Es relativamente simple crear un modelo cliente/servidor. Desde una terminal que será utilizada para iniciar un modelo de servidor, se utiliza el mandato nc con la opción -l (listen o escuchar) seguida de un puerto que esté desocupado. Esto hará que nc se comporte como servidor escuchando peticiones en un puerto arbitrario. En el siguiente ejemplo se hará que mandato nc funcione como servidor escuchando peticiones en el puerto 22222.

nc -l 22222

Para establecer la conexión como cliente, desde otra terminal se inicia el mandato nc especificando a continuación una IP local para el sistema y el numero de puerto al que se quiera conectar. En el siguiente ejemplo se realiza la conexión al puerto 22222 de 127.0.0.1

nc 127.0.0.1 22222

Todo lo que se escriba desde la terminal como cliente podrá ser visto en la terminal como servidor.

Transferencia de datos.

Tomando el ejemplo anterior, es posible realizar transferencia de datos desde una terminal como
cliente hacia una terminal como servidor. La única diferencia es que en el servidor se cambia las
salida estándar de la terminal hacia un fichero del siguiente modo:

nc -l 22222 > algo.out

En el cliente se realiza algo similar. En lugar de ingresar datos desde la conexión. se hace a partir
de un fichero con contenido de la siguiente forma:

nc 127.0.0.1 22222 < algo.in

En el ejemplo descrito se realiza la transferencia de datos del fichero algo.in, desde el proceso
como cliente, hacia el fichero algo.out, en el proceso como servidor.

Anuncios

Deja un comentario...dicen que es gratis!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s