viernes, 17 de agosto de 2012

Linux supervisar y escribir sobre conexiones tanto por TCP como por UDP NETCAD nc

http://www.alcancelibre.org/staticpages/index.php/como-netcat

Uso del mandato nc (Netcat)

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org
© 1999-2012 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Acerca de 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. Es una de las herramientas de diagnóstico y seguridad más populares y también una de las mejor calificadas por la comunidad.

Equipamiento lógico necesario.

Instalación a través de yum.

Si utiliza Fedora, CentOS o Red Hat™ Enterprise Linux, puede instalar Netcat ejecutando lo siguiente:
yum -y install nc

Procedimientos.

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!
De manera opcional, 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
Con lo anterior, 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 redirecciona la salida estándar (STDOUT) de la terminal, hacia un archivo, como se ejemplifica a continuación:
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 archivo 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 archivo algo.in, desde el proceso como cliente, hacia el archivo algo.out, en el proceso como servidor.

No hay comentarios:

Publicar un comentario