Netcat (nc): la navaja suiza de redes, con ejemplos prácticos

Written by

in

Netcat (nc) es una de las herramientas más versátiles para trabajar con redes en Linux — lee y escribe datos crudos a través de conexiones TCP o UDP, lo que la hace útil tanto para diagnóstico como para tareas puntuales de transferencia y prueba de conectividad.

Escuchar en una interfaz y puerto específicos

nc -l -s 192.168.1.100 -p 8080
  • -l — activa el modo escucha (el equipo actúa como servidor, esperando una conexión entrante)
  • -s — selecciona la IP de la interfaz específica donde escuchar (útil en equipos con varias interfaces de red)
  • -p — define el puerto de escucha

Probar la conexión desde otra máquina

echo "Hola desde el cliente" | nc 192.168.1.100 8080

echo genera el mensaje, y lo canaliza (|) hacia nc, que se conecta al servidor escuchando en esa IP y puerto, enviando el texto como datos crudos por la conexión TCP.

Verificar si un puerto está abierto (escaneo simple)

nc -zv 192.168.1.100 22

-z hace que nc solo verifique si la conexión se puede establecer, sin enviar ni recibir datos (modo «zero-I/O», ideal para pruebas rápidas). -v activa el modo detallado (verbose), mostrando si la conexión tuvo éxito o fue rechazada.

También se puede escanear un rango de puertos:

nc -zv 192.168.1.100 20-25

Transferir un archivo entre dos equipos

Netcat no tiene protocolo propio de transferencia — simplemente mueve bytes crudos de un lado a otro, así que sirve perfectamente para mover un archivo completo sin necesidad de configurar SSH, FTP o Samba para una tarea puntual.

En la máquina que recibe (destino):

nc -l -p 9000 > archivo_recibido.tar.gz

En la máquina que envía (origen):

nc 192.168.1.100 9000 < archivo_original.tar.gz

El destino queda escuchando y redirige todo lo que reciba directamente a un archivo; el origen se conecta y envía el contenido del archivo como flujo de datos. Al terminar la transferencia, ambos procesos de nc se cierran automáticamente.

Banner grabbing: identificar qué servicio corre en un puerto

Muchos servicios (SSH, SMTP, FTP) envían un mensaje de bienvenida (banner) apenas se conectan, que suele revelar la versión del software corriendo:

nc -v 192.168.1.100 22

Al conectar, el servicio SSH normalmente responde de inmediato con algo como SSH-2.0-OpenSSH_9.6, sin necesidad de autenticarse — útil para inventariar rápidamente qué versión de software corre un servidor.

Chat simple entre dos terminales

Como nc simplemente pasa lo que se escribe en la entrada estándar hacia la conexión, se puede usar como un chat rudimentario de ida y vuelta entre dos equipos:

Equipo A (escucha):

nc -l -p 5000

Equipo B (se conecta):

nc 192.168.1.100 5000

Cualquier cosa que se escriba en cualquiera de las dos terminales (tras presionar Enter) aparece en la otra, en tiempo real.

Modo UDP

Por defecto nc usa TCP; para trabajar con UDP se agrega la bandera -u:

# Escuchar en UDP
nc -u -l -p 8080

# Enviar en UDP
echo "mensaje UDP" | nc -u 192.168.1.100 8080

Notas de seguridad

  • Netcat transmite todo en texto plano, sin cifrado — nunca usarlo para mover datos sensibles a través de redes no confiables; para eso existen herramientas como scp, rsync sobre SSH, o un túnel SSH.
  • Dejar un nc -l escuchando indefinidamente en un puerto expuesto a internet es un riesgo — cualquiera que se conecte puede enviar o recibir datos sin autenticación alguna.
  • Algunas variantes de nc (como ncat, incluida en el paquete Nmap) sí soportan cifrado SSL/TLS agregando la bandera --ssl, si se necesita algo más seguro manteniendo la misma simplicidad de uso.