Tu servidor Linux está en funcionamiento y ahora quieres comprobar si un puerto específico está abierto para poder acceder a él de forma remota. Comprobar los puertos abiertos es una tarea bastante común para los administradores del sistema, y hay algunas formas diferentes de hacerlo en Linux.
En este artículo, aprenderás varias formas de comprobar si un puerto está abierto en Linux para que puedas elegir las que mejor funcionen para ti. ¿Listo? ¡Continúa leyendo!
Prerrequisitos
Este tutorial será una demostración práctica. Si quieres seguirlo, asegúrate de tener lo siguiente.
- A Linux computer. This guide uses Ubuntu 20.04, but any recent Linux distribution should work.
- Acceso a un terminal. Si utilizas un entorno de escritorio gráfico, busca un programa emulador de terminal en el menú de aplicaciones. O, si iniciaste sesión en un servidor remoto a través de SSH,
- A user account with
sudo
privileges. For simplicity, this tutorial uses the root user.
Comprobar si un puerto está abierto en Linux usando netstat
El primer método para comprobar si un puerto está abierto en Linux es ejecutando el comando netstat
. Este comando muestra las conexiones de red, las tablas de enrutamiento y muchas estadísticas de interfaces de red.
El comando netstat
es parte del paquete net-tools
, y este paquete puede no venir por defecto con tu distribución de Linux. En Ubuntu, instala netstat
ejecutando los siguientes comandos en el terminal.
Supongamos que tienes un servidor web NGINX en funcionamiento y quieres comprobar si el puerto 80
está abierto. Puedes hacerlo ejecutando el siguiente comando. Reemplaza 80
con el número de puerto que deseas verificar.
Las banderas -tulpn
instruyen a netstat
a mostrar todos los puertos en escucha. El primer comando grep
encuentra y filtra la línea que contiene la palabra LISTEN
en el resultado. El segundo comando grep
filtra los resultados para mostrar solo aquellos elementos que coinciden con :80
.
Para obtener más información sobre las banderas de netstat, ejecuta el comando netstat –help.
Si el puerto está abierto, verás la siguiente salida. Como puedes ver, la salida muestra que el puerto 80 está abierto en el sistema. tcp es el tipo de protocolo, y :::80
indica que es un puerto TCPv6. 0.0.0.0:80
significa que el puerto está abierto para todas las direcciones IPv4. 80
es el puerto HTTP predeterminado que proporciona acceso al sitio web.

Comprobando Si un Puerto está Abierto Usando ss
El comando ss
es otra utilidad de línea de comandos para verificar puertos abiertos. Este comando muestra estadísticas de socket, que puedes utilizar para confirmar si un puerto está abierto o no. El comando ss
muestra más información sobre los puertos abiertos que otras herramientas.
Al igual que el comando netstat
, la bandera -t
instruye a ss
para mostrar solo sockets TCP, -u
para mostrar solo sockets UDP, y -l
para mostrar solo sockets en escucha. La bandera -p
indica el nombre del proceso o PID que utiliza el puerto.
Verás la siguiente salida si el puerto está abierto. Como puedes ver, la salida contiene el nombre del proceso y el PID para cada puerto en escucha. En este caso, el puerto 80 está abierto y el servidor web NGINX lo está utilizando.

Verificando Si un Puerto Está Abierto Usando lsof
El comando lsof
es otra herramienta útil para verificar puertos abiertos. El nombre lsof
significa listar archivos abiertos, que muestra información sobre archivos que están abiertos en el sistema. Esta información incluye descriptores de archivos, IDs de proceso, IDs de usuario, etc.
¿Cómo ayuda listar archivos abiertos a determinar si un puerto está abierto? Probablemente ya hayas escuchado la frase “todo en Linux es un archivo”, y esta frase significa lo que dice.
Por ejemplo, supongamos que quieres verificar si el puerto 22 está abierto y tus usuarios pueden hacer SSH en tu servidor. Ejecuta el siguiente comando para listar archivos abiertos con conexiones activas en el puerto 22.
La bandera -i
indica a lsof
que muestre todos los sockets de Internet abiertos. La bandera -P
muestra los números de puerto en lugar de los nombres de servicio. Y la bandera -n
suprime las búsquedas de DNS y nombres de servicio, por lo que verás las direcciones IP en lugar de los nombres de host remotos.
Si el puerto está abierto, verás la siguiente salida. Como puedes observar, la salida contiene información sobre:
1027 es el ID de proceso del servicio sshd.
root es el ID de usuario que está utilizando el puerto.
3u y 4u son los descriptores de archivo para IPv4 e IPv6, respectivamente.
31035 y 31037 son los puertos de red para IPv4 e IPv6, respectivamente.
:22 indica que el puerto 22 está abierto para todas las direcciones IPv4 e IPv6.
- (LISTEN) muestra que el puerto está a la espera de conexiones entrantes.
0t0 es el estado del socket, lo que significa que el socket está en estado LISTEN.

