Cómo comprobar los puertos en uso en Linux

Saber si un servicio está escuchando en un puerto determinado es una de las primeras comprobaciones que hace cualquier sysadmin ante una incidencia. ¿El servicio arrancó? ¿Está el puerto abierto? ¿Es un problema de red o de firewall? Esta guía cubre las herramientas actuales para responder esas preguntas, tanto en local como en remoto.

Nota: netstat forma parte del paquete net-tools, considerado obsoleto y no instalado por defecto en RHEL 9+, Ubuntu 22.04+ y la mayoría de distribuciones modernas. Su reemplazo oficial es ss, mucho más rápido y con mejor soporte para IPv6 y sockets Unix. Si buscas netstat en tus servidores nuevos y no aparece, es normal.


Antes de tirar de tcpdump: ¿qué está escuchando en local?

El primer paso, antes de ir a la red, es confirmar en el propio servidor qué puertos están activos y qué proceso los tiene abiertos.

ss — el reemplazo moderno de netstat

ss (socket statistics) es la herramienta de referencia actual para inspeccionar el estado de los sockets en Linux.

# Ver todos los puertos TCP y UDP en escucha, con PID y nombre del proceso
ss -tulpn

Salida de ejemplo:

Netid  State   Recv-Q  Send-Q  Local Address:Port   Peer Address:Port  Process
tcp    LISTEN  0       128     0.0.0.0:22            0.0.0.0:*          users:(("sshd",pid=987,fd=3))
tcp    LISTEN  0       511     0.0.0.0:80            0.0.0.0:*          users:(("nginx",pid=1234,fd=6))
tcp    LISTEN  0       100     0.0.0.0:3306          0.0.0.0:*          users:(("mysqld",pid=2001,fd=21))
udp    UNCONN  0       0       0.0.0.0:68            0.0.0.0:*          users:(("dhclient",pid=512,fd=5))

Opciones más usadas:

OpciónSignificado
-tSockets TCP
-uSockets UDP
-lSolo los que están en LISTEN
-pMuestra el proceso y PID
-nNo resuelve nombres (más rápido)

Para filtrar por un puerto concreto, por ejemplo el 3181 de BMC Patrol:

ss -tulpn | grep 3181

O usando la opción de filtro nativa:

ss -tulpn 'sport = :3181'

Si no aparece nada, el servicio no está escuchando — el problema es del proceso, no del firewall.


lsof -i — ver qué proceso tiene abierto un puerto

lsof (list open files) es otra herramienta clásica que sigue siendo muy útil para identificar el proceso propietario de un socket:

# Todos los sockets de red abiertos
lsof -i

# Solo TCP, filtrado por puerto
lsof -i TCP:3181

# Ver quién tiene el puerto 80
lsof -i :80

Salida de ejemplo:

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx    1234    root   6u   IPv4  23456      0t0  TCP *:http (LISTEN)
nginx    1235  nobody   6u   IPv4  23457      0t0  TCP *:http (LISTEN)

Muy útil cuando tienes un puerto ocupado y necesitas el PID exacto para matar el proceso o investigar:

lsof -i :8080 | awk 'NR>1 {print $2}' | sort -u

fuser — identificar el PID de un puerto rápidamente

Menos conocido pero muy directo para scripting:

# ¿Qué proceso usa el puerto 443 TCP?
fuser 443/tcp

# Con nombre de proceso y usuario
fuser -v 443/tcp

Verificar conectividad remota al puerto

Una vez confirmado que el servicio escucha localmente, el siguiente paso es comprobar si es accesible desde fuera. Aquí es donde telnet ha quedado obsoleto — nc (netcat) es la herramienta estándar en 2026.

nc (netcat) — test de conectividad a un puerto remoto

nc es la navaja suiza de la conectividad de red. Para un test básico de puerto:

# ¿Está el puerto 3181 accesible en el servidor remoto?
nc -zv <servidor> 3181

La opción -z activa el modo de escaneo (no envía datos), -v da salida verbosa.

Salida si el puerto está abierto:

