118 votos

¿Cómo comprobar si un puerto está bloqueado en una máquina Windows?

En la plataforma Windows, ¿qué opciones nativas tengo para comprobar si un puerto (3306, por ejemplo) en mi máquina local (como en localhost ), está siendo bloqueado?

1 votos

Sólo para aclarar, ¿quieres decir bloqueado, como bloqueado por un firewall o puerta de enlace, o quieres decir que ya está en uso por otra cosa?

1 votos

El Prueba de auditoría de mi PC Firewall le permite probar un puerto específico o un rango de puertos desde una fuente externa.

119voto

nik Puntos 5456

Como estás en una máquina Windows, estas cosas se pueden hacer:

  • Ejecute el siguiente comando y busque un listener ":3306" (no ha mencionado UDP/TCP). Esto confirmará que hay algo ejecutándose en el puerto.

    netstat -a -n

  • Después de esto, si espera conexiones entrantes en este puerto y cree que el cortafuegos puede estar bloqueándolas, podría utilizar iniciar el registro del cortafuegos de Windows y revisa los registros para ver si hay conexiones caídas

    • Vaya a Firewall de Windows, Configuración avanzada
    • Haga clic en el botón de configuración junto a "Conexión de área local"
    • Seleccione "Registro de paquetes perdidos".
    • Mira la ubicación del archivo de registro (si no está presente, define uno)
    • Haga clic en OK
    • Ahora, cuando se haga el intento de conexión (suponiendo que sepas cuándo se hace), busca en el archivo de registro una caída en el puerto 3306.
    • Si esto se ve, querrá añadir una excepción para este puerto.
  • Hay un comando más para comprobar el estado del firewall
    (Actualizado para los usuarios de Windows 7 -- según lo referido por Nick a continuación utilice netsh advfirewall firewall )

    netsh firewall show state

    • esto listará los puertos bloqueados así como los puertos de escucha activos con asociaciones de aplicaciones
  • Este comando volcará el detalle de la configuración del firewall de Windows

    netsh firewall show config


Si tiene un bloqueo activo (las conexiones entrantes están siendo descartadas por el firewall) después de iniciar el registro, debería verlo en el registro.

Si está ejecutando una aplicación/servicio que está escuchando en 3306, el configuración del cortafuegos debería mostrarlo como Activado. Si esto no se ve, es probable que haya omitido añadir una excepción con el firewall para permitir esta aplicación/servicio.

Por último, el puerto 3306 se utiliza normalmente para MySQL. Por lo tanto, supongo que está ejecutando el servidor MySQL en esta máquina Windows. Por lo tanto, debería ver un listener para 3306 aceptando conexiones entrantes. Si no lo ves, necesitas trabajar con tu aplicación (MySQL) para que se inicie primero.

3 votos

A partir de Windows Vista el comando "netsh firewall" está obsoleto. Se recomienda utilizar "netsh advfirewall firewall" en su lugar y hace referencia al artículo go.microsoft.com/fwlink/?linkid=121488

6 votos

Para analizar la salida en la línea de comandos, añada |find "3306" al comando, por ejemplo C:\Windows\System32>netstat -an |find "3306"

0 votos

No encuentro el botón de configuración especificado en el paso 2 de la segunda recomendación...

31voto

Tim Penner Puntos 544

NETSTAT le dirá si el puerto es escuchando pero no le dirá si el puerto es Abrir al mundo exterior. Lo que quiero decir con esto es que NETSTAT puede mostrar que el 0.0.0.0 está ESCUCHANDO en el puerto 3306, pero un cortafuegos puede seguir bloqueando ese puerto, lo que impide las conexiones externas; por lo que no es suficiente confiar en NETSTAT solo.

La mejor manera de comprobar si un puerto está bloqueado es hacer un escaneo de puertos desde la máquina cliente.

Hay muchas maneras de hacer un escaneo de puertos, pero ya que mencionaste estar en Windows, entonces te sugeriré la utilidad de línea de comandos de Microsoft PortQry y la versión gráfica PortQryUI

Para comprobar todos los puertos abiertos:

portqry.exe -n #.#.#.#   

Para probar un puerto específico:

portqry.exe -n #.#.#.# -e #

Por ejemplo, para probar la interfaz web de un router en 192.168.1.1:

portqry.exe -n 192.168.1.1 -e 80

Que vuelve:

TCP port 80 (http service): LISTENING

Mientras que las pruebas en una máquina local sin ejecutar HTTPD devuelven:

TCP port 80 (http service): NOT LISTENING

Utilizando una utilidad PortScan obtendrá uno de los 3 resultados.

  • Listening significa que el servidor está escuchando en el puerto especificado
  • Filtered significa que ha recibido un paquete de acuse de recibo TCP con la flag Reset activada, lo que probablemente indica un problema de firewall o de software
  • Not Listening significa que no ha recibido ninguna respuesta

telnet es otra opción de línea de comandos que suele estar instalada en el sistema operativo por defecto. Esta utilidad de línea de comandos puede utilizarse como una forma rápida de ver si un puerto responde a una solicitud de red.

Para utilizar telnet simplemente se debe emitir el siguiente comando desde una línea de comandos:

telnet localhost 3306

El comando anterior debería indicarle rápidamente si el puerto 3306 en el localhost está respondiendo.

0 votos

He descargado PortQryUI y he comprobado después de bloquear y habilitar el puerto 445 tanto en tcp como en udp, está mostrando la misma escucha en tcp y no escucha en udp.

29voto

Marcel Janus Puntos 419

Desde PowerShell 4.0 se puede utilizar el comando Test-NetConnection

Si quieres probar el puerto 3306 como en tu ejemplo el comando es

Test-NetConnection -ComputerName localhost -Port 3306

Documentación de TechNet Test-NetConnection

0 votos

+1 por esto. Una alternativa realmente agradable que no requiere la instalación de nada en la mayoría de las máquinas modernas de Windows.

5voto

Kristof Provost Puntos 12359

Si puedes telnetar el puerto desde la máquina local (usando la dirección IP externa), pero no desde otra máquina - entonces está siendo bloqueado en algún lugar.

Tenga en cuenta que un firewall en su máquina local podría impedir incluso la primera acción.

0 votos

Tenga en cuenta que telnet ya no se instala en los sistemas Win7 y más recientes.

0 votos

@AlexisWilke Eso no es correcto. Telnet se puede instalar

4 votos

Para instalar telnet desde la línea de comandos: dism /online /Enable-Feature /FeatureName:TelnetClient

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: