在 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
答案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 到该端口,那么它肯定在某处被阻止了。
请注意,本地计算机上的防火墙可以甚至阻止第一个行动。