Connection to 192.168.1.50 3181 port [tcp/*] succeeded!

Salida si está cerrado o filtrado:

nc: connect to 192.168.1.50 port 3181 (tcp) failed: Connection refused

Nota sobre variantes de netcat: Hay tres implementaciones habituales en Linux: nc (OpenBSD, presente en Ubuntu/Debian por defecto), ncat (parte del paquete nmap, más potente y con soporte SSL) y nc.traditional (GNU netcat). La sintaxis básica de -zv funciona en todas. Si tu sistema no tiene nc, instala nmap para obtener ncat:

# Debian/Ubuntu
apt install ncat
# RHEL/CentOS/Fedora
dnf install ncat

Añadir timeout para no quedarse esperando indefinidamente:

# Timeout de 5 segundos
nc -zv -w5 <servidor> 3181

Probar un rango de puertos:

nc -zv <servidor> 3180-3185

Para UDP (recuerda que el comportamiento es diferente — los puertos UDP cerrados devuelven ICMP, los abiertos simplemente no responden):

nc -zuv <servidor> 161

nmap — cuando necesitas más detalle

nmap va más allá del simple test de conectividad. Es especialmente útil cuando quieres verificar varios puertos a la vez o necesitas más información:

# Verificar si el puerto 3181 está abierto
nmap -p 3181 <servidor>

# Escanear puertos específicos y detectar el servicio
nmap -sV -p 22,80,443,3181 <servidor>

# Comprobar los puertos más comunes (útil en troubleshooting inicial)
nmap --top-ports 20 <servidor>

Salida de ejemplo:

PORT     STATE  SERVICE
3181/tcp open   bmcpatrol

Si el estado es filtered, hay un firewall bloqueando. Si es closed, el puerto es accesible pero no hay nada escuchando.


Contexto: puertos en entornos Docker y Kubernetes

Cuando trabajas con contenedores, el comportamiento de las herramientas cambia según dónde las ejecutes.

Dentro de un contenedor Docker

ss y lsof dentro de un contenedor solo ven los sockets del namespace de red del contenedor:

docker exec -it <nombre_contenedor> ss -tulpn

Para ver los puertos expuestos del contenedor desde el host:

docker port <nombre_contenedor>

Desde el host, en el namespace del contenedor

Si necesitas usar ss o lsof con visibilidad completa del proceso dentro del contenedor:

# Obtener el PID del proceso principal del contenedor
PID=$(docker inspect --format '{{.State.Pid}}' <nombre_contenedor>)

# Ejecutar ss en el namespace de red del contenedor
nsenter -t $PID -n ss -tulpn

En Kubernetes

Para hacer un test de conectividad a un puerto de un pod desde otro pod:

kubectl exec -it <pod-origen> -- nc -zv <ip-pod-destino> 3181

O usando el nombre del servicio:

kubectl exec -it <pod-origen> -- nc -zv <nombre-servicio> 80

Flujo de diagnóstico recomendado

Cuando un servicio no responde, sigue este orden:

  1. ¿El servicio está escuchando en local?ss -tulpn | grep <puerto>
  2. ¿Qué proceso tiene el puerto?lsof -i :<puerto>
  3. ¿Es accesible desde fuera?nc -zv <servidor> <puerto>
  4. ¿Necesito más detalle?nmap -p <puerto> <servidor>
  5. ¿Hay tráfico llegando?tcpdump -i eth0 port <puerto> (ver artículo relacionado)
Flujo de diagnóstico de puertos en Linux Diagrama de flujo para diagnosticar problemas de puertos: desde verificar escucha local hasta captura de tráfico con tcpdump ¿El servicio escucha en local? ss -tulpn | grep <puerto> Escucha ¿Qué proceso tiene el puerto? lsof -i :<puerto> Proceso OK ¿Accesible desde fuera? nc -zv <servidor> <puerto> No llega ¿Firewall bloqueando? nmap -p <puerto> <servidor> Puerto open ¿Hay tráfico llegando? tcpdump -i eth0 port <puerto> Problema de proceso/servicio No escucha Revisar reglas de firewall Filtered Verificación Análisis de red Captura de tráfico Problema detectado Haz clic en cada paso para profundizar

Resumen de herramientas

HerramientaUso principalInstalada por defecto
ssVer puertos en escucha en localSí (iproute2)
lsof -iIdentificar proceso/PID por puerto
fuserPID de un puerto, scriptingSí (psmisc)
nc / ncatTest de conectividad remotaCasi siempre
nmapEscaneo de puertos, detección de serviciosNo (instalar)
netstatObsoleto, no usar en sistemas nuevosNo
telnetObsoleto para tests de puerto, no usarNo

Artículos relacionados


Actualizado en 2026. Herramientas verificadas en Ubuntu 24.04 LTS, RHEL 9 y Debian 12.

Un comentario en «Cómo comprobar los puertos en uso en Linux»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies