Netcat – Esta vez transfiriendo ficheros entre servidores

por | octubre 16, 2016

Netcat es una utilidad muy versátil para tareas de red. Una de esas múltiples tareas que podemos realizar es el envío de ficheros entre servidores de forma sencilla, sin necesidad de hacer uso de FTP, SFTP ni herramientas adicionales.

No obstante es necesario hacer ciertas consideraciones de seguridad antes de hacer uso de la herramienta. Tened en cuenta que netcat no establece cifrado de datos ni de canal alguno, por lo que su uso para transferencia de ficheros sólo está recomendado para redes seguras, lo que le excluye de ser utilizado si Internet o una WAN están de por medio. Para subsanar esto podríamos hacer uso de una VPN o un túnel SSH para establecer un canal seguro de comunicaciones a través del cual utilizar netcat.

Transferencia básica de ficheros

Lo primero que tendremos que hacer es abrir un socket que actuará como «listener» en el servidor que va a recibir el fichero. Nuestro servidor tendrá la IP 192.168.2.101 y pondremos el listener en el puerto 5556.

netcat -l -p 5556 > fichero-recibido

El fichero que recibamos desde el otro servidor será redirigido al fichero «fichero-recibido» como podemos ver.

En la máquina cliente que va a enviar el fichero, bastará con realizar lo siguiente:

netcat 192.168.2.101 < fichero-enviado

Donde fichero-enviado pueder ser un mp3, fichero de texto plano, documento .odt, etc… Tened en cuenta eso sí que tardará más o menos según el tamaño de fichero a transferir.

Para mayor claridad, en la máquina servidor donde abrimos el socket deberíamos nombrar el fichero al que redireccionamos con la extensión del tipo de fichero que vamos a recibir. Por ejemplo para un mp3:

netcat -l -p 5556 > fichero-recibido.mp3

Recibiendo ficheros empaquetados o comprimidos

En caso de que vayamos a recibir un paquete TAR podemos realizar el desempaquetado del contenido en cuanto llegue al destino.

En la máquina servidor donde vamos a recibir el fichero TAR:

netcat -l -p 5556 | tar -xvf -

En la máquina cliente que va a enviar el fichero el procedimiento es como siempre:

netcat 192.168.2.101 < empaquetado.tar

¿Y si el paquete TAR estuviera comprimido con gzip? Basta con añadir la opción correspondiente en el comando tar de la máquina servidor:

# Servidor
netcat -l -p 5556 | tar -xvzf -
# Cliente
netcat 192.168.2.101 < empaquetado.tar.gz

Envío de información en tiempo real

Supongamos que tenemos un servidor de aplicaciones o web en una determinada máquina, pero queremos tener centralizada la monitorización de logs.

Podríamos poner un listener de escucha en el puerto 5556 en la máquina que va a recibir la información:

netcat -k -l -p 5556

En la máquina que va a enviar la información del log, pondríamos:

tail -f access.log | netcat 192.168.2.101 5556

Conforme fuera llegando información al fichero access.log, la iríamos recibiendo en la máquina 192.168.2.101