it-swarm.cn

如何检查Windows计算机上的端口是否被阻止?

在Windows平台上,我必须检查哪些本地选项(例如localhost)是否阻止了本地计算机上的端口(例如3306)?

109
Boris Pavlović

由于您使用的是Windows计算机,因此可以完成以下操作,

  • 执行以下命令并查找“:3306”侦听器(您未提及UDP/TCP)。这将确认端口上正在运行某些设备。

    netstat -a -n

  • 此后,如果您期望该端口上有传入连接并且感觉防火墙可能阻止了它们,则可以 启动Windows防火墙日志记录 并检查日志中是否有断开的连接

    • 转到Windows防火墙的“高级”设置
    • 单击“本地连接”旁边的设置按钮
    • 选择“记录丢弃的数据包”
    • 查看日志文件的位置(如果不存在,请定义一个)
    • 点击确定
    • 现在,当尝试进行连接时(假设您知道何时完成),请在日志文件中查看端口3306断开的情况。
    • 如果看到这种情况,您将要为此端口添加一个例外。
  • 还有一个命令可以检查防火墙状态
    (针对Windows 7用户的更新-如以下Nick所提及-使用 netsh advfirewall防火墙

    netsh防火墙显示状态

    • 这将列出阻止的端口以及具有应用程序关联的活动监听端口
  • 此命令将转储Windows防火墙配置详细信息

    netsh防火墙显示配置


如果在开始记录后您有一个活动的阻止(防火墙断开了传入连接),则应该在日志中看到它。

如果您正在运行正在监听3306的应用程序/服务,则 防火墙配置 应该显示为已启用。如果未看到此消息,则您可能错过了添加防火墙例外以允许该应用程序/服务的操作。

最后,端口3306通常用于MySQL。因此,我假设您正在此Windows计算机上运行MySQL服务器。因此,您应该看到3306的侦听器接受传入的连接。如果没有看到,则需要使用您的应用程序(MySQL)来首先启动它。

113
nik

NETSTAT会告诉您端口是否为监听,但不会告诉您端口是否为open通往外界。我的意思是,NETSTAT可能表明0.0.0.0在端口3306上处于侦听状态,但是防火墙可能仍在阻止该端口,从而阻止了外部连接。因此仅依靠NETSTAT是不够的。

检查端口是否被阻止的最佳方法是从客户端计算机进行端口扫描。

有很多方法可以进行端口扫描,但是由于您提到过Windows,因此我建议使用Microsoft命令行实用程序 PortQry 和图形版本 PortQryUI

要测试所有打开的端口:

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

要测试特定端口:

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

例如,要测试位于192.168.1.1的路由器的Web界面:

portqry.exe -n 192.168.1.1 -e 80

哪个返回:

TCP port 80 (http service): LISTENING

在没有运行HTTPD的本地计算机上进行测试所返回的结果:

TCP port 80 (http service): NOT LISTENING

使用PortScan实用程序,您将获得3个结果之一。

  • Listening表示服务器正在侦听指定的端口
  • Filtered表示它收到一个TCP带有复位标志的确认包,它可能表示防火墙或软件问题
  • Not Listening表示完全没有收到回复

telnet是默认情况下通常安装在操作系统上的另一个命令行选项。可以使用此命令行实用程序快速查看端口是否响应网络请求。

要使用telnet,您只需从命令提示符处发出以下命令:

telnet localhost 3306

上面的命令应该可以快速指示localhost上的端口3306是否响应。

25
Tim Penner

从PowerShell 4.0开始,您可以使用命令Test-NetConnection

如果要在示例中测试端口3306,则命令为

Test-NetConnection -ComputerName localhost -Port 3306

TechNet Test-NetConnection文档

21
Marcel Janus

如果您可以从本地计算机(使用外部IP地址)远程登录到端口,但不能从另一台计算机远程登录,则该端口之间将被阻塞。

请注意,本地计算机上的防火墙可能甚至阻止了第一个操作。

5
Brent