Introducción
En este laboratorio aprenderás los fundamentos de la comunicación de red utilizando Netcat, una herramienta versátil que a menudo se describe como la «navaja suiza» de las redes. Descubrirás cómo esta potente utilidad permite leer y escribir datos a través de conexiones de red mediante los protocolos TCP o UDP.
A través de ejercicios prácticos, explorarás los conceptos básicos de la comunicación cliente-servidor, crearás un sistema de chat sencillo y comprenderás conceptos esenciales de redes, como los puertos. El laboratorio también te introducirá en técnicas básicas de cifrado para transmitir datos de forma segura.
Instalación de Netcat
En este paso prepararemos la herramienta adecuada antes de iniciar nuestra comunicación secreta. Netcat suele llamarse la «navaja suiza» de las herramientas de red porque puede encargarse de muchas tareas de comunicación diferentes. Vamos a instalar Netcat en el sistema paso a paso.
Primero, abre la terminal. En el escritorio, localiza y abre Xfce Terminal. Aquí es donde introduciremos todos los comandos necesarios para trabajar con Netcat.

Nota: Los usuarios gratuitos no pueden conectarse a Internet, por lo que Netcat ya está instalado en el entorno del laboratorio. Puedes pasar directamente al punto 4 de la lista (comprobar si Netcat está instalado). Los usuarios Pro pueden actualizar su plan para practicar la instalación de Netcat por su cuenta.
Solo para usuarios Pro
Una vez abierta la terminal, debemos actualizar las listas de paquetes. Así nos aseguraremos de obtener la versión más reciente de Netcat. Escribe el siguiente comando y pulsa Intro:
sudo apt update
Es posible que el sistema solicite tu contraseña. Escríbela —no verás los caracteres mientras la introduces— y pulsa Intro. La parte sudo indica que el comando se ejecutará con privilegios de administrador.
Ahora que las listas de paquetes están actualizadas, instalemos Netcat. El gestor de paquetes resolverá automáticamente todas las dependencias. Introduce el siguiente comando:
sudo apt install netcat -y
La opción -y responde automáticamente «sí» a cualquier confirmación, lo que agiliza la instalación. Resulta útil cuando estás seguro de que deseas instalar el paquete.
nc -h
Deberías ver una salida que comienza con «OpenBSD netcat», seguida de una lista de opciones. Esto significa que Netcat está instalado y listo para usarse. La opción -h muestra la información de ayuda, una forma sencilla de comprobar si un programa funciona correctamente.
¡Enhorabuena! Acabas de instalar una potente herramienta de red. Netcat ofrece muchas funciones, desde transferencias sencillas de archivos hasta la creación de conexiones de red. En este laboratorio nos centraremos en su uso básico para que comprendas sus capacidades. Puedes imaginar Netcat como una forma sencilla de conectar ordenadores e intercambiar información entre ellos.
Comprensión de los puertos y creación de un receptor
Ahora que tenemos lista nuestra herramienta de comunicación, aprenderemos qué son los puertos y configuraremos un receptor. En redes, los puertos se parecen a distintos canales de radio: permiten que varias comunicaciones tengan lugar simultáneamente en el mismo dispositivo. Puedes imaginarlos como puertas numeradas, donde cada puerta conduce a un servicio o aplicación diferente del ordenador.
Vamos a crear un receptor. Utilizaremos el puerto 12345 para nuestra comunicación. Los números de puerto van del 0 al 65535, y elegimos 12345 porque es fácil de recordar y normalmente no lo utilizan los servicios del sistema. En la terminal, escribe:
nc -l 12345
Este comando indica a Netcat que escuche (-l) en el puerto 12345. La opción -l activa el modo de escucha, lo que significa que el ordenador esperará conexiones entrantes en ese puerto.
La terminal parecerá quedarse bloqueada. ¡No te preocupes! Es el comportamiento esperado: Netcat está escuchando activamente y esperando que alguien se conecte al puerto 12345. El cursor parpadeante indica que el programa se está ejecutando correctamente en modo de escucha.
Para probar el receptor, necesitamos abrir otra ventana de terminal. Puedes hacerlo haciendo clic con el botón derecho en el icono de la terminal y seleccionando «New Terminal», o utilizando el atajo Ctrl+Shift+N. Esta segunda terminal actuará como nuestro «cliente», que se conectará al receptor.
En la nueva terminal nos conectaremos al receptor. Escribe:
nc localhost 12345
Este comando indica a Netcat que se conecte a localhost —que representa el propio ordenador— en el puerto 12345. localhost es un nombre de host especial que siempre hace referencia al equipo actual.
Ahora escribe un mensaje sencillo, como «Hello», en la segunda terminal y pulsa Intro. Deberías ver el mensaje en la primera terminal, donde se está ejecutando el receptor. Esto demuestra cómo los datos viajan desde la terminal que inicia la conexión hasta la terminal que escucha a través del puerto de red.

