En el siguiente artículo vamos a echar un vistazo a Netcat. Esta es una herramienta de red que permite a través de la terminal, utilizando una sintaxis sencilla, abrir puertos TCP/UDP en un HOST, asociar una shell a un puerto en concreto y forzar conexiones UDP/TCP.
Algunos llaman a esta herramienta la navaja suiza TCP/IP. Se puede utilizar como una solución ad hoc para transferir archivos a través de redes locales o de Internet, esto último con precaución. También es útil para transferir datos entre máquinas virtuales o contenedores, etc.
Esta herramienta quizás solo sea aconsejable utilizarla dentro de una red de área local. Si envías datos con esta herramienta a un servidor a través de Internet, los paquetes podrían ser interceptados a lo largo de la ruta. Los archivos se enviarán si seguridad añadida. Pero si los datos transferidos no contienen datos confidenciales, realmente no sería un problema serio.
Instalar Netcat en Ubuntu
La mayoría de los sistemas operativos basados en Gnu/Linux vienen con esta herramienta preinstalada. Para comprobar si tienes instalado Netcat en tu equipo, abre una terminal (Ctrl+Alt+T) y escribe:
netcat
Si no se encuentra el comando, puedes instalar esta herramienta usando el comando:
sudo apt install netcat
Va a ser necesario instalar netcat tanto en el equipo que recibe los archivos como en la que los envía.
Usar netcat para transferir archivos entre equipos
En el equipo que recibirá los archivos, hay que buscar la dirección IP utilizada. En este ejemplo será la de la reed local. Para ello se puede utilizar:
ip route get 8.8.8.8
O también se puede usar:
ip a
En la captura de pantalla anterior se puede ver que la IP del receptor en este caso será 192.168.0.103. Ahí que aclarar que antes de escribir el comando del emisor, tendrá que escribirse el comando pertinente en el receptor.
En el equipo en el que se recibirá el archivo, escribe este comando:
nc -vl 44444 > nombre_del_archivo_recibido
En el comando anterior se usan dos parámetros: -v y -l. El primero hace que la salida sea detallada para poder ver lo que va a pasar. En cuanto a -l, hace que la herramienta “escuche” en el puerto 44444. El comando básicamente lo que hace es abrir un canal de comunicación en el dispositivo receptor. Si tienes configurado un firewall, hay que asegurarse de que sus reglas no estén bloqueando la conexión.
Normalmente, netcat va a mostrar en la terminal todo lo que recibe. Después de > crea un redireccionamiento. En lugar de imprimirlo en la pantalla, envía toda la salida al archivo especificado después de >. Esto va a crear un archivo con el nombre dado.
En el equipo que enviará el archivo, habrá que escribir, reemplazando 192.168.0.103 con la IP de tu equipo que va a recibir lo enviado, lo siguiente:
nc -N 192.168.0.103 44444 < /ruta/al/archivo/para/enviar/
En este comando, -N hace que netcat se cierre cuando se finaliza la transferencia. El directorio y las rutas de archivos pueden ser absolutas o relativas.
En caso de utilizar los comando mostrados sin redirecciones, se va a crear un ‘chat’ un tanto básico entre los dos dispositivos. Si escribes algo en un terminal y pulsas Intro, aparecerá en la del otro equipo. Esta es una manera sencilla de copiar y pegar texto de un dispositivo a otro.
Esta conexión se puede cerrar pulsando Ctrl+C en cualquiera de los dos equipos involucrados.
Enviar archivos comprimidos sobre la marcha
Si quieres enviar archivos grandes, esta herramienta permite comprimirlos sobre la marcha para acelerar la transferencia. En el receptor habrá que escribir:
nc -vl 44444 | gunzip > nombre_del_archivo_recibido
En la parte del emisor, reemplazando 192.168.0.103 con la dirección IP de tu equipo receptor, habrá que escribir lo siguiente:
gzip -c /ruta/del/archivo/a/eviar | nc -N 192.168.0.103 44444
Enviar y recibir directorios
Algo que posiblemente también necesites hacer en algún momento, es enviar todos los archivos de un mismo directorio a la vez. Las siguiente opción también va a comprimir lo enviado a través de la red.
En el extremo receptor, usaremos el siguiente comando:
nc -vl 44444 | tar zxv
Para este caso, en el dispositivo que envía, tendremos que utilizar el siguiente comando:
tar czp ruta/al/directorio/para/enviar | nc -N 192.168.0.103 44444
Ayuda
Si necesitas conocer más sobre netcat, puedes utilizar la ayuda:
nc -h
Hoy en día, los usuarios de Ubuntu podemos encontrar muchas soluciones de software que pueden resultar de ayuda a la hora de transferir archivos entre equipos. Esta es una buena opción cuando se trata de transferencias puntuales entre los equipos de nuestra red local.