Netcat es un comando disponible en todas las plataformas (Windows, Linux y MacOS) con el que podremos establecer conexiones entre dos máquinas, tras especificar una IP y un puerto.
Gracias a Netcat podremos comprobar si nuestro host A tiene acceso al host B antes de empezar a desplegar nuestros servicios, de forma que podamos solicitar al equipo de administración que habilite puertos o escriba las reglas de firewall necesarias para realizar nuestras tareas. En esta sencilla práctica vamos a utilizar el comando nc (que proviene de “netcat”) en dos máquinas diferentes para realizar dos tareas:
- Host A: Obtendrá un puerto escuchando.
- Host B: Enviará un requesto al host A en el puerto recién abierto.
Abriendo el puerto a escuchar en nuestra máquina A
Para ello vamos a utilizar el comando nc ya mencionado anteriormente, pero con dos opciones diferentes: -v para añadir más verbosidad y -l para indicar que vamos a configurar el puerto para escuchar conexiones entrantes.
La utilización de este comando sería: comando + opciones + IP desde la que admitiremos conexiones + puerto que queremos abrir. Para este caso, la IP será 0.0.0.0
ya que eso admitirá cualquier IP, pero no es buena práctica. Si vamos a hacer esto en entornos de producción se recomienda escuchar solamente la IP deseada.
En conclusión, este comando pone a escuchar el puerto X para los conexiones entrantes desde la IP Y.
Podemos ejecutarlo del siguiente modo:
nc -lv 0.0.0.0 445
P.D: En este caso permitimos todas las conexiones entrantes desde cualquier IP al puerto 445.
Conectar con el puerto remoto desde la máquina B
En este caso usaremos las opciones -z (que dirá a netcat que vamos a escanear un puerto) y -w (que indicará un timeout para no tener el servicio itentando conectar indefinidamente).
La utilización en este caso sería: comando + opciones + IP de destino + puerto de destino. Y podemos ejecutarlo del siguiente modo:
nc -zvw 3 192.168.1.110 445
P.D: Esta vez hemos supuesto que la IP de la máquina A era 192.168.1.110 y que el puerto abierto era el 445.
Resumen
Primero debemos de abrir el puerto en la máquina A, pero si obtenemos un error puede que sea que ese puerto ya esté en uso. Para comprobar esto, podemos usar el comando lsof -i -P -n | grep LISTEN
y ver si efectivamente dicho puerto ya está en uso.
En el caso de haber abierto el puerto correctamente, si luego no tenemos acceso desde la máquina B puede deberse a un error de red, y que no tengamos acceso a la máquina A. Para comprobar esto, podríamos hacer uso del comando ping
seguido de la IP deseada (ej: ping 192.168.1.110
y comprobar si efectivmamente tenemos o no acceso).
Si quieres saber más sobre el comando, no dudes en consultar la documentación oficial.
También puedes ver el video demo de este artículo en mi canal de YouTube.