Puedes seguir escribiendo mensajes en cualquiera de las dos terminales; aparecerán en la otra. Esto demuestra la capacidad dúplex completa de Netcat, es decir, que la comunicación puede fluir simultáneamente en ambas direcciones. Envía varios mensajes de un lado a otro para comprobar cómo funciona.
Para finalizar la conexión, pulsa Ctrl+C en ambas terminales. Este atajo de teclado envía una señal de interrupción que cierra correctamente las sesiones de Netcat. Es importante cerrar las conexiones de forma adecuada cuando termines las pruebas.
Transferencia de archivos con Netcat
Ahora que hemos aprendido a establecer una comunicación de red básica con Netcat, exploremos una de sus aplicaciones más prácticas: transferir archivos entre sistemas. Esta función, sencilla pero potente, convierte a Netcat en una herramienta valiosa para administradores de sistemas e ingenieros de redes.
Primero crearemos un archivo de ejemplo para transferir. En la terminal, escribe:
cd ~/project
echo "Top Secret: The cake recipe is actually a lie" > secret.txt
Este comando realiza dos acciones: cambia al directorio del proyecto y crea un archivo nuevo llamado secret.txt que contiene nuestro mensaje de ejemplo. El símbolo > redirige la salida del comando echo a un archivo.
Ahora configuraremos el extremo receptor de la transferencia. Abre una ventana de terminal y ejecuta:
cd ~/project
nc -l 12345 > received_secret.txt
Aquí, nc -l 12345 inicia Netcat en modo de escucha en el puerto 12345. El símbolo > redirige los datos entrantes a un archivo nuevo llamado received_secret.txt. Esta terminal permanecerá a la espera de conexiones entrantes.
En otra ventana de terminal, manteniendo la primera en ejecución, enviaremos el archivo:
cd ~/project
nc localhost 12345 < secret.txt
Este comando utiliza Netcat para conectarse al receptor (localhost significa «este mismo ordenador») en el puerto 12345. El símbolo < indica a Netcat que utilice secret.txt como entrada y, de este modo, envíe el contenido del archivo a través de la conexión de red.
La transferencia se realiza al instante porque ambos extremos están en el mismo equipo. Para verificar que se ha completado correctamente, comprueba el contenido del archivo recibido:
cat received_secret.txt
El comando cat muestra el contenido del archivo, que debería coincidir exactamente con nuestro mensaje secreto original.

¡Enhorabuena! Has transferido correctamente un archivo utilizando Netcat. Aunque en esta demostración hemos usado localhost, el mismo procedimiento funciona entre distintos ordenadores de una red: solo tienes que sustituir localhost por la dirección IP del ordenador receptor. Este método sencillo puede resultar muy útil para realizar transferencias rápidas cuando no se dispone de protocolos más complejos.
Implementación de una comunicación cifrada
En este paso añadiremos una capa de seguridad a nuestra comunicación mediante el cifrado con OpenSSL e integraremos esta herramienta con Netcat. El cifrado es fundamental para proteger la información confidencial frente a la interceptación y la lectura por parte de personas no autorizadas durante la transmisión por red.
En laboratorios anteriores ya hemos aprendido a utilizar OpenSSL. OpenSSL proporciona funciones criptográficas sólidas que aprovecharemos para proteger nuestros mensajes. En concreto, usaremos el comando openssl enc para cifrar y descifrar mensajes mediante el algoritmo AES-256-CBC, un sistema de cifrado simétrico robusto. También utilizaremos una frase de contraseña para derivar la clave de cifrado; puedes considerarla un secreto compartido entre el emisor y el receptor.
Primero crearemos el script del emisor. Este script se encargará de cifrar y enviar los mensajes. Abre un archivo nuevo llamado secure_sender.sh:
nano secure_sender.sh
Añade el siguiente contenido al archivo (puedes copiarlo y pegarlo):
#!/bin/bash
echo "Secure Sender - Enter messages to send. Press Ctrl+C to exit."
while true; do
echo "Enter message:"
read message
encrypted=$(echo "$message" | openssl enc -aes-256-cbc -salt -base64 -pbkdf2 -iter 10000 -pass pass:secretpassword 2> /dev/null)
echo "$encrypted" | nc -N localhost 12345
done
Este script funciona de la siguiente manera:
- Solicita continuamente mensajes mediante un bucle
- Toma la entrada y la canaliza a OpenSSL para cifrarla
- Utiliza Netcat (
nc) para enviar los datos cifrados al puerto 12345 delocalhost - Los parámetros de cifrado incluyen una sal para reforzar la seguridad, codificación base64 para facilitar la transmisión y derivación de claves PBKDF2 con 10 000 iteraciones

