
telnet No hay instalación y parece innecesario instalar paquetes adicionales solo para pruebas de conexión rápidas.La buena noticia es que no es necesario telnetporque La mayoría de las distribuciones de Linux Ya se incluyen herramientas para probar las conexiones de los puertos y algunas no requieren ninguna instalación adicional.
Ya sea que esté solucionando problemas mysql conectado, verifique si nginx escuchando el puerto 443o para verificar que los cambios en el firewall funcionan según lo esperado, estas herramientas pueden indicarle rápidamente lo que está sucediendo.
Por qué Telnet queda obsoleto al probar puertos en Linux
durante muchos años, telnet Es la forma estándar de comprobar si el puerto está abierto y acepta conexiones. Si desea comprobar si se puede acceder a un servidor web, base de datos o servicio de correo, telnet Por lo general, la gente intenta el primer comando.
Pero las cosas han cambiado y la mayoría de las distribuciones Linux modernas ya no se instalan. telnet De forma predeterminada, especialmente en implementaciones mínimas de servidor. Si ejecuta el comando hoy, normalmente verá un simple command not found información.
Incluso si se puede utilizar, telnet No siempre es la herramienta de resolución de problemas más útil. Puede indicarle si la conexión se realizó correctamente, pero aparte de eso, proporciona poca información.
Afortunadamente, Linux ofrece varias opciones mejores. Algunos ya están instalados en la mayoría de los sistemas, mientras que otros se pueden agregar mediante la instalación de un solo paquete. Estas herramientas no solo prueban la conectividad, sino que también brindan mensajes de error más claros, detalles de conexión y una solución de problemas más rápida si algo no funciona como se esperaba.
En las siguientes secciones, cubriremos la forma más práctica de probar puertos en un sistema Linux sin depender de telnet.
1. Utilice Bash /dev/tcp para probar los puertos abiertos
Si está trabajando con un servidor Linux mínimo y solo necesita una respuesta rápida a «¿Se puede llegar al puerto?«Bash tiene una función incorporada que puede ayudar. Proporciona un pseudodispositivo especial llamado /dev/tcp Le permite abrir conexiones TCP directamente desde el shell sin instalar ninguna herramienta adicional.
Ejecute el siguiente comando:
(echo >/dev/tcp/192.168.1.10/80) &>/dev/null && echo "Port open" || echo "Port closed"
Si la conexión es exitosa, verá:
Port open
Si el puerto está bloqueado, cerrado o inaccesible, verá:
Port closed
En este ejemplo, el comando intenta conectarse al puerto 80 existir 192.168.1.10lo cual es especialmente útil cuando inicias sesión en un servidor remoto que no tiene una herramienta similar telnet, CNCo mapa Instalar.
Por ejemplo, para probar si HTTPS Para acceder a los servicios en un sitio web remoto, ejecute:
(echo >/dev/tcp/example.com/443) &>/dev/null && echo "Port open" || echo "Port closed"
este /dev/tcp Esta función solo está disponible en Bash. Si su script se ejecuta bajo sh, dashu otro shell, el comando fallará incluso si /dev/tcp El camino parece existir.
Si no estás seguro de qué shell estás usando, ejecuta la prueba explícitamente a través de Bash:
bash -c '(echo >/dev/tcp/example.com/443) &>/dev/null && echo "Port open" || echo "Port closed"'
a pesar de /dev/tcp Sin proporcionar información detallada sobre la solución de problemas, es una de las formas más rápidas de verificar que un puerto TCP acepta conexiones y es ideal para una verificación rápida en servidores livianos o recientemente implementados.
Si esto le evita instalar paquetes innecesarios en sus servidores de producción, Quién todavía accede primero a telnet.
2. Utilice Netcat (nc) para comprobar los puertos abiertos
si /dev/tcp Se siente un poco demasiado básico Carolina del Norte (gato de Internet) A menudo, la siguiente herramienta que utiliza un administrador es liviana, fácil de usar y proporciona comentarios más útiles al solucionar problemas de conexiones de red.
gato de internet A menudo se le conoce como «Navaja suiza”red porque puede hacer de todo, desde probar puertos hasta transferir datos entre sistemas.
Para comprobar si el puerto está abierto, utilice -z Opción (E/S cero):
nc -zv 192.168.1.10 22
Ejemplo de salida:
Connection to 192.168.1.10 22 port [tcp/ssh] succeeded!
Este comando utiliza dos indicadores importantes:
-z: Realiza una prueba de conexión sin enviar ningún dato.-v: muestra resultados detallados para que puedas ver los resultados.
a diferencia de telnetsimplemente se conecta y te deja mirando una pantalla en blanco, Netcat Le indica inmediatamente si la conexión se realizó correctamente o falló.
Probemos un puerto sin ningún servicio en ejecución:
nc -zv 192.168.1.10 3306
Ejemplo de salida:
nc: connect to 192.168.1.10 port 3306 (tcp) failed: Connection refused
uno Conexión rechazada Los mensajes son en realidad información útil.
- El servidor de destino es accesible.
- La ruta de la red está funcionando.
- Actualmente no hay nada escuchando en este puerto.
Muchas distribuciones de Linux Ya incluido Netcatpero algunas instalaciones mínimas de servidor no lo hacen.
sudo apt install netcat-openbsd -y [On Debian, Ubuntu and Mint] sudo dnf install nmap-ncat -y [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
Después de la instalación, nc Se convierte en una de las herramientas de resolución de problemas más útiles en cualquier servidor Linux.
3. Utilice Nmap para escanear puertos abiertos
Cuando necesitas más que un simple «Abierto» o»cierre» respuesta, nmap es una herramienta que se puede utilizar porque es una de las herramientas de escaneo de red más populares y es ampliamente utilizada por administradores de sistemas, ingenieros de redes y profesionales de seguridad.
a diferencia de nc o carnaval /dev/tcp método, nmap Se pueden identificar servicios, detectar puertos filtrados y proporcionar una imagen más clara de lo que está sucediendo en el sistema remoto.
si nmap Aún no está instalado, puede agregarlo usando el Administrador de paquetes.
sudo apt install nmap -y [On Debian, Ubuntu and Mint] sudo dnf install nmap -y [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
Para comprobar si el puerto 80 está abierto en el servidor, ejecute:
nmap -p 80 192.168.1.10
Ejemplo de salida:
Starting Nmap 7.93 ( ) Nmap scan report for 192.168.1.10 Host is up (0.00023s latency). PORT STATE SERVICE 80/tcp open http Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
La columna más importante aquí es estado:
| estado | significado |
|---|---|
| Abierto | El servicio está escuchando y aceptando conexiones. |
| cierre | Se puede acceder al host, pero no hay ningún servicio escuchando en el puerto. |
| filtrado | El firewall bloquea el análisis, por lo que Nmap no puede determinar el estado del puerto. |
También puede escanear una variedad de puertos con un solo comando:
nmap -p 20-25 192.168.1.10
Ejemplo de salida:
PORT STATE SERVICE 20/tcp closed ftp-data 21/tcp closed ftp 22/tcp open ssh 23/tcp closed telnet 24/tcp closed priv-mail 25/tcp closed smtp
Una de las características más útiles de Nmap es la detección de versiones, simplemente agregue -sV opción, Nmap intentará identificar el software que se ejecuta detrás de un puerto abierto.
nmap -p 22 -sV 192.168.1.10
En lugar de simplemente informar el puerto 22 Cuando está activado, Nmap puede reconocer Versión del servidor SSH y otros detalles del servicio.
4. Utilice Curl para probar los puertos HTTP y HTTPS
Cuando estás solucionando problemas en un servidor web, no siempre es suficiente saber que un puerto está abierto. Un puerto puede aceptar conexiones cuando la aplicación web detrás del puerto devuelve un error, proporciona contenido incorrecto o falla por completo.
eso esta ahí curl llegar a ser útil.
a diferencia de nc o /dev/tcp, curl No solo probar conexiones TCP. En realidad, envía una solicitud HTTP y muestra cómo responde el servidor web, lo que la convierte en una de las mejores herramientas para verificar puertos. 80 (HTTP) y 443 (HTTPS).
Para probar un servidor web escuchando en el puerto 80, ejecute:
curl -v --max-time 5
Ejemplo de salida:
* Trying 192.168.1.10:80... * Connected to 192.168.1.10 (192.168.1.10) port 80 (#0) > GET / HTTP/1.1 > Host: 192.168.1.10 > User-Agent: curl/7.88.1 > Accept: */* >To check a secure web server on port 443, use:
curl -v --max-time 5Si el servicio HTTPS funciona correctamente, verá los detalles de la negociación SSL seguidos de los encabezados de respuesta HTTP.
Si esto elimina "rechazar" y"se acabó el tiempo"Para ti, ¿Quién sigue adivinando sobre las reglas del firewall?
5. Verifique la conectividad del puerto usando Python
Si necesita verificar el puerto desde el script, Pitón Es una buena opción, la mayoría de las distribuciones de Linux ya lo incluyen y su módulo de socket incorporado facilita las pruebas de puertos.
Este método es particularmente útil cuando crea comprobaciones de estado de ejecución, scripts de verificación de implementación o herramientas de monitoreo simples.
Para probar un solo puerto, ejecute:
python3 -c "import socket; s=socket.socket(); s.settimeout(3); result=s.connect_ex(('192.168.1.10', 5432)); print('open' if result == 0 else 'closed'); s.close()"Ejemplo de salida:
openEn este ejemplo, Python intenta conectarse al puerto 5432que es comúnmente utilizado por PostgreSQL.
Algunas cosas están sucediendo detrás de escena:
socket.socket()Establezca un socket TCP.settimeout(3)Limite los intentos de conexión a tres segundos.connect_ex()Intente cablear y devolver un código de estado en lugar de generar una excepción.- El valor devuelto es
0Indica una conexión exitosa.
En un entorno real, a menudo es necesario verificar varios servicios después de la implementación. Por ejemplo, es posible que desees confirmar SSH, protocolo HTTPy mysql Todos son accesibles.
El siguiente script comprueba múltiples combinaciones de host y puerto:
python3 {status}")
s.close()
EOF
Ejemplo de salida:
192.168.1.10:22 -> open 192.168.1.10:80 -> open 192.168.1.10:3306 -> closed
Esto recorrerá el inventario de pares de host/puerto e imprimirá el estado de cada par de host/puerto, que es exactamente lo que desea en un inventario previo a la implementación o una simple verificación del tiempo de actividad en un trabajo cron.
Cuándo usar qué herramienta
Aquí hay una referencia rápida para elegir la herramienta adecuada:
| Condición | Herramientas recomendadas |
|---|---|
| No se requiere instalación adicional, solo una respuesta rápida de sí o no | /dev/tcp en un fuerte golpe |
| Comprobaciones TCP rápidas con tiempos de espera | nc -zv -w 3 |
| Es necesario distinguir entre puertos abiertos, puertos filtrados y puertos cerrados. | nmap |
| Probando HTTP/HTTPS y quiero ver códigos de respuesta | curl |
| Escribir un guión o un control de salud. | Pitón socket módulo |
Si esta comparación le ayuda a elegir la herramienta adecuada la primera vez, Quien instala paquetes solo para probar puertos.
en conclusión
Hay algunas formas sencillas de probar la conectividad de puertos en Linux sin utilizar telnet. Para ver estas herramientas en acción, intente probar el servicio ejecutándose en su propio sistema. Por ejemplo, si SSH está habilitado, puede verificar el puerto 22 usando el siguiente comando:
nc -zv -w 3 localhost 22
Deberías ver que la conexión se realiza correctamente casi de inmediato. Luego pruebe un puerto sin un servicio escuchando y compare los resultados. A continuación se muestra una forma sencilla de comprender la diferencia entre puertos abiertos, conexiones denegadas y puertos filtrados.
¿Alguna vez ha estado en una situación en la que una herramienta le dio resultados diferentes a la otra? Esto normalmente indica que el firewall está involucrado de una manera no obvia. Deja lo que ves en los comentarios y arreglémoslo juntos..
Si este artículo fue útil, Con alguien de tu equipo.









