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

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

在 Windows 平台上,我可以使用哪些本机选项来检查本地计算机(如)上的端口(例如 3306)是否localhost被阻止?

答案1

由于您使用的是 Windows 计算机,因此可以执行以下操作:

  • 执行以下命令并查找“:3306”侦听器(您没有提到 UDP/TCP)。这将确认端口上有正在运行的程序。

    网络状态监测

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

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

    netsh 防火墙显示状态

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

    netsh 防火墙显示配置


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

如果你正在运行一个监听 3306 的应用程序/服务,防火墙配置应显示已启用。如果没有看到,则可能是您忘记添加防火墙例外以允许此应用/服务。

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

答案2

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

如果你想测试端口 3306(如示例中所示),命令如下

Test-NetConnection -ComputerName localhost -Port 3306

TechNet 测试-NetConnection 文档

答案3

NETSTAT会告诉您端口是否聆听但它不会告诉你端口是否打开对外界而言。我的意思是,这NETSTAT可能表明 0.0.0.0 正在侦听端口 3306,但防火墙可能仍在阻止该端口,从而阻止外部连接;因此,仅依靠它是不够的NETSTAT

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

有很多方法可以进行端口扫描,但既然你提到在 Windows 上,那么我建议使用 Microsoft 命令行实用程序PortQry以及图形版本端口查询用户界面

测试所有开放端口:

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

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

答案4

如果您可以从本地计算机(使用外部 IP 地址) telnet 到该端口,但不能从另一台计算机 telnet 到该端口,那么它肯定在某处被阻止了。

请注意,本地计算机上的防火墙可以甚至阻止第一个行动。

相关内容