Cómo verificar si un puerto está abierto en Mac

Aprende cómo verificar si un puerto específico está abierto en tu Mac o en un servidor remoto usando comandos de Terminal y herramientas con interfaz gráfica.

escaneo-puertos macos redes desarrollador

Estás intentando conectarte a un servicio y no funciona. Quizás estás configurando un servidor, depurando una aplicación, o simplemente tratando de entender por qué algo no carga. Una de las primeras preguntas a responder: ¿el puerto está realmente abierto?

Verificar el estado de un puerto en macOS no es complicado, pero hay varias formas de hacerlo dependiendo de lo que estés tratando de lograr.

Qué son los puertos y por qué importan

Cada servicio de red se ejecuta en un puerto. Cuando visitas un sitio web, tu navegador se conecta al puerto 80 (HTTP) o 443 (HTTPS). SSH usa el puerto 22. MySQL usa 3306. El correo electrónico usa varios puertos dependiendo del protocolo.

Un puerto “abierto” significa que algo está escuchando en él, listo para aceptar conexiones. Un puerto “cerrado” no tiene nada escuchando. Un puerto “filtrado” podría tener algo escuchando, pero un firewall está bloqueando el acceso.

Cuando una conexión falla, conocer el estado del puerto reduce las posibilidades del problema. Si el puerto está cerrado, el servicio no está ejecutándose. Si está filtrado, hay un problema de firewall. Si está abierto pero la conexión aún falla, el problema está en otro lugar.

Verificar puertos en tu propio Mac

Para ver en qué puertos tu Mac está escuchando, usa netstat:

netstat -an | grep LISTEN

Esto muestra todos los puertos en escucha. La salida incluye direcciones locales como *.80 (escuchando en el puerto 80 en todas las interfaces) o 127.0.0.1.3000 (escuchando en el puerto 3000 pero solo para conexiones localhost).

Para una vista más limpia de qué procesos poseen qué puertos:

sudo lsof -iTCP -sTCP:LISTEN -n -P

Esto requiere sudo porque algunos procesos se ejecutan como root. La salida muestra el nombre del proceso, PID y en qué puerto está escuchando. Si quieres saber qué está usando el puerto 3000 específicamente:

sudo lsof -iTCP:3000 -sTCP:LISTEN -n -P

Verificar puertos en servidores remotos

Para verificar si un puerto está abierto en otra máquina, necesitas intentar conectarte a él. La herramienta más simple es nc (netcat):

nc -zv hostname 80

La opción -z le dice a nc que solo escanee sin enviar datos. La opción -v lo hace verboso para que veas el resultado. Si el puerto está abierto, verás “Connection to hostname port 80 succeeded!” Si está cerrado o filtrado, verás un mensaje de fallo o timeout.

Puedes escanear un rango de puertos:

nc -zv hostname 20-25

Esto verifica los puertos 20 al 25. La salida muestra cuáles respondieron.

Para una verificación más rápida de un solo puerto, también puedes usar el truco de /dev/tcp en bash:

(echo >/dev/tcp/hostname/80) &>/dev/null && echo "Abierto" || echo "Cerrado"

Esto es menos legible pero más rápido para scripting.

Usando telnet

Telnet es otra opción, aunque es más interactivo:

telnet hostname 80

Si el puerto está abierto, verás “Connected to hostname.” Presiona Ctrl+] luego escribe “quit” para salir. Si el puerto está cerrado, verás “Connection refused.” Si está filtrado, el comando se quedará esperando hasta que agote el tiempo.

Telnet no está instalado por defecto en versiones más nuevas de macOS. Puedes instalarlo a través de Homebrew:

brew install telnet

La mayoría de las personas prefieren nc porque viene integrado y es más flexible.

Usando nmap

Para escaneo de puertos serio, nmap es la herramienta estándar. No está instalado por defecto, pero puedes obtenerlo a través de Homebrew:

brew install nmap

Uso básico:

nmap hostname

Esto escanea los 1000 puertos más comunes e informa su estado. Para un puerto específico:

nmap -p 80 hostname

Para un rango:

nmap -p 1-1000 hostname

Nmap proporciona información más detallada que nc, incluyendo detección de servicios e identificación de versiones. Es excesivo para verificar un solo puerto pero valioso para escaneo completo.

Ten en cuenta que el escaneo de puertos puede parecer un ataque. No escanees sistemas que no posees o para los que no tienes permiso de probar. Los ISP y proveedores de hosting pueden marcarte o bloquearte por escanear sus redes.

Puertos comunes a verificar

Al solucionar problemas, estos son los puertos que verificarás más frecuentemente:

El puerto 22 es SSH. Si no puedes conectarte por SSH a un servidor, verifica esto primero.

El puerto 80 es HTTP y el puerto 443 es HTTPS. Los problemas de servidor web a menudo comienzan aquí.

Los puertos 3000, 3001, 8000, 8080 son puertos comunes de servidores de desarrollo. Si tu entorno de desarrollo local no carga, uno de estos probablemente sea relevante.

El puerto 3306 es MySQL, el puerto 5432 es PostgreSQL, el puerto 27017 es MongoDB. Los problemas de conexión a bases de datos a menudo se reducen a estos puertos estando cerrados o no expuestos.

El puerto 25 es SMTP para envío de correo electrónico. Si tu aplicación no puede enviar correo, esto podría estar bloqueado.

Firewalls y filtrado

macOS tiene un firewall integrado, pero a menudo está deshabilitado por defecto. Verifica Configuración del Sistema > Red > Firewall (o Configuración del Sistema > Privacidad y Seguridad > Firewall en algunas versiones de macOS) para ver si está activado.

Cuando el firewall está habilitado, bloquea conexiones entrantes a puertos que no tienen reglas explícitas. Tu Mac aún puede hacer conexiones salientes, pero otras máquinas no pueden conectarse a servicios que estés ejecutando a menos que los permitas.

Si estás ejecutando un servidor local para desarrollo y no puedes conectarte desde otro dispositivo en tu red, el firewall es el probable culpable. Ya sea deshabilitarlo temporalmente o agregar una regla para permitir el puerto específico.

Los servidores remotos tienen sus propios firewalls. Proveedores de nube como AWS, Google Cloud y Azure usan grupos de seguridad o reglas de firewall que deben permitir explícitamente el tráfico en cada puerto. Un servicio puede estar ejecutándose y escuchando, pero si el firewall bloquea el puerto, las conexiones externas fallarán.

Interpretando resultados

Conexión exitosa / Puerto abierto: Algo está escuchando. Si aún no puedes usar el servicio, el problema es con la autenticación, el protocolo o el servicio en sí.

Conexión rechazada: Nada está escuchando en ese puerto. Ya sea que el servicio no está ejecutándose o está configurado para escuchar en un puerto diferente.

Conexión agotada / Sin respuesta: Probablemente un firewall está bloqueando el puerto. Los paquetes están siendo descartados en lugar de rechazados.

Host inalcanzable: La máquina en sí no es alcanzable. Este es un problema de enrutamiento, no un problema de puerto.

Alternativas con interfaz gráfica

La aplicación Utilidad de Red que Apple eliminó en Big Sur tenía una función de escaneo de puertos. Ingresabas un hostname y rango de puertos, hacías clic en Escanear, y veías los resultados en una lista. Simple y efectivo, pero ya no está disponible.

NetUtil incluye un escáner de puertos que funciona de manera similar. Ingresa un host, especifica los puertos a escanear, y ve los resultados en una tabla. Maneja los casos comunes sin requerir conocimiento de línea de comandos.

Para desarrolladores que verifican puertos regularmente, una herramienta con interfaz gráfica ahorra tiempo. No tienes que recordar sintaxis ni analizar salida de texto. Para verificaciones puntuales, nc en Terminal funciona bien.

Ejemplos prácticos

Tu servidor web no responde: Verifica los puertos 80 y 443 en el servidor. Si están cerrados, el proceso del servidor web no está ejecutándose o no está enlazado a esos puertos. Si están abiertos, revisa los logs del servidor.

No puedes conectarte a tu base de datos: Verifica el puerto de la base de datos (3306 para MySQL, 5432 para Postgres, etc.). También verifica si la base de datos está configurada para aceptar conexiones remotas. Muchas bases de datos tienen localhost como predeterminado.

Tu servidor de desarrollo local no carga en tu teléfono: Verifica si el puerto está abierto en tu Mac y si el firewall permite conexiones. También asegúrate de estar usando la dirección IP local de tu Mac, no localhost.

SSH sigue agotando el tiempo: Verifica el puerto 22. Si agota el tiempo en lugar de rechazar la conexión, probablemente hay un firewall en el camino. Podría ser tu ISP, el proveedor de hosting del servidor, o una configuración de grupo de seguridad.

Verificar puertos es depuración de red básica. Una vez que sabes si el puerto está abierto, cerrado o filtrado, sabes dónde enfocar tu solución de problemas.