使用PowerShell检查打开(听)端口

Jacki

在PowerShell中,您可以使用测试网络连接cmdlet检查是否在远程计算机上可用(打开)端口。您可以使用此CMDLET检查远程服务器或网络服务的响应和可用性,测试TCP端口是否被防火墙阻止,检查ICMP可用性和路由。实际上,Test-NetConnection取代了几种流行的网络管理工具,例如ping,,,,tracert,,,,telnet,,,,pathping,TCP端口扫描仪等。

内容:

检查带有测试网络连接的开放式TCP端口

您可以使用Test-NetConnection CMDLET仅检查TCP端口。例如,要检查远程邮件服务器上的TCP端口25(SMTP协议)是否打开:

Test-NetConnection -ComputerName ny-msg01 -Port 25

有关的:

笔记。您可以使用测试网络连接CMDLET仅测试TCP端口连接。但是,您无法使用CMDLET检查远程UDP端口的可用性。

Test-NetConnection命令具有别名跨国公司。同一命令的缩短版本如下:

TNC ny-msg01 -Port 25

让我们看一下命令的结果:

ComputerName           : ny-msg01
RemoteAddress          : 10.20.1.7
RemotePort             : 25
InterfaceAlias         : CORP
SourceAddress          : 10.20.1.79
PingSucceeded          : True
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded       : True

如您所见,CMDLET将服务器名称解析到IP地址,检查ICMP响应(类似于ping),并检查来自TCP端口的响应(端口可用性)。指定的服务器通过ICMP响应(PingSucceeded = True)和TCP端口25开放(RemotePort=25, TcpTestSucceeded= True)。

笔记。如果命令返回pingsucceeded = false和tcptestsucceeded = true,则很可能意味着在远程计算机上禁用ICMP回声请求(PING)。

如果您运行无参数的测试网络连接,它将检查计算机是否连接到Internet(检查是否可用internetbeacon.msedge.net主持人)。

您可以添加 - 信息级别的详细信息检查远程TCP端口时显示详细信息的选项:

TNC 192.168.32.101 -Port 3389 -InformationLevel Detailed

CMDLET具有特殊参数 - commontcpport,这使您可以指定已知网络协议(HTTP,RDP,SMB,WinRM)的名称。

例如,要检查HTTP Web服务器的可用性,您可以使用该命令:

Test-NetConnection -ComputerName woshub.com -CommonTCPPort HTTP

或检查默认RDP端口(TCP/3389)的可用性:

Test-NetConnection ny-rds1 –CommonTCPPort RDP

您可以列出测试网络连接cmdlet返回的所有参数:

Test-NetConnection ny-man01 -port 445|Format-List *

如果您只需要查看端口是否可用,则可以更快地检查它:

TNC ny-msg1 -Port 25 -InformationLevel Quiet

CMDLET返回True,这意味着远程TCP端口是打开的。

提示在Windows PowerShell的早期版本中(版本4.0之前),您可以使用命令检查远程TCP端口的可用性:

(New-Object System.Net.Sockets.TcpClient).Connect('ny-msg01', 25)

您可以使用 - Traceroute参数(类似于内置tracertWindows中的命令)。您可以使用该路线检查期间限制最多-酒花范围。

Test-NetConnection ny-man01 –TraceRoute

cmdlet返回了毫秒中的摘要网络访问延迟(PingReplyDetails (RTT): 41 ms)以及路由器的所有IP地址在进入目标主机的路上。

您可以使用PowerShell检查许多远程计算机上特定端口的可用性。将主机名或IP地址的列表保存在带有名称的纯文本文件中servers.txt

例如,您的任务是查找TCP/25端口未响应或在服务器列表中关闭的主机:

Get-Content c:PSlist_servers.txt |  where { -NOT (Test-Netconnection $_ -Port 25  -InformationLevel Quiet)}| Format-Table -AutoSize

您可以使用简单的监视PowerShell脚本,该脚本检查远程服务器的可用性,并在没有任何服务器的情况下显示弹出通知。

例如,您可以在广告健康检查期间检查所有域控制器上基本服务的可用性(可以使用Get-AddomainController cmdlet获得DC列表)。让我们检查DC上的以下服务(Portqry工具中有类似的“域和信任”规则):

  • RPC - TCP/135
  • LDAP - TCP/389
  • LDAP - TCP/3268
  • DNS - TCP/53
  • Kerberos - TCP/88
  • SMB - TCP/445

$Ports = "135","389","636","3268","53","88","445","3269", "80", "443"
$AllDCs = Get-ADDomainController -Filter * | Select-Object Hostname,Ipv4address
ForEach($DC in $AllDCs){
Foreach ($P in $Ports){
$check=Test-NetConnection $DC.Ipv4address -Port $P -WarningAction SilentlyContinue
If ($check.tcpTestSucceeded -eq $true)
{Write-Host $DC.hostname $P -ForegroundColor Green -Separator " => "}
else
{Write-Host $DC.hostname $P -Separator " => " -ForegroundColor Red}
}
}

该脚本检查域控制器上指定的TCP端口,如果任何端口不可用,它将以红色突出显示它们(您可以将此PowerShell脚本作为Windows Service运行)。

PowerShell中的简单TCP/IP端口扫描仪

您可以使用PowerShell来实现一个简单的IP扫描仪,该IP扫描仪可扫描远程主机或IP子网中的开放/封闭TCP端口。

扫描192.168.1.100和192.168.1.150之间的IP地址范围,并显示具有端口3389打开的计算机:

foreach ($ip in 100..150) {Test-NetConnection -Port 3389 -InformationLevel "Detailed" 192.168.1.$ip}

扫描远程主机上的一系列TCP端口(从1到1024):

foreach ($port in 1..1024) {If (($a=Test-NetConnection srvfs01 -Port $port -WarningAction SilentlyContinue).tcpTestSucceeded -eq $true){ "TCP port $port is open!"}}

如何使用PowerShell列出Windows上的开放端口

使用获取NETTCPCCONNECTION列出本地计算机上打开的端口的cmdlet(这是powershell等效的NETSTAT)。计算机上所有打开的TCP端口的列表可以看到如下:

Get-NetTcpConnection -State Listen | Select-Object LocalAddress,LocalPort| Sort-Object -Property LocalPort | Format-Table

您还可以使用Get-NettCPConnection CMDLET列出活动的TCP/IP连接。

如果要找出在计算机上的特定端口上侦听哪个程序(过程),请使用以下命令(其中443是您要检查的端口号):

Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess | ft Id, ProcessName, UserName, Path