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

Bor*_*vić 117 networking windows firewall port

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

nik*_*nik 118

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

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

    netstat -a -n

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

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

    netsh 防火墙显示状态

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

    netsh 防火墙显示配置


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

如果您正在运行正在侦听 3306 的应用程序/服务,防火墙配置应将其显示为已启用。如果没有看到,您可能错过了添加防火墙例外以允许此应用程序/服务。

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

  • 要在命令行解析输出,请将 `|find "3306"` 添加到命令中,例如 `C:\Windows\System32>netstat -an |find "3306"` (6认同)
  • 从 Windows Vista 开始,不推荐使用“netsh firewall”命令。它建议您改用“netsh advfirewall firewall”并参考文章 http://go.microsoft.com/fwlink/?linkid=121488 (3认同)

Tim*_*ner 31

NETSTAT会告诉您该端口是否正在侦听,但不会告诉您该端口是否对外界开放。我的意思是这NETSTAT可能表明 0.0.0.0 正在侦听端口 3306,但防火墙可能仍在阻止阻止外部连接的端口;所以仅仅依靠是不够的NETSTAT

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

有很多方法可以进行端口扫描,但是既然您提到在 Windows 上,那么我建议使用 Microsoft 命令行实用程序PortQry和图形版本PortQryUI

测试所有开放端口:

portqry.exe -n #.#.#.#   
Run Code Online (Sandbox Code Playgroud)

要测试特定端口:

portqry.exe -n #.#.#.# -e #
Run Code Online (Sandbox Code Playgroud)

例如测试 192.168.1.1 路由器的 Web 界面:

portqry.exe -n 192.168.1.1 -e 80
Run Code Online (Sandbox Code Playgroud)

返回:

TCP port 80 (http service): LISTENING
Run Code Online (Sandbox Code Playgroud)

在没有运行 HTTPD 的本地机器上测试返回:

TCP port 80 (http service): NOT LISTENING
Run Code Online (Sandbox Code Playgroud)

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

  • Listening 表示服务器正在侦听指定端口
  • Filtered 意味着它收到了一个带有重置标志的 TCP 确认数据包,这可能表明防火墙或软件问题
  • Not Listening 意味着它根本没有收到回复

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

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

telnet localhost 3306
Run Code Online (Sandbox Code Playgroud)

上面的命令应该会给你一个快速的指示,如果端口3306localhost响应。


Mar*_*nus 29

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

如果你想在你的例子中测试端口 3306,命令是

Test-NetConnection -ComputerName localhost -Port 3306
Run Code Online (Sandbox Code Playgroud)

TechNet 测试-NetConnection 文档

  • 为此+1。这是一个非常好的替代方案,不需要在大多数现代 Windows 机器上安装任何东西。 (2认同)

Bre*_*nt 5

如果您可以从本地机器(使用外部 IP 地址)telnet 到端口,但不能从另一台机器 telnet 到端口 - 那么它就会在两者之间被阻止。

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

  • 从命令行安装 telnet:dism /online /Enable-Feature /FeatureName:TelnetClient (4认同)