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


在Windows平台上,我需要检查本地机器上的端口(例如3306)的原生选项(如 localhost),被封锁?


91
2018-06-16 14:21




只是为了澄清,你的意思是阻止,如被防火墙或网关阻止,或者你的意思是已被其他东西使用? - squillman
该 审核我的PC防火墙测试 允许您从外部源测试特定端口或一系列端口。 - Peter Stuer


答案:


既然您在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)来首先启动它。


100
2018-06-16 14:28



+1非常详细 - Sage
从Windows Vista开始,不推荐使用“netsh firewall”命令。它建议您使用“netsh advfirewall firewall”代替参考文章 go.microsoft.com/fwlink/?linkid=121488 - Nick DeVore
要在命令行解析输出,请添加 |find "3306" 对于命令,例如 C:\Windows\System32>netstat -an |find "3306" - Cees Timmerman
我找不到第二个推荐的第2步中指定的设置按钮... - Bassie
@Bassie,试试 docs.microsoft.com/en-us/windows/access-protection/... - nik


NETSTAT 会告诉你端口是否  但它不会告诉你端口是否 打开 对外界。我的意思是这个 NETSTAT 可能会显示端口3306上的0.0.0.0是LISTENING但是防火墙可能仍在阻止阻止外部连接的端口;所以依靠它是不够的 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

上面的命令应该给你一个快速指示端口 3306 在...上 localhost 正在回应。


18
2018-04-04 00:47



我下载了PortQryUI,我在阻止并启用了tcp和udp中的445端口后进行了检查,它在tcp中显示相同的侦听,而不是在udp中侦听。 - Liam neesan


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

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

Test-NetConnection -ComputerName localhost -Port 3306

TechNet Test-NetConnection文档


8
2018-01-17 14:56



+1为此。一个非常好的替代品,不需要在大多数现代Windows机器上安装任何东西。 - DCaugs


如果您可以从本地计算机(使用外部IP地址)远程登录到该端口,但不能从另一台计算机远程登录到该端口 - 那么它就会被阻塞。

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


5
2018-06-16 14:27



请注意,Win7和更新的系统上不再安装telnet。 - Alexis Wilke
@AlexisWilke那不对。可以安装Telnet - deepdive
要从命令行安装telnet:dism / online / Enable-Feature / FeatureName:TelnetClient - Jason Massey