Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Uso de 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

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2014 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 es una herramienta utilizada para supervisar y escribir sobre conexiones tanto TCP como UDP. Puede abrir conexiones TCP, enviar paquetes UDP, escuchar peticiones sobre puertos arbitrarios tanto TCP como UDP, permite supervisar puertos abiertos y otras muchas cosas 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 más valoradas por la comunidad de usuarios de GNU/Linux.

Equipamiento lógico necesario.

En CentOS, Fedora™ y Red Hat™ Enterprise Linux.

Ejecute lo siguiente para instalar Netcat:

yum -y install nc

En openSUSE™ y SUSE™ Linux Enterprise.

Ejecute lo siguiente para instalar Netcat:

yast -i netcat

Procedimientos en CentOS, Fedora™ y Red Hat™ Enterprise Linux.

El manual completo de nc puede consultarse ejecutando lo siguiente:

man 1 nc

Conexiones simples.

Ejecute nc seguido de una dirección IP y un puerto al cual conectarse para iniciar una conexión hacia algún puerto en algún sistema. 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, donde requerirá escribir quit y pulsar la tecla ENTER para cerrar la conexión:

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.

Ejecute nc con la opción -z para solicitar se intente de escuchar por puertos abiertos y un puerto o rango de puertos. En el siguiente ejemplo se utiliza nc para revisar cuáles puertos TCP (modo predeterminado) están abiertos dentro del rango que va del puerto 21 al puerto 25.

nc -vz 127.0.0.1 21-25

Lo anterior puede devolver una salida similar a 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 UDP abiertos añadiendo la opción -u. En el siguiente ejemplo se ejecuta nc para revisar cuáles puertos UDP se encuentran abiertos entre el rango comprendido entre los puertos 21 al 80.

nc -zu 127.0.0.1 21-80

Lo anterior puede devolver una salida similar a la siguiente, donde se asume que 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, sólo es necesario ejecutar nc con las opciones -vz y la dirección IP si se quiere revisar puertos TCP abiertos o bien nc -vzu para puertos UDP abiertos, donde la opción -v define se devuelva una salida más descriptiva. En el siguiente ejemplo se ejecuta nc para revisar los puertos TCP abiertos entre el puerto 20 al 25. 

nc -vz 127.0.0.1 20-25

La salida de lo anterior también devolverá, a diferencia de utilizar sólo la opción -z, cuáles puertos están cerrados en el rango especificado.

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, ejecute nc con la opción -l (listen o escuchar) seguida de un número de 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 nc funcione como servidor escuchando peticiones en el puerto 22222.

nc -l 22222

Para establecer la conexión como cliente, desde otra terminal ejecute nc especificando como argumentos una dirección IP 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 (anfitrión local):

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 cambia el direccionamiento de 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.

Procedimientos en openSUSE™ y SUSE™ Linux Enterprise.

El manual completo de netcat puede consultarse ejecutando lo siguiente:

man 1 netcat

Conexiones simples.

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

netcat 127.0.0.1 25

Si hay un servidor de correo funcionado, lo anterior puede devolver una salida similar a la siguiente, donde requerirá escribir quit y pulsar la tecla ENTER para cerrar la conexión:

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.

Ejecute netcat 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 utiliza netcat para revisar cuáles puertos TCP (modo predeterminado) están abiertos dentro del rango que va del puerto 21 al puerto 25.

netcat -vz 127.0.0.1 21-25

Lo anterior puede devolver una salida similar a 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 UDP abiertos añadiendo la opción -u. En el siguiente ejemplo se utiliza para netcat revisar cuáles puertos UDP se encuentran abiertos entre el rango comprendido entre los puertos 21 al 80.

netcat -zu 127.0.0.1 21-80

Lo anterior puede devolver una salida similar a la siguiente, donde se asume que 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, sólo es necesario ejecutar netcat con las opciones -vz y la dirección IP si se quiere revisar puertos TCP abiertos o bien netcat -vzu para puertos UDP abiertos, donde la opción -v define se devuelva una salida más descriptiva. En el siguiente ejemplo se utiliza netcat para revisar los puertos TCP abiertos entre el puerto 20 al 25. 

netcat -vz 127.0.0.1 20-25

La salida de lo anterior también devolverá, a diferencia de utilizar sólo la opción -z, cuáles puertos están cerrados en el rango especificado.

netcat: 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!
netcat: connect to 127.0.0.1 port 23 (tcp) failed: Connection refused
netcat: 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 ejecuta netcat con la opción -l (listen o escuchar) seguida de un número de puerto que esté desocupado. Esto hará que netcat se comporte como servidor escuchando peticiones en un puerto arbitrario. En el siguiente ejemplo se ejecuta netcat para que funcione como servidor escuchando peticiones en el puerto 22222.

netcat -l 22222

Para establecer la conexión como cliente, desde otra terminal ejecute netcat especificando como argumentos una dirección IP 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 (anfitrión local):

netcat 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 cambia el direccionamiento de la salida estándar (STDOUT) de la terminal, hacia un archivo, como se ejemplifica a continuación:

netcat -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:

netcat 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.

Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Última Edición: 28/05/2014, 11:52|Hits: 73,949 Ver la versión para imprimir