Comprobación de si un puerto está abierto usando nmap
Hasta ahora, has visto cómo comprobar si un puerto está abierto en Linux usando la línea de comandos. Pero ¿qué pasa si quieres comprobar si un puerto está abierto en una máquina remota? En ese caso, puedes utilizar la herramienta nmap
.
Pero antes de ejecutar nmap
, ten en cuenta que esta herramienta puede no ser parte de los paquetes predeterminados en tu distribución de Linux. En ese caso, primero debes instalar nmap
ejecutando el siguiente comando.
Ahora, ejecuta el siguiente comando para verificar si un puerto está abierto en una máquina remota. Este comando prueba si el puerto 22
está abierto en 159.89.176.25
para que tu usuario pueda hacer SSH en tu servidor. Reemplaza la dirección IP según sea necesario con la tuya.
Como puedes ver, la salida contiene información sobre:
- El tiempo de inicio del escaneo de puertos (2022-06-30 16:58 UTC).
- La dirección IP de la máquina remota (159.89.176.25).
- El estado del puerto (abierto).
- El servicio que está utilizando el puerto (ssh).
- El estado del host (activo).

El resultado confirma que los usuarios pueden hacer SSH en la computadora usando la dirección IP y el puerto.
La captura de pantalla a continuación muestra una conexión SSH exitosa al servidor, demostrando que el puerto 22 está abierto.

Probando si un puerto está abierto desde un script de shell
La automatización siempre es una buena idea. Verificar puertos abiertos ejecutando un script de shell es una excelente manera de probar múltiples puertos. Puedes usar cualquier método anterior para verificar si un puerto está abierto. Pero, para este ejemplo, escribirás un script de shell básico que ejecuta el comando Netcat nc
.
1. Crea un archivo llamado check_port.sh en tu directorio de inicio usando tu editor de texto preferido. En este ejemplo se usa nano.
2. Copia el siguiente código de ejemplo en tu editor. Reemplaza 80 con el número de puerto que deseas verificar.
La condición if verifica si el puerto 80 está abierto usando el comando nc. El 2>&1 y >/dev/null redirigen los mensajes de error y de salida a /dev/null, respectivamente. /dev/null es un archivo especial que descarta todo lo que recibe.
Si el puerto está abierto, el script check_port.sh imprimirá en la consola “Online”. De lo contrario, el script imprimirá “Offline”.
El archivo de script debería lucir similar a la captura de pantalla a continuación. Guarda el script y cierra el editor.

3. Ejecuta el script de shell para comenzar a verificar los puertos abiertos que especificaste dentro del script.
Verás uno de los siguientes resultados dependiendo de si el puerto está abierto. En este caso, el puerto está abierto, lo que confirma el mensaje Online
.

Puedes usar este script de shell para verificar si un puerto está abierto en un intervalo o como una tarea programada. La creación de scripts es especialmente útil cuando tienes que verificar múltiples servidores. Solo necesitas copiar este script check_port.sh en todos los servidores que desees verificar y ejecutarlo utilizando herramientas de CI/CD como Jenkins o Ansible.
Comprobación Si un Puerto está Abierto Usando PowerShell
PowerShell tiene un cmdlet integrado para probar conexiones de red llamado Test-NetConnection
— pero ese cmdlet solo está disponible en sistemas Windows. No te preocupes; aún puedes usar PowerShell en Linux para verificar puertos abiertos y conexiones utilizando la clase TcpClient.
Si tu computadora Linux aún no tiene PowerShell, instálalo siguiendo las instrucciones en esta documentación de Microsoft: Instalar PowerShell en Linux.
1. Inicia PowerShell ejecutando el siguiente comando.

2. Luego, crea un archivo llamado Test-Port.ps1 usando tu editor de texto. Este ejemplo utiliza nano.
3. A continuación, copia el código a continuación en tu editor. Guarda el archivo y sal del editor después.
Nota: Este código es un extracto de la Herramienta de Prueba de Puertos Todo en Uno PowerShell.
4. Después de guardar el script Test-Port.ps1, ejecute el siguiente comando para probar los puertos 22, 80, 443 y 53.
El parámetro -NombreEquipo acepta la lista de nombres de host, FQDN o direcciones IP de la(s) máquina(s) objetivo.
El parámetro -Puerto acepta una matriz de uno o más números de puerto para probar.
Como se puede ver a continuación, el resultado muestra que los puertos 22 y 80 están abiertos (Verdadero), mientras que el puerto 443 no lo está (Falso).

Para ejecutar el mismo script contra múltiples puntos finales y puertos objetivo, edite el siguiente código para agregar todos los equipos objetivo en el parámetro NombreEquipo y los números de puerto en el parámetro Puerto.

Conclusión
En este artículo, has aprendido cómo verificar si un puerto está abierto o no en Linux. También has aprendido a verificar si un puerto está abierto desde un script de shell y PowerShell. Ahora, puedes usar cualquiera de estos métodos para verificar si un puerto está abierto en tu máquina o en cualquier máquina remota.
Sin embargo, no te detengas aquí. ¡Consulta otros artículos de solución de problemas para seguir perfeccionando tus habilidades como administrador del sistema!
Source:
https://adamtheautomator.com/check-if-a-port-is-open-in-linux/