Introducción
Netcat (o nc) es una utilidad de línea de comandos que lee y escribe datos a través de conexiones de red, utilizando protocolos TCP o UDP. Es una de las herramientas más poderosas en la red y el arsenal de administradores de sistemas y se considera una navaja suiza de herramientas de red.
Netcat es multiplataforma y está disponible para Linux, macOS, Windows y BSD. Puede usar Netcat para depurar y monitorear conexiones de red, buscar puertos abiertos, transferir datos, como proxies, y más. El paquete Netcat está preinstalado en macOS y distribuciones populares de Linux como Ubuntu.
Sintaxis de Netcat
La sintaxis más simple de la utilidad Netcat tiene la siguiente forma:
nc [options] host port
En Ubuntu, puede usar netcat
o nc
. Ambos son enlaces simbólicos a la versión openBSD de Netcat.
De forma predeterminada, Netcat intentará iniciar una conexión TCP al host y al puerto especificados. Si desea establecer una conexión UDP, use la opción -u
nc -u host port
Escanear los puertos
El escaneo de puertos es uno de los usos más comunes de Netcat. Puede escanear un solo puerto o un rango de puertos.
Por ejemplo, para buscar puertos abiertos en el rango 20-80 de una dirección IP determinada, use el siguiente comando:
nc -z -v 10.10.8.8 20-80
La -z
le indicará al nc
que busque solo puertos abiertos, sin enviarles ningún dato, y la -v
para proporcionar información más detallada.
La salida se verá así:
nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
nc: connect to 10.10.8.8 port 23 (tcp) failed: Connection refused...
nc: connect to 10.10.8.8 port 79 (tcp) failed: Connection refused
Connection to 10.10.8.8 80 port [tcp/http] succeeded!
Si desea imprimir solo las líneas con los puertos abiertos, puede filtrar los resultados con el comando grep:
nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
La salida se verá así:
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!
También puede utilizar Netcat para encontrar el software del servidor y su versión. Por ejemplo, si envía un comando "EXIT" al servidor en el puerto SSH predeterminado 22:
echo "EXIT" | nc 10.10.8.8 22
La salida se verá así:
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
Protocol mismatch.
Para buscar puertos UDP, simplemente agregue la -u
al comando como se muestra a continuación:
nc -z -v -u 10.10.8.8 20-80
En la mayoría de los casos, Nmap es una herramienta mejor que Netcat para escanear puertos complejos.
Enviar archivos a través de Netcat
Netcat se puede utilizar para transferir datos de un host a otro creando un modelo básico de cliente /servidor.
Funciona configurando Netcat para que escuche en un puerto específico usando la -l
en el host receptor y luego estableciendo una conexión TCP normal desde el otro host y enviándole el archivo.
En el host receptor, ejecute el siguiente comando que abrirá el puerto 5555 para la conexión entrante y redirigirá la salida al archivo example.txt:
nc -l 5555 > esempio.txt
En el host de envío, conéctese al host de recepción y envíe el archivo:
nc host_ricevente.com 5555 < esempio.txt
Para transferir un directorio, puede usar tar para archivar el directorio en el host de origen y extraer el archivo en el host de destino.
En el host receptor, configure la herramienta Netcat para escuchar una conexión entrante en el puerto 5555. Los datos entrantes se envían al comando tar que extraerá el archivo:
nc -l 5555 | tar xzvf -
En el host de envío, comprima el directorio y envíe los datos conectándose al nc
en el host de recepción:
tar czvf - /path/to/dir | nc receiving.host.com 5555
Puede ver el progreso de la transferencia en ambos hosts. Una vez completado, escriba CTRL+C
para cerrar la conexión.
Crear un servidor de chat simple
El procedimiento para crear un chat en línea entre dos o más hosts es el mismo que para transferir archivos.
En el primer host, inicie un proceso Netcat para escuchar en el puerto 5555:
nc -l 5555
Desde el segundo host, ejecute el siguiente comando para conectarse al puerto de escucha:
nc first.host.com 5555
Ahora, si escribe un mensaje y presiona ENTER
, se mostrará en ambos hosts.
Para cerrar la conexión, escriba CTRL+C
Realizar una solicitud HTTP
Si bien existen herramientas mucho mejores para solicitudes HTTP como curl, también puede usar Netcat para enviar varias solicitudes a servidores remotos.
Por ejemplo, para recuperar la página de manual de Netcat del sitio web de OpenBSD, escriba:
printf "GET /nc.1 HTTP/1.1\r\nHost: man.openbsd.org\r\n\r\n" | nc man.openbsd.org 80
La respuesta completa, incluidos los encabezados HTTP y el código HTML, se imprimirá en la terminal.
Conclusión
En este tutorial, aprendió a usar la utilidad Netcat para establecer y probar conexiones TCP y UDP.
Para obtener más información, visite la página de manual de Netcat y lea todas las otras opciones poderosas del comando Netcat.