¿Qué es Netcat y cómo funciona?
--------------------------------------------

Netcat es una herramienta de línea de comandos que sirve para escribir y leer datos en la red. Para la transmisión de datos, Netcat usa los protocolos de red TCP/IP y UDP. La herramienta proviene originalmente del mundo de Unix; desde entonces, se ha expandido a todas las plataformas.
Gracias a su universalidad, a Netcat se la llama “la navaja suiza del TCP/IP”. Puede utilizarse, por ejemplo, para diagnosticar errores y problemas que afecten a la funcionalidad y la seguridad de una red. Netcat también puede escanear puertos, hacer streaming de datos o simplemente transferirlos. Además, permite configurar servidores de chat y de web e iniciar consultas por correo. Este software minimalista, desarrollado a mediados de los 90, puede operar en modo servidor y cliente.
Sintaxis de Netcat: ¿qué comandos y opciones están disponibles?
La sintaxis de Netcat consiste en dos componentes fundamentales: el comando básico “nc”, siempre idéntico, seguido por varias “opciones”. El comando básico direcciona al archivo de programa nc.exe, mientras que las opciones determinan el rango concreto de funciones de la versión de Netcat, por lo que varían dependiendo del sistema operativo y de la versión de Netcat utilizada.
La siguiente tabla se limita a recoger las opciones más importantes disponibles en la mayoría de las versiones para Linux, macOS y Windows. También se enumeran otras opciones útiles, en particular las extensiones de la versión GNU Netcat, ampliamente utilizada en Linux, Unix y macOS:
Opciones Descripción
-4 Fuerza el uso de IPv4 (GNU Netcat)
-6 Fuerza el uso de IPv6 (GNU Netcat)
-d Elimina Netcat de la consola (operación en segundo plano; disponible en Windows y en las versiones actuales de GNU Netcat)
-D Habilita la opción de depurar los sockets (GNU Netcat)
-h (display help) Muestra la ayuda (comandos/opciones con una breve descripción)
-i (secs) Retardo en segundos para las líneas enviadas o los puertos escaneados
-k Netcat espera una nueva conexión después de que termine la anterior (solo en GNU Netcat y en combinación con “-l”)
-l (listen mode) Modo de escucha/listen y servidor para las solicitudes de conexión entrantes (sobre el puerto especificado)
-L (listen harder) Hace que Netcat funcione en modo de escucha incluso después de las desconexiones del lado del cliente (usando los mismos parámetros en todo momento; solo en la versión de Windows)
-n (numeric-only) Solo números IP, sin nombres DNS
-o (file) Se realiza un volcado hexadecimal del tráfico (el contenido de los archivos se muestra en vista hexadecimal); se utiliza para la depuración (debugging de aplicaciones de red); permite el registro de la comunicación (sniffing) para paquetes salientes y entrantes
-p (port) Especifica el puerto de origen local que Netcat debe utilizar para las conexiones salientes
-r Usa valores de puerto aleatorios al escanear (para puertos locales y remotos)
-s (adress) Especifica la dirección de la fuente local (dirección o nombre IP)
-t Modo Telnet (por ejemplo, permite el direccionamiento del servidor a través de Telnet); requiere una compilación especial de Netcat; de lo contrario, la opción no está disponible
-u Uso del modo UDP (en lugar de TCP)
-U (gateway) Netcat utiliza sockets de dominio Unix (GNU Netcat)
-v Salida detallada (por ejemplo, para la visualización y el alcance de los mensajes de error mostrados)
-w (secs) Define los tiempos muertos: para establecer y cerrar una conexión (unidad: segundos)
-z Modo de escáner de puerto (modo de I/O 0); solo escaneo para servicios de escucha (no envío de datos)
Si, por ejemplo, quieres definir un servidor o un cliente para la transferencia de datos en la red, debes observar la siguiente sintaxis:
Modo cliente (connect to somewhere):
nc [opciones] [dirección IP/nombre del host] [puerto]
Modo de servidor (listen for inbound):
nc -l -p port [opciones] [nombre del host] [puerto]
El esquema básico para ejecutar un escaneo de puertos tiene el siguiente aspecto:
nc [opciones] [host] [puerto]
Copiar archivos con Netcat
-------------------------------------
Una característica muy popular de Netcat es la copia de archivos, que puede usarse para transferir grandes cantidades de datos, así como para clonar particiones individuales o discos duros enteros. En nuestro ejemplo, el archivo test.txt debe copiarse del ordenador A (cliente) al ordenador B (servidor) a través del puerto 6790. Es necesario seguir estos pasos:
Determinar la dirección IP del ordenador B (PC de destino).
Crear el archivo de prueba test.txt en el directorio Netcat del ordenador A. En este ejemplo, el archivo de prueba se encuentra en el directorio de Netcat del cliente. En el ordenador de destino B, el archivo copiado termina también en la carpeta de Netcat (se deben cambiar las otras rutas de archivo en consecuencia).
Introducir la sintaxis de Netcat en la línea de comandos.
Ordenador B (actúa como servidor receptor):
nc -l -p 6790 > test.txt
INTRO
Ordenador A (actúa como cliente que envía):
nc [dirección IP del ordenador B] 6790 < test.txt
INTRO
El éxito de la transferencia no se confirma en el símbolo del sistema. Puedes comprobar si el archivo se ha transferido correctamente buscándolo en la carpeta de destino.
Escanear puertos
Puedes ejecutar un escaneo y encontrar puertos abiertos, por ejemplo, para detectar errores y problemas de seguridad. En el siguiente ejemplo, el ordenador tiene la dirección IP 192.168.11.1. Después de la dirección IP, se puede especificar si se desean escanear puertos individuales (por ejemplo, 1), varios puertos (1, 2, 3, etc.) o un rango completo (1-1024):
nc -w 2 -z 192.168.10.1 1-1024
La opción “-w” determina la duración de un tiempo muerto (en este ejemplo, “Intentar conectarse a los puertos durante dos segundos”). La opción “-z” indica a Netcat que busque solo servicios de escucha y que no envíe ningún dato.
La opción “-v” sirve para obtener información más detallada sobre el escaneo:
nc -v -w 2 -z 192.168.11.1 1-1024
Netcat confirma entonces un puerto abierto que ha encontrado con el mensaje “succeeded!”.
Connection to 192.168.11.1 25 port [tcp/smtp] succeeded!
En los puertos escaneados 1-1024, se ejecutan los servicios más conocidos, como correo electrónico, FTP o SSH. En este ejemplo, Netcat ha encontrado el puerto SMTP abierto de un cliente de correo electrónico.
Netcat como programa de chat simple
Netcat puede establecer una conexión TCP o UDP simple entre dos ordenadores y luego abrir un canal de comunicación. En el siguiente ejemplo, el receptor se instala primero en el sistema remoto y se pone en modo de listening (escucha). De este modo, actúa como la parte de “escucha” y utiliza el puerto 1605 para recibir mensajes, a los que se puede acceder a través de la dirección IP 192.168.11.1:
nc -l -p 1605
INTRO
A continuación, el ordenador local (PC emisor) establece una conexión con el destinatario del mensaje mediante el siguiente comando:
nc 192.168.11.1 1605
INTRO
Si la conexión se establece correctamente, los mensajes pueden intercambiarse en ambas direcciones.
Configurar un servidor web simple
Netcat también sirve para configurar un servidor web simple. Si, por ejemplo, no se puede acceder al servidor original debido a problemas técnicos, se puede al menos responder a las solicitudes con un mensaje de error predeterminado (en forma de archivo .html) con información sobre el error:
nc -l -v -p 85 -w10 -L < mensaje de error.html
Netcat espera a las solicitudes en el puerto 85 y responde a ellas con el archivo mensaje de error.html. La opción “-L” asegura que Netcat mantenga este procedimiento más allá de una sola solicitud. El parámetro “-w” termina la conexión después de 10 segundos (tiempo muerto). El parámetro “-v” proporciona al operador del servidor información sobre las solicitudes y documentos, como el sistema operativo y el tipo de navegador del ordenador cliente solicitante mediante mensajes de estado.