Cómo ver puertos abiertos en Windows, Mac y Linux
En pocas palabras: En Windows se corre netstat -ano | findstr LISTENING o Get-NetTCPConnection -State Listen en PowerShell; en Mac, sudo lsof -iTCP -sTCP:LISTEN -n -P; en Linux, sudo ss -tulpn. Un puerto en 0.0.0.0 o [::] puede ser alcanzable desde otros equipos; conviene cerrarlo con el firewall si no se usa.
Para ver puertos abiertos en Windows corrés netstat -ano | findstr LISTENING en la consola o Get-NetTCPConnection -State Listen en PowerShell: ambos comandos listan qué programa escucha en cada puerto junto con su PID, según detalla la documentación oficial de netstat en Microsoft Learn. En Mac se usa lsof, en Linux ss.
Un puerto abierto es un número entre 0 y 65535 en el que un programa espera conexiones de red, locales o remotas. Windows, macOS y Linux traen herramientas nativas (netstat, PowerShell con Get-NetTCPConnection, lsof y ss) que listan esos puertos en escucha junto con el proceso, el PID y la dirección de red donde aceptan tráfico. El dato que de verdad importa no es la lista en sí, sino la pregunta que viene después: ¿ese puerto acepta tráfico de cualquier lado o solo de tu propia máquina? La respuesta cambia la decisión por completo.
En este artículo:
- En 30 segundos
- ¿Qué diferencia hay entre un puerto LISTENING, ESTABLISHED y uno en TIME_WAIT?
- ¿Cómo saber si un puerto es alcanzable desde otros dispositivos o solo local?
- ¿Cómo decidís si cerrás un puerto o lo dejás como está? Criterios prácticos
- ¿Cómo ver los puertos abiertos en Windows con netstat y PowerShell?
- ¿Qué puertos están abiertos normalmente en una PC con Windows?
- ¿Cómo ver los puertos abiertos en Mac con lsof?
- ¿Cómo ver los puertos abiertos en Linux con ss?
- ¿Cómo saber si un puerto es alcanzable desde otro equipo de la red o desde internet?
- ¿Cómo cerrar o bloquear un puerto que no necesitás en Windows, Mac y Linux?
- Errores comunes al revisar puertos abiertos
- Preguntas Frecuentes
- Conclusión
- Fuentes
En 30 segundos
- En Windows:
netstat -ano | findstr LISTENINGoGet-NetTCPConnection -State Listenen PowerShell muestran los puertos en escucha con su PID. - En Mac:
sudo lsof -iTCP -sTCP:LISTEN -n -Plista procesos TCP; los puertos 5000 y 7000 suelen ser AirPlay Receiver. - En Linux:
sudo ss -tulpnmuestra TCP y UDP con el proceso que ocupa cada puerto. - El riesgo real: un puerto escuchando en 0.0.0.0 o [::] es alcanzable desde otros dispositivos; en 127.0.0.1 solo desde tu propia máquina.
- Según el informe Active Adversary de Sophos, el acceso remoto vía RDP apareció en el 84% de los casos analizados en 2024, por eso el puerto 3389 merece atención extra.
¿Qué diferencia hay entre un puerto LISTENING, ESTABLISHED y uno en TIME_WAIT?
LISTENING significa que un programa espera conexiones entrantes en ese puerto, ESTABLISHED es una conexión activa (normalmente iniciada por tu propio navegador o cliente) y TIME_WAIT o CLOSE_WAIT son estados transitorios de una conexión que se está cerrando y no requieren ninguna acción. Cuando alguien dice “puerto abierto” casi siempre se refiere a LISTENING: el resto es ruido normal de cualquier PC conectada a internet.
UDP no tiene estados de conexión, así que un puerto UDP vinculado aparece en la lista sin la etiqueta LISTEN, pero se revisa igual: si algo está atado a un puerto UDP y acepta tráfico, importa saber qué es.
¿Hay que preocuparse por un TIME_WAIT? No. Se limpia solo en segundos.
¿Cómo saber si un puerto es alcanzable desde otros dispositivos o solo local?
La dirección que acompaña al puerto define quién puede conectarse: 127.0.0.1 o [::1] (localhost) significa que solo programas de tu propia PC llegan a ese puerto, mientras que 0.0.0.0, [::] o * abren el puerto a cualquier interfaz de red, incluida tu Wi-Fi y, si el router lo permite, internet.
Ponele que tenés esa base Postgres que instalaste “temporalmente” para un curso online y nunca desinstalaste. Si escucha en 127.0.0.1:5432, nadie fuera de tu máquina la toca. El problema aparece cuando el mismo servicio queda en 0.0.0.0 en una laptop que llevás al bar de la esquina (spoiler: ahí sí es un problema, porque cualquiera en esa red Wi-Fi puede intentar conectarse). En entender los tres estados reales de un puerto profundizamos sobre esto.
¿Cómo decidís si cerrás un puerto o lo dejás como está? Criterios prácticos
Después de correr el comando que corresponda y tener la lista de puertos en escucha, la pregunta no es “¿cierro todo?” sino “¿cuál de estos me expone de verdad?”. Para ordenar esa decisión sirve pasar cada entrada por cuatro preguntas, en este orden:
- ¿Reconocés el proceso? Si el nombre no te suena, no asumas lo peor ni lo ignores: buscá el PID (con
tasklist,Get-Processo el nombre que te dalsof/ss) y confirmá qué programa es antes de tocar nada. - ¿En qué dirección escucha? 127.0.0.1 reduce el riesgo a “otro proceso local comprometido”; 0.0.0.0 lo sube a “cualquiera en esta red”. Esta sola variable decide si vale la pena seguir investigando.
- ¿Lo usás activamente? Un RDP que activaste una vez para una emergencia y nunca desactivaste pesa distinto que el mismo RDP que usás todos los días para entrar a tu PC del trabajo.
- ¿Tiene historial de explotación conocido? SMB (445) y RDP (3389) no son puertos “malos” en sí, pero concentran gran parte de los accesos iniciales documentados en incidentes reales, así que merecen una revisión más estricta que, por ejemplo, un puerto de desarrollo en localhost.
Si las cuatro respuestas son “lo reconozco, está en localhost, lo uso seguido y no tiene historial problemático”, podés dejarlo. Si alguna da la respuesta contraria, ahí es donde entra apagar el servicio o bloquearlo en el firewall.
Ejemplo hipotético (situación ilustrativa, no un caso real): imaginemos a alguien que trabaja freelance, activó Escritorio remoto hace meses para que un cliente entrara a revisar un servidor de pruebas, y después se olvidó de apagarlo. Al correr netstat -ano | findstr :3389 ve que sigue en LISTENING sobre 0.0.0.0. Aplicando los cuatro criterios: reconoce el proceso (es RDP de Windows), escucha en todas las interfaces, no lo usa hace meses y es uno de los servicios con más historial de ataques por fuerza bruta. Las cuatro respuestas apuntan en la misma dirección: desactivar Escritorio remoto en Configuración, no solo bloquear el puerto en el firewall, porque el objetivo es apagar el servicio que nadie está usando, no simplemente ocultarlo.
¿Cómo ver los puertos abiertos en Windows con netstat y PowerShell?
Para ver puertos abiertos en Windows abrís la consola como administrador y corrés netstat -ano | findstr LISTENING, que lista cada puerto TCP en escucha con el PID del proceso en la última columna; para identificar qué programa es ese PID, usás tasklist /fi "PID eq 1234" reemplazando el número.
Si querés chequear un puerto puntual, el filtro es netstat -ano | findstr :3389. Las flags importan: -a muestra todas las conexiones, -n evita resolver nombres y -o agrega el PID, según la referencia oficial de Microsoft Learn.
Abrís la consola, tipeás el comando, ves una lista con columnas de dirección y PID, buscás ese PID en el Administrador de tareas o con tasklist, identificás el proceso y recién ahí decidís si hay que cerrarlo o dejarlo como está.
En PowerShell, Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess da una salida más prolija, y agregarle una columna calculada con Get-Process te muestra el nombre del programa sin buscar el PID a mano, tal como lo documenta la referencia de Get-NetTCPConnection. Si preferís una ventana en vez de comandos, Win + R, resmon y la pestaña Red tienen la misma info con estado del firewall incluido.
¿Qué puertos están abiertos normalmente en una PC con Windows?
Una PC con Windows 10 u 11 recién instalada no está en silencio: tiene varios puertos en escucha por defecto, como el 135 (RPC Endpoint Mapper), el 139 y 445 (compartido de archivos SMB) y el rango 49152-65535 para RPC dinámico, todos parte normal del sistema. Conviene memorizar esta lista antes de entrar en pánico por el primer PID desconocido que aparezca.
| Puerto | Qué es normalmente | ¿Hay que preocuparse? |
|---|---|---|
| 135 (TCP) | RPC Endpoint Mapper (svchost) | No, es un servicio central de Windows |
| 139, 445 (TCP) | NetBIOS y compartido de archivos SMB (proceso System, PID 4) | Bloquealo en redes públicas e internet |
| 3389 (TCP) | Escritorio remoto | Solo aparece si activaste Remote Desktop |
| 5040 (TCP) | Connected Devices Platform | Normal en Windows 10 y 11 |
| 5353, 5355 (UDP) | mDNS y LLMNR, descubrimiento de nombres en red local | Normal, pero se puede bloquear |
| 49152-65535 (TCP) | Puertos RPC dinámicos de servicios de Windows | Varias entradas aquí son normales |

