Muchas veces nos preguntamos como puedo saber si un puerto o un servicio esta activo en un servidor remoto o incluso en nuestra maquina local, para buscar la respuesta, procedemos a instalar herramientas adicionales que por desconocimiento de alternativas, no usamos las que posiblemente tenemos en nuestros sistemas operativos, y obtener el mismo resultado.
Para esta entrada insisto, existen muchas opciones o tenemos diferentes alternativas de como revisar si un puertos se encuentra abiertos en nuestra sistema remoto o local, y las que tenemos disponible por defecto en nuestros sistema operativo GNU/Linux son suficiente, por lo cual no instale mas paquetes que aumenten los riesgos en nuestro sistema o incluso pongan el equipo mas pesado, !como lo encontré un unos servidores de un cliente!
En este ejemplo usaremos el servidor remoto ebolges.con y la ip 192.168.100.1, es indiferente si usamos la IP o el nombre de domino, lo importante es que usted debe cambiarlo por la del servidor remoto que quiera verificar, advertencia, en caso de copiar y pegar, el nombre pc_local$ no es parte de los comandos y recuerda remplaza la dirección IP.
Sin mas preámbulos, mi primera opción es con el comando nc o Netcat
La sintaxis del comando seria: pc_local$ nc -zv servidor puerto Como ejemplo, imaginemos que queremos saber si el puerto 80 esta abierto o en escucha en el equipo remoto con la ip 192.168.100.1 pc_local$ nc -zv 192.168.100.1 80 Connection to 192.168.100.1 port 80 [tcp/http] succeeded! Lo importante de esta herramienta "como todo una navaja suiza" es que ademas de hace revisiones por defecto por tcp, nos permite cambiarlo el protocolo a udp simplemente agregándole al comando la opción -u pc_local$ nc -zv -u 192.168.100.1 80 Connection to 192.168.100.1 port 80 [udp/http] succeeded! Todo junto como todo linuxero y como en realidad lo hago pc_local$ nc -zvu 192.168.100.1 80 Connection to 192.168.100.1 port 80 [udp/http] succeeded!
Como pudieron observar, la herramienta nc es muy útil y ademas versátil, por lo cual, no esta demás que entremos al manual del sistema (man nc) y revisar sus opciones, porque nos permitirá hacer muchas otras travesuras cosas
Con el comando traceroute, simplemente le agregamos la opción -p para indicarle el puerto, ojo la P mayúscula es para el protocolo.
La sintaxis del comando seria: pc_local$ traceroute -p puerto servidor pc_local$ traceroute -p 80 192.168.100.1 1 192.168.100.1 (192.168.100.1) 0.950 ms 0.576 ms 0.561 ms
La que más me gusta, porque no uso nada mas que el mismo bash, y por lo apasionado que soy usando el interprete.
La sintaxis del comando esta compuesta por el comando echo, los pseudo-device, las redirecciones, operadores lógicos y las tuberías quedando: echo >/dev/tcp/Servidor/Puerto, usted puede cambiar el protocolo, al final, bash abrirá una conexión con el protocolo indicado asociándolo a un socket, utilizamos los operadores AND y OR para tener una respuestas clara.
pc_local$ (echo >/dev/tcp/192.168.100.1/80) &>/dev/null && echo "Abierto" || echo "Cerrado
Otra herramienta que nos permite revisar los puertos abiertos de un servidor remoto es nmac, conozco personas que quieren hacerlo todo con esta herramientas, aunque no esta por defecto en la mayoría de las distribuciones o derivados de *nix, tendrás que instalarla y es la razón por lo cual no la coloque de primero.
La sintaxis del comando seria: pc_local$ nmap servidor -p puerto pc_local$ nmap 192.168.100.1 -p 80 Lo anterior nos traerá mucha otra información que podemos resumir con una tubería, complementándolo con el comando grep y lo que queremos, por ejemplo, podemos indicarle que solo nos muestre resultados de un determinado protocolo tcp, udp, etc. pc_local$ nmap 192.168.100.1 -p 80 | grep tcp
Como como ver todo los puertos o socket abierto en mi servidor o pc Mostrar todas las conexiones actuales pc_local$ netstat putanl mostrar todos las conexiones remotas pc_local$ ss -t dst 192.168.100.1:80 Mostrar todas las conexiones ssh activa, entrantes y salientes pc_local$ ss -t state established '( dport = :ssh or sport = :ssh )'
Ademas de la anteriores, listare otras herramientas, aunque no están por defecto en las mayoría de las distribuciones, igual podemos utilizar y los dejare con algunas notas que le pueden ser de ayuda:
nping --tcp -p 80 192.168.100.1
telnet 192.168.100.1 80
Notas adicionales que le pueden ayudar.
Nota 1, Simulando una repuesta a un navegador web, por el puerto 8888, pero imagino que usted usare el puerto 80
Paso 1. pc_local$ echo -en 'HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\<h1>Respondiendo al cliente web que se conecte por el puerto 8888 a mi equipo</h1>'|nc -l 8888
Paso 2. navegador_remoto: http://127.0.0.1:8888
Nota 2, transfiriendo (Enviando y recibiendo) archivos solos con el comando nc
Paso 1 desde el pc que quieres enviar el archivo: cat file.txt | nc -l 2222
Paso 2, desde el pc que recibirá el archivo: nc 127.0.0.1 2222 > file.txt
Nota 3, conectarme al router por el puerto 23, simulando una conexión telnet
nc 192.168.100.1 23
Como hacerle ping a un puerto 😀 🥰