我正在尝试在服务器上的备用端口下安装站点,但该端口可能被防火墙关闭。有没有办法在特定端口上 ping 出或进入,以查看它是否打开?
13 回答
假设它是您尝试使用的 TCP(而不是 UDP)端口:
在服务器本身上,用于
netstat -an
检查哪些端口正在侦听。从外部,只需使用
telnet host port
(或telnet host:port
在 Unix 系统上)查看连接是否被拒绝、接受或超时。
在后一个测试中,一般来说:
- 连接被拒绝意味着该端口上没有运行任何东西
- 接受意味着该端口上正在运行某些东西
- 超时意味着防火墙正在阻止访问
在 Windows 7 或 Windows Vista 上,默认选项“telnet”不被识别为内部或外部命令、可运行程序或批处理文件。要解决此问题,只需启用它:单击 *开始** →控制面板→程序→打开或关闭Windows 功能。在列表中,向下滚动并选择Telnet 客户端,然后单击OK。
在 Windows 上,您可以使用
netstat -na | find "your_port"
缩小结果范围。您还可以过滤LISTENING
、ESTABLISHED
等TCP
。请注意,它区分大小写。
如果您是从外部检查,而不是从服务器本身检查,并且您不想安装 telnet(因为它没有随 Windows 的最新版本提供)或任何其他软件,那么您有本机 PowerShell:
Test-NetConnection -Port 800 -ComputerName 192.168.0.1 -InformationLevel Detailed
(不幸的是,这只适用于 PowerShell 4.0 或更高版本。要检查您的 PowerShell 版本,请键入$PSVersionTable
。)
PS:请注意,这些天在 twittersphere 上有一些声明暗示可以通过提及 PowerShell Core 中的“Test-Connection”或快捷方式“tnc”来改进此答案。请参阅https://twitter.com/david_obrien/status/1214082339203993600并帮助我编辑此答案以改进它!
(如果您的 PSVersion < 4.0,那么您就不走运了。检查此表:
即使您可以通过安装Windows Management Framework 4.0来升级您的 PowerShell 版本,但它对我来说没有用,Test-NetConnection cmdlet 仍然不可用)。
我确实喜欢这样:
netstat -an | find "8080"
从远程登录
telnet 192.168.100.132 8080
只需确保该计算机上的防火墙已关闭。
在 Windows 机器上,您可以使用Microsoft 的PortQry使用以下命令检查应用程序是否已经在侦听特定端口:
portqry -n 11.22.33.44 -p tcp -e 80
如果telnet
不可用,请下载PuTTY。它是一个非常出色的 Telnet、SSH 等客户端,并且在许多情况下都非常有用,而不仅仅是这个,尤其是在您管理服务器时。
如果您想查看 Windows 服务器上所有已使用和正在侦听的端口,请使用此选项:
netstat -an |find /i "listening"
查看所有打开的、正在监听的、已建立的端口:
netstat -a
你想要一个工具来做这件事吗?在http://www.canyouseeme.org/上有一个网站。否则,您需要其他服务器给您回电以查看端口是否打开...
在 Windows Server 上,您可以使用
netstat -an | where{$_.Contains("Yourport")}
Sysinternals 的PsPing也非常好。
这对我有用:
- 打开命令提示符
- 类型
telnet
- Microsoft Telnet>open <主机名或 IP 地址><空格><端口>
它将确认端口是否打开。
我发现的另一个实用程序既好又小,是PortQry Command Line Port Scanner version 2.0。
你可以 ping 一个服务器和一个端口,它会告诉你端口的状态。有一个命令行实用程序和一个 UI。