El 445 tiene mala fama por el caso EternalBlue, explotado por WannaCry. Ojo: desde la versión 1709 de Windows 10 (2017), SMBv1 viene deshabilitado por defecto, así que el riesgo hoy pasa por sistemas viejos o por alguien que lo reactivó a mano.
¿Cómo ver los puertos abiertos en Mac con lsof?
Para ver puertos abiertos en Mac corrés sudo lsof -iTCP -sTCP:LISTEN -n -P en Terminal, que lista cada proceso TCP en escucha con su PID; para UDP se usa sudo lsof -iUDP -n -P, y para revisar un puerto puntual, sudo lsof -i :5000 -n -P. Complementá con conectarte por SSH a una VM en Azure.
Un hallazgo típico: los puertos 5000 y 7000 aparecen con el proceso ControlCenter. No es nada raro, es AirPlay Receiver. Si no usás esa función para transmitir contenido a tu Mac, se apaga desde Configuración del Sistema > General > AirDrop y Handoff.
¿Cómo ver los puertos abiertos en Linux con ss?
Para ver puertos abiertos en Linux corrés sudo ss -tulpn, que combina TCP y UDP (-t y -u), muestra solo los que escuchan (-l), el proceso propietario (-p) y los puertos en formato numérico (-n); la columna final, con el formato users:(("nombre",pid=...)), te dice exactamente qué programa ocupa cada puerto.
Si administrás un servidor, encontrar sshd escuchando en 0.0.0.0:22 es lo esperado. Si es tu notebook de uso diario y nunca te conectás por SSH de forma remota, apagá el servicio. No tiene sentido dejarlo prendido.
Si tenés un VPS o un servidor dedicado, este chequeo conviene hacerlo de rutina, no una sola vez.
¿Cómo saber si un puerto es alcanzable desde otro equipo de la red o desde internet?
Un puerto en escucha en tu PC no siempre es alcanzable desde afuera: para confirmarlo probás desde otro dispositivo de tu red con Test-NetConnection 192.168.1.20 -Port 445 en Windows o nc -zv 192.168.1.20 445 en Mac y Linux; si el resultado dice “succeeded” o “TcpTestSucceeded: True”, ese puerto es alcanzable en la red local. Te puede servir nuestra cobertura de comparar rendimiento entre Windows 11 y Ubuntu.
Para saber si algo quedó expuesto a internet hay que revisar la configuración de redirección de puertos, DMZ y UPnP del router doméstico: en la mayoría de las conexiones hogareñas, nada es alcanzable desde afuera salvo que una de esas opciones lo habilite. Shodan, el motor de búsqueda de dispositivos conectados, indexa automáticamente cualquier puerto que quede expuesto en tu IP pública, así que si tenés dudas, buscá tu propia IP ahí antes de que lo haga otro.
Escaneá solo equipos y redes que sean tuyos o que tengas permiso explícito de revisar. Probar puertos de terceros sin autorización puede violar políticas de uso aceptable y, en varias jurisdicciones, leyes de delitos informáticos.
¿Cómo cerrar o bloquear un puerto que no necesitás en Windows, Mac y Linux?
La forma más limpia de cerrar un puerto es apagar el programa que lo abrió, no esconderlo detrás del firewall: identificás el proceso por su PID, desactivás la función en su configuración (Escritorio remoto, uso compartido de archivos, AirPlay), lo detenés como servicio si no lo usás nunca, o directamente desinstalás el software si ya no hace falta. Bloquear en el firewall queda como segunda opción, para cuando necesitás el programa corriendo en local pero no querés que nadie más lo toque.
| Sistema | Ver estado del firewall | Bloquear un puerto entrante |
|---|---|---|
| Windows | Get-NetFirewallProfile | Select Name, Enabled | New-NetFirewallRule -DisplayName "Block TCP 5432" -Direction Inbound -Protocol TCP -LocalPort 5432 -Action Block |
| Mac | Configuración del Sistema > Red > Firewall | Activar firewall y poner la app en “Bloquear conexiones entrantes” |
| Ubuntu/Debian (ufw) | sudo ufw status verbose | sudo ufw deny 5432/tcp |
| Fedora/RHEL (firewalld) | sudo firewall-cmd --list-all | sudo firewall-cmd --permanent --remove-port=5432/tcp |
Ojo con esto si estás conectado por SSH a un servidor remoto: corré sudo ufw allow OpenSSH antes de sudo ufw enable, porque si no te quedás afuera de tu propia máquina (y recuperar acceso a un VPS sin consola física o KVM no es rápido).
Errores comunes al revisar puertos abiertos
- Cerrar un puerto en el firewall sin tocar el servicio. Bloqueás el 5432 pero Postgres sigue corriendo; si después desactivás el firewall por cualquier motivo, el puerto vuelve a estar expuesto. Mejor apagar el servicio directamente cuando no lo necesitás.
- Confundir ESTABLISHED con un ataque en curso. Ver 40 conexiones ESTABLISHED en netstat no significa que te hackearon: la mayoría son pestañas del navegador y apps en segundo plano hablando con sus servidores.
- Activar ufw sin permitir SSH primero en un servidor remoto. Es el error clásico que te deja sin acceso a tu propio VPS hasta que alguien con consola física lo arregle.
- Asumir que un puerto en 127.0.0.1 nunca es un problema. Es más seguro que 0.0.0.0, sí, pero si ese mismo servicio tiene una falla y otro proceso local está comprometido, el “solo local” deja de ser una barrera real.
Preguntas Frecuentes
¿Cómo veo qué puertos tengo abiertos en mi PC?
Depende del sistema: en Windows corrés netstat -ano | findstr LISTENING o Get-NetTCPConnection -State Listen en PowerShell, en Mac sudo lsof -iTCP -sTCP:LISTEN -n -P y en Linux sudo ss -tulpn. Los cuatro comandos muestran el puerto, la dirección y el proceso que lo ocupa. Relacionado: cómo un malware aprovechó repos comprometidos.
¿Cómo sé qué programa está usando un puerto en Windows?
Mirás la columna PID de netstat -ano y después buscás ese número con tasklist /fi "PID eq 1234". En PowerShell es más directo: Get-NetTCPConnection te deja agregar una columna calculada con el nombre del proceso sin pasos extra.
¿Cómo cierro un puerto abierto en Linux o Mac?
Lo más efectivo es apagar el programa que lo abrió en lugar de solo bloquearlo. Si necesitás mantenerlo corriendo pero sin exposición a la red, usás sudo ufw deny puerto/tcp en Ubuntu/Debian, firewall-cmd --remove-port en Fedora/RHEL, o desactivás el servicio correspondiente en Configuración del Sistema en Mac.
¿Qué significa que un puerto esté en 0.0.0.0 o LISTENING?
LISTENING indica que un programa espera conexiones entrantes en ese puerto. Que la dirección sea 0.0.0.0 (o [::] en IPv6) significa que ese programa acepta conexiones desde cualquier interfaz de red, no solo desde tu propia máquina, lo que lo vuelve alcanzable desde tu Wi-Fi o internet si el firewall y el router lo permiten.
¿Es peligroso tener puertos abiertos en mi computadora?
No necesariamente. El riesgo depende del servicio detrás del puerto, de si está actualizado y de si quedó expuesto a direcciones que no controlás. Según el informe Active Adversary de Sophos, los servicios remotos externos fueron el vector de acceso inicial en el 65% de los incidentes analizados en 2023, lo que confirma que el riesgo real está en servicios mal protegidos, no en el número de puerto.
Conclusión
Revisar qué puertos tenés abiertos no es tarea exclusiva de administrador de sistemas: cualquiera que instaló una base de datos para un curso, activó Escritorio remoto una vez o nunca desactivó el compartido de archivos tiene algo escuchando que capaz ni recuerda. Los comandos que vimos (netstat, PowerShell, lsof, ss) tardan menos de un minuto en darte esa foto. La parte que de verdad pide criterio es la de después: pasar cada puerto en escucha por las cuatro preguntas (¿lo reconocés?, ¿en qué dirección escucha?, ¿lo usás?, ¿tiene historial de riesgo?) antes de decidir si lo apagás, lo bloqueás o lo dejás tranquilo porque solo escucha en 127.0.0.1. Guardá la salida del comando una vez al mes y comparala con la anterior: una entrada nueva en 0.0.0.0 que no reconocés es la señal más barata de alerta temprana que existe.
Fuentes
- netstat – documentación oficial de Microsoft Learn
- Get-NetTCPConnection – referencia oficial del módulo NetTCPIP
- How to Check Open Ports on Windows, Mac and Linux – guía original en dev.to
- Puertos abiertos en Windows: cómo verlos, entenderlos y cerrarlos – EsGeeks
- Cómo saber si un puerto está abierto o cerrado en Linux – RedesZone