Pulsa Ctrl+X, después Y y, por último, Intro para guardar y salir del archivo. Haz que el script sea ejecutable:
chmod +x secure_sender.sh
Ahora crearemos el script del receptor. Este script escuchará y descifrará los mensajes entrantes. Abre un archivo nuevo llamado secure_receiver.sh:
nano secure_receiver.sh
Añade el siguiente contenido:
#!/bin/bash
echo "Secure Receiver - Waiting for messages. Press Ctrl+C to exit."
while true; do
encrypted=$(nc -l 12345)
if [ ! -z "$encrypted" ]; then
decrypted=$(echo "$encrypted" | openssl enc -aes-256-cbc -d -salt -base64 -pbkdf2 -iter 10000 -pass pass:secretpassword 2> /dev/null)
echo "Received message: $decrypted"
fi
done
En el entorno Ubuntu 22.04 utilizado en este laboratorio, la sintaxis predeterminada del receptor de OpenBSD Netcat es nc -l 12345. No añadas -p al utilizar -l aquí.
Este script:
- Escucha continuamente los datos entrantes en el puerto 12345
- Cuando recibe datos, los canaliza a OpenSSL para descifrarlos
- Utiliza los mismos parámetros de cifrado que el emisor para descifrar correctamente el mensaje
- Muestra el mensaje original en texto plano
Pulsa Ctrl+X, después Y y, por último, Intro para guardar y salir del archivo. Haz que el script sea ejecutable:
chmod +x secure_receiver.sh
Ahora probaremos nuestro sistema de comunicación cifrada. Necesitarás tener abiertas simultáneamente dos ventanas de terminal: una para el receptor y otra para el emisor.
En la primera terminal, inicia el receptor:
./secure_receiver.sh
Verás un mensaje que indica que el receptor está esperando mensajes. El receptor ya estará escuchando activamente en el puerto 12345.
En la segunda terminal, inicia el emisor:
./secure_sender.sh
Se te pedirá que introduzcas mensajes. Todo lo que escribas aquí se cifrará antes de enviarse por la red.
En la terminal del emisor, escribe un mensaje y pulsa Intro. Deberías ver cómo se envía el mensaje cifrado, aunque solo verás brevemente la versión cifrada mientras se transmite.

En la terminal del receptor debería aparecer el mensaje descifrado exactamente tal como lo escribiste en la terminal del emisor.
Puedes seguir enviando mensajes desde la terminal del emisor; se cifrarán, enviarán, recibirán y descifrarán automáticamente en la terminal del receptor. Esto demuestra un ciclo completo de comunicación segura.
Para finalizar la comunicación, pulsa Ctrl+C en ambas terminales. De este modo, los dos scripts terminarán correctamente.
Esta configuración demuestra un sistema de comunicación cifrada sencillo pero eficaz. Aunque utilizamos localhost para realizar las pruebas, el mismo enfoque funciona entre distintos equipos de una red. Los mensajes se cifran automáticamente antes de transmitirse y se descifran al recibirse, lo que proporciona un canal de comunicación seguro. Recuerda que, en aplicaciones reales, convendría utilizar métodos más seguros para intercambiar claves que una contraseña escrita directamente en el código.
Resumen
En este laboratorio has aprendido los fundamentos de la comunicación de red con Netcat y has explorado técnicas básicas de cifrado para transferir datos de forma segura. Has practicado la instalación de Netcat, el establecimiento de conexiones mediante puertos concretos y la transferencia de archivos entre sistemas.
Esta experiencia práctica ha demostrado la importancia del cifrado en las comunicaciones de red mediante una implementación real con OpenSSL. Estos conocimientos fundamentales constituyen un buen punto de partida para comprender conceptos de ciberseguridad más avanzados y protocolos de comunicación segura.



