如何确定Windows服务器上的端口是否开放?

526

我正在尝试在服务器上的另一个端口安装网站,但该端口可能被防火墙关闭。是否有一种方法可以ping出或ping进,检查特定端口是否开放?


2
请参见http://serverfault.com/questions/309357/ping-a-specific-port。 - Vadzim
13个回答

791
假设您正在尝试使用TCP(而不是UDP)端口:
1. 在服务器本身上,使用netstat -an检查哪些端口正在侦听。
2. 从外部,只需使用telnet host port(或在Unix系统上使用telnet host:port)来查看连接是否被拒绝、接受或超时。
关于后一项测试,通常:
- 连接被拒绝 表示该端口未运行任何内容 - 被接受 表示该端口正在运行某个服务 - 超时 表示防火墙阻止了访问
在Windows 7或Windows Vista中,默认选项“telnet”无法识别为内部或外部命令、可操作的程序或批处理文件。要解决这个问题,只需启用它:单击**开始** → **控制面板** → **程序** → **打开或关闭Windows功能**。在列表中,向下滚动并选择Telnet客户端,然后点击确定

321
在Win7或Vista中,默认选项的'telnet'命令不被识别为内部或外部命令,可执行程序或批处理文件。要解决此问题,只需启用它:点击“开始”、“控制面板”、“程序”,然后选择“打开或关闭Windows功能”。在列表中,向下滚动并选择Telnet客户端,然后点击“确定”。 - volody
12
请使用PuTTY Telnet客户端,它不需要安装。 - Colin Pickard
62
“Could not open connection to the host, on port x: Connect failed” 表示无法打开到主机的连接,端口为 x,连接失败。 - Kenny Evitt
2
@Alnitak 我只是想确认一下,因为我认为这已经回答了我的问题。当我执行 telnet api-3t.sandbox.paypal.com 443 时,我得到的是 Connecting to api-3t.sandbox.paypal.com...Could not open connection to the host on port 443: Connect failed。这是因为防火墙阻止了它吗? - Popeye
3
打开 telnet.exe 并输入 o host port 和打开命令行 (cmd.exe) 后输入 telnet host port 是有区别的。 - Pawel Cioch
显示剩余5条评论

230

在Windows操作系统上,您可以使用

netstat -na | findstr "your_port"

为了缩小结果范围,你可以过滤 LISTENINGESTABLISHEDTCP 等。请注意它是区分大小写的。


6
你不能这样使用find命令,它会搜索文件,你应该使用grep。 - Moataz Elmasry
44
@MoatazElmasry 在Linux上你说得对,但这是在Windows服务器上,"find"是正确的命令。在Windows上没有"grep"命令。我刚刚运行了完全相同的命令,并且它完美地运行了。 - Ben Wyatt
5
当我使用命令netstat -an | find "19345"时,我没有得到任何结果。这是什么意思? - nanosoft
24
在Windows 10中,find 命令对我无效,但是 netstat -na | findstr "8080" 命令有效。 - arun
8
没有任何发生,无论是使用find还是findstr。 - usefulBee
显示剩余3条评论

133

如果你是从外部检查而不是从服务器本身检查,并且你不想麻烦安装telnet(因为它不随Windows的最新版本一起提供)或其他任何软件,那么你可以使用本地PowerShell:

Test-NetConnection -Port 800 -ComputerName 192.168.0.1 -InformationLevel Detailed

很不幸,这仅适用于PowerShell 4.0或更新版本。要检查您的PowerShell版本,请键入$PSVersionTable

PS:请注意,现在在Twitter上有一些声称暗示可以通过提及PowerShell Core中的“Test-Connection”或快捷方式“tnc”来改进此答案。请参见https://twitter.com/david_obrien/status/1214082339203993600 并帮助我编辑此答案以进行改进!


如果您的PSVersion<4.0,则没有运气了。请检查此表格:

Enter image description here

尽管可以通过安装Windows管理框架4.0升级PowerShell版本,但对我来说并没有起作用,Test-NetConnection cmdlet仍然不可用。


4
这是最好的答案。在别人的服务器上安装telnet并不总是直截了当的! - TrojanName
2
绝对必须是最佳答案。 - QtRoS
1
这是比telnet更可靠的选项,telnet会什么也不报告而只是挂起,而这个选项会报告在我的情况下端口是否可用。 - axk
太好了,对于Windows 10来说,这是目前最佳的解决方案,而且不需要安装第三方扩展程序(在Linux上我可能会使用telnet或nc)。 - Andrea
找到这个页面非常有帮助,我不会关闭它。 - Mariusz
什么页面?关闭什么? - knocte

45

我是这样做的:

netstat -an | find "8080" 

通过 Telnet

telnet 192.168.100.132 8080

只需确保该计算机的防火墙已关闭。


当我使用命令 netstat -an | find "19345" 时,我没有得到任何结果。这是什么意思? - nanosoft
2
这意味着该端口是空闲的。 - Sarvar Nishonboyev
1
当我运行 netstat -an | find "8080" 时,出现错误提示,指出没有名为“8080”的文件 - Pragyaditya Das

41
在Windows机器上,您可以使用微软提供的PortQry工具来检查特定端口上是否已经有应用程序在监听,使用以下命令:
portqry -n 11.22.33.44 -p tcp -e 80

4
防火墙阻止的端口通常会显示为“已过滤”。 - dlanod
你也可以使用这个工具来检查UDP端口:portqry -n 11.22.33.44 -p udp -e 19132 - HelloWorld101

24
如果没有可用的telnet,请下载PuTTY。这是一个远比Telnet、SSH等客户端更优秀的工具,在许多情况下都很有用,不仅限于本例,特别是在管理服务器时。

是的,但不适用于粘贴Forth代码,比如使用AmForth(除非与Edit Overflow结合使用PuTTY)。 - Peter Mortensen

16

如果您想查看 Windows 服务器上所有已使用和正在侦听的端口,请使用此命令:

netstat -an |find /i "listening"

查看所有开放、监听和已建立的端口:

netstat -a

13

你需要一个工具来完成这个任务吗?在http://www.canyouseeme.org/有一个网站。否则,你需要其它的服务器回调来检查端口是否开放。。。


8
在Windows Server上,您可以使用:
netstat -an | where{$_.Contains("Yourport")}

没有以任何方式解决防火墙问题。 - user207421
5
这可以在PowerShell上运行。 - Paco Zarate
你是指“Windows服务器”吗? - Peter Mortensen

4

好工具。示例代码如下:PsPing -n 20 -i 0 servername:port - Asher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接