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

106

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

Boris Pavlović
fuente
1
Solo para aclarar, ¿quiere decir bloqueado, como bloqueado por un firewall o puerta de enlace, o quiere decir que ya está en uso por otra cosa?
squillman
1
La prueba Audit My PC Firewall le permite probar un puerto específico o un rango de puertos desde una fuente externa.
Peter Stuer

Respuestas:

111

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

  • Ejecute el siguiente comando y busque un escucha ": 3306" (no mencionó 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 siente que el firewall puede estar bloqueándolas, puede iniciar el registro del firewall de Windows y verificar los registros de conexiones caídas.

    • Vaya al Firewall de Windows, Configuración avanzada
    • Haga clic en el botón Configuración junto a "Conexión de área local"
    • Seleccione "Registrar paquetes descartados"
    • Mire la ubicación del archivo de registro (si no está presente, defina uno)
    • Haga clic en Aceptar
    • Ahora, cuando se realiza el intento de conexión (suponiendo que sepa cuándo se hace esto), mire el archivo de registro para ver una caída en el puerto 3306.
    • Si se ve esto, querrá agregar una excepción para este puerto.
  • Hay un comando más para verificar el estado del firewall
    (Actualización para usuarios de Windows 7 - como se menciona a Nickcontinuación - use el firewall netsh advfirewall )

    estado de la demostración del cortafuegos de netsh

    • esto enumerará los puertos bloqueados, así como los puertos de escucha activos con asociaciones de aplicaciones
  • Este comando volcará los detalles de configuración del firewall de Windows

    netsh firewall show config


Si tiene un bloqueo activo (el firewall corta las conexiones entrantes) después de iniciar el registro, debería verlo en el registro.

Si está ejecutando una aplicación / servicio que está escuchando en 3306, la configuración del firewall debe mostrar que está habilitado. Si esto no se ve, probablemente haya olvidado agregar una excepción con el firewall para permitir esta aplicación / servicio.

Finalmente, el puerto 3306 se usa típicamente para MySQL. Por lo tanto, supongo que está ejecutando el servidor MySQL en esta máquina con Windows. Por lo tanto, debería ver un oyente para 3306 aceptando conexiones entrantes. Si no ve eso, debe trabajar con su aplicación (MySQL) para comenzar primero.

nik
fuente
44
+1 para grandes detalles
Sage
3
A partir de Windows Vista, el comando "firewall de netsh" está en desuso. Recomienda usar en su lugar el "firewall de netsh advfirewall" y hace referencia al artículo go.microsoft.com/fwlink/?linkid=121488
Nick DeVore
55
Para analizar la salida en la línea de comando, agréguela |find "3306"al comando, por ejemploC:\Windows\System32>netstat -an |find "3306"
Cees Timmerman el
No puedo encontrar el botón de configuración especificado en el paso 2 de la segunda recomendación ...
Bassie
24

NETSTATle dirá si el puerto está escuchando, pero no le dirá si el puerto está abierto al mundo exterior. Lo que quiero decir con esto es que NETSTATpuede mostrar que 0.0.0.0 ESTÁ ESCUCHANDO en el puerto 3306, pero un firewall aún puede estar bloqueando ese puerto, lo que impide las conexiones externas; entonces no es suficiente confiar NETSTATsolo.

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

Hay muchas formas de hacer un escaneo de puertos, pero dado que mencionó estar en Windows, sugeriré la utilidad de línea de comandos de Microsoft PortQryy la versión gráfica PortQryUI

Para probar 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 enrutador en 192.168.1.1:

portqry.exe -n 192.168.1.1 -e 80

Que devuelve:

TCP port 80 (http service): LISTENING

Donde como prueba en una máquina local sin HTTPD en ejecución devuelve:

TCP port 80 (http service): NOT LISTENING

Usando una utilidad PortScan obtendrá uno de 3 resultados.

  • Listening significa que el servidor está escuchando en el puerto especificado
  • Filtered significa que recibió un paquete de confirmación de TCP con el conjunto de indicadores de reinicio que probablemente indica un problema de firewall o software
  • Not Listening significa que no recibió ninguna respuesta

telnetes otra opción de línea de comando que generalmente se instala en el sistema operativo de manera predeterminada. Esta utilidad de línea de comandos se puede usar de manera rápida para ver si un puerto responde a una solicitud de red.

Para usarlo telnet, simplemente emitiría el siguiente comando desde un símbolo del sistema:

telnet localhost 3306

El comando anterior debería darle una indicación rápida si el puerto 3306en el localhostestá respondiendo.

Tim Penner
fuente
Descargué PortQryUI y verifiqué después de que bloqueé y habilité el puerto 445 en tcp y udp, muestra la misma escucha en tcp y no escucha en udp.
Liam neesan el
17

Desde PowerShell 4.0 puede usar el comando Test-NetConnection

Si desea probar el puerto 3306 como en su ejemplo, el comando es

Test-NetConnection -ComputerName localhost -Port 3306

Documentación de TechNet Test-NetConnection

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

Si puede hacer telnet al puerto desde la máquina local (usando la dirección IP externa), pero no desde otra máquina, entonces se está bloqueando en algún punto intermedio.

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

Brent
fuente
Tenga en cuenta que telnet ya no se instala en Win7 y sistemas más nuevos.
Alexis Wilke
@AlexisWilke Eso no es correcto. Telnet se puede instalar
deepdive
44
Para instalar telnet desde la línea de comandos: dism / online / Enable-Feature / FeatureName: TelnetClient
Jason Massey