如何在Powershell中检查端口是否开放

7

我系统中没有 telnet 命令。

然而,我的系统安装了 Windows 10,因此必须有一种方法来检查远程系统中特定端口是否打开。我已经使用 ping 命令检查过该特定远程系统是可访问的。

所以这是我的简单问题,如何使用 powershell 检查某个端口是否打开。

命令 netstat 可以简要列出本地系统服务和端口,以及特定协议(UDP 或 TCP)是否正在运行。由于我没有 telnet,因此需要用 powershell 解决并处理它。欢迎任何建议和建议。


1
Test-NetConnection? - David Brabant
我甚至怀疑这一点,但我必须对此非常确定。或者Test-NetConnection是powershellcmdlet。当我尝试在powershell中打入该字符串时,我收到了错误提示,说它不是其中任何一个。 - Dev Anand Sadasivam
我刚刚惊讶地发现目前使用的系统是Windows 7,感谢您的及时关注。非常感激。感谢@david-martin的关注和考虑,不要将其视为应该被采纳的方式,因为这是我解释的方式。谢谢。 - Dev Anand Sadasivam
Test-NetConnection localhost -p 8080, in place of localhost you can try any host. Thanks for all, for getting to know about these cmdlet - Dev Anand Sadasivam
2个回答

14
Test-NetConnection ###.###.###.### -Port ##

7
您可以使用以下内容尝试打开端口,如果没有返回错误,则该端口已打开:
$ipaddress = ""
$port = ""
$tcpClient = new-object Net.Sockets.TcpClient
$tcpClient.Connect("$ipaddress", $Port)
$tcpClient.Dispose()

这里有一个更完整的例子,它返回 true/false,这是 Test-Path 的工作方式:
function Test-Port
{
    param
    (
        $Address,
        $Port
    )
    $tcpClient = new-object Net.Sockets.TcpClient
    try
    {
        $tcpClient.Connect("$Address", $Port)
        $true
    }
    catch
    {
        $false
    }
    finally
    {
        $tcpClient.Dispose()
    }
}

Test-Port -Address localhost -Port 80
Test-Port -Address localhost -Port 81 

根据你使用的 Powershell/Windows 版本不同,Test-NetConnection 可能更加适合。


1
你应该在使用完对象后进行处理。 - Joey
感谢您清楚地指出了如何使用Powershell来检查特定服务是否正在运行,而无需使用传统的命令行模式下的Telnet。还有关于如何在Powershell中使用对象的语义感知。 - Dev Anand Sadasivam
显然,在其他可达的主机上。 - Dev Anand Sadasivam

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