Recientemente he tenido que realizar un envío de datos entre diferentes equipos y no en todos los casos podemos usar y depender de ssh. En estos casos, una muy buena solución para la comunicación de datos es netcat. En este post voy a comentar un uso muy simple del mismo y que deja en clara evidencia todo su potencial. Puede que para futuros post haga referencias de uso más avanzadas.
netcat es un software que permite trabajar en las dos direcciones. Por un lado permite ponerse a la escucha de datos en un puerto y también permite el envío de datos hacia una IP destino. Es por ello que se puede decir que netcat se puede emplear de cliente y servidor. En el siguiente caso voy a utilizarlo para crear un flujo de datos entre un equipo dañado y un equipo GNU/Linux en perfecto estado y vamos a realizar un backup de todo el disco duro del primero en el segundo. Aunque parezca una chorrada de ejemplo, en análisis forense se suele emplear este método muy habitualmente.
Para ello, primeramente hay que poner el equipo destino de los datos a escuchar en un puerto y decir dónde se van a "volcar" los datos. Para ello,
server> nc -l -p 4096 | dd of=/mnt/datos/sda1.img
Con lo citado ahora, todos los datos que sean recibidos por el puerto 4096 del equipo servidor tendrán como destino el fichero sda1.img, almacenado en /mnt/datos. Este fichero será la copia de todo el disco del cliente.
Desde el equipo cliente, el origen de los datos, hay ahora que enviarlos. Para hacer eso, únicamente tenemos que buscar la forma de sacar los datos, ya que será el propio netcat el que se encargue la parte del envío por red. Esto lo conseguimos,
client> dd if=/dev/sda1 | nc 192.168.0.150 4096
Una vez finalice el comando, todos los datos de la partición sda1 del equipo cliente estarán en una imagen de tipo lookback que podrá ser accedida y montada en cualquier momento en el equipo servidor. Si os fijáis, realmente lo que hacemos es sacar los datos del disco con el comando dd (if=...) y luego enviarlos por red, donde dd los vuelve a recoger (of=...).
Otro de los usos comunes que se le puede dar a netcat es el de obtener una shell en un equipo remoto. La idea en este caso es emplear netcat como servidor ssh. En el lado del "servidor netcat",
server> nc -l -p 2048 -e /bin/bash
Y por parte del cliente que establecerá la conexión,
client> nc 192.168.1.245 2048
Más información:
man netcat
Leer más