martes, 3 de noviembre de 2009

Transferir ficheros con netcat

Imaginemos que necesitamos transferir un fichero por red entre dos máquinas y que, por el motivo que sea, no lo podemos hacer por ftp, scp,... bien por desconocimiento de passwords o por falta de esos servicios. En este caso, netcat es nuestra aplicación.

En la máquina receptora del fichero estableceremos netcat como servidor en un determinado puerto:

$ nc -l -p 5000 > fichero.odt

Lo que hará será escuchar por ese puerto y todo lo que reciba escribirlo al fichero fichero.odt (si no hubiésemos redirigido la salida estándar aparecería por pantalla).

En la máquina origen (la que tiene el fichero deseado), ejecutar el comando:

$ cat fichero.odt | nc 192.168.1.1 5000 -q 0

Supuesto que el servidor destino tiene dicha IP. Lo que hacemos en este caso es pasarle como entrada a netcat el contenido del fichero, y este lo enviará a la IP y puerto indicados. La opción -q 0 cerrará la conexión con el otro extremo cuando finalice la transmisión del fichero.

Si desconfiáis de que el contenido del fichero transmitido sea correcto, ejecutad en ambos servidor el comando:

$ md5sum fichero.odt
22cd94e9c8db682d2f3cb432649eb6b8  fichero.odt

para comparar el hash del fichero.

Se permiten muchas variaciones, como por ejemplo comprimir el fichero antes de mandarlo para generar menos tráfico de red y/o tardar menos en transmitirlo:

$ gzip -c fichero.odt | nc 192.168.1.1 5000 -q 0