En mis actividades diarias normalmente tengo que comprobar la conectividad entre dos máquinas. En este post explicaré cuál es el método que uso para hacerlo.

¿Qué es Netcat?

Netcat (A menudo abreviado a nc) es una herramienta capaz de establecer conexiones TCP entre dos máquinas, también es utilizado para leer o escribir en las conexiones de red. Como tiene muchas funcionalidades, normalmente es utilizada como una herramienta e debugging e investigación.

Comandos para chequear conexiones

Chequeo básico de conexiones TCP

El comando más básico es usar netcat (nc) para establecer una conexión TCP. La info que necesita es la dirección IP o el dominio y el puerto TCP.

root|lavrea:~$ nc 64.13.192.208 25
220 cl03.gs01.gridserver.com ESMTP Exim 4.94.2 Wed, 20 Jul 2022 13:07:50 -0700
^C
root|lavrea:~$ 

Aquí ves la respuesta de la otra máquina, y la conexión es establecida hasta que la cierras con un Ctrl+C o expira el timeout.

Comprobación avazanda de conexiones TCP

Este es un método más avanzado, en el que se añaden algunos parámetros adicionales al comando.

  • -w es utilizado para establecer el tiempo (en segundos) para esperar una conexión.
  • -v es utilizado para dar información en modo verbose.
  • -z es utilizado para solo escanear puertos abiertos, sin enviarles datos.

El formato debería de ser como esto:

nc -w 1 -vz <MÁQUINA O IP> <PUERTO TCP>

Éste es mi comando favorito para comprobar conexiones TCP. Aquí tienes un ejemplo de una conexión satisfactoria:

root|lavrea:~$ nc -w 1 -vz 64.13.192.208 25
Connection to 64.13.192.208 25 port [tcp/smtp] succeeded!
root|lavrea:~$

Un ejemplo de una conexión fallida:

root|lavrea:~$ nc -w 1 -vz ophelia.ga 5000
nc: connect to ophelia.ga port 5000 (tcp) failed: Connection refused
root|lavrea:~$

Así que con esta herramienta es fácil comprobar si una conexión TCP está funcionando o no.

Escaneo de puertos TCP

Si necesitas comprobar varios puertos de una máquina, hay una opción para comprobar una lista de puertos, que te hace la vida más sencilla.

nc -w 1 -vz <MÁQUINA O IP> <PRIMER PUERTO>-<ÚLTIMO PUERTO>

Un ejemplo para comprobar puertos TCP entre 20 y 25:

root|lavrea:~$ nc -w 1 -vz ophelia.ga 20-25
nc: connect to ophelia.ga port 20 (tcp) failed: Connection refused
nc: connect to ophelia.ga port 21 (tcp) failed: Connection refused
Connection to ophelia.ga 22 port [tcp/ssh] succeeded!
nc: connect to ophelia.ga port 23 (tcp) failed: Connection refused
nc: connect to ophelia.ga port 24 (tcp) failed: Connection refused
Connection to ophelia.ga 25 port [tcp/smtp] succeeded!
root|lavrea:~$ 

También podrías comprobar una lista de puertos no consecutivos:

root|lavrea:~$ nc -w 1 -vz ophelia.ga 20 22 550 3212
nc: connect to ophelia.ga port 20 (tcp) failed: Connection refused
Connection to ophelia.ga 22 port [tcp/ssh] succeeded!
nc: connect to ophelia.ga port 550 (tcp) failed: Connection refused
nc: connect to ophelia.ga port 3212 (tcp) failed: Connection refused
root|lavrea:~$

Conclusión

Netcat is una herramienta muy potente que podría ser útil para debbugear problemas de conectividad. Quizás en un post más tarde explicaré cómo utilizar para otros propósitos.