当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 检查打开(侦听)端口

作者:精品下载站 日期:2024-12-14 20:03:06 浏览:18 分类:玩电脑

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


在 PowerShell 中,您可以使用 Test-NetConnection cmdlet 检查远程计算机上的端口是否可用(打开)。您可以使用此 cmdlet 检查远程服务器或网络服务的响应和可用性、测试 TCP 端口是否被防火墙阻止、检查 ICMP 可用性和路由。实际上,

Test-NetConnection

取代了几种流行的网络管理工具,例如

ping

,

tracert

,

telnet

,

pathping

、TCP端口扫描器等

使用 Test-NetConnection 检查打开的 TCP 端口

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

Test-NetConnection -ComputerName ny-msg01 -Port 25

注意。您可以使用 Test-NetConnection cmdlet 仅测试 TCP 端口连接。但是,您无法使用 cmdlet 检查远程 UDP 端口的可用性。

Test-NetConnection 命令的别名为 TNC。同一命令的简化版本如下所示:

TNC ny-msg01 -Port 25

[玩转系统] 使用 PowerShell 检查打开(侦听)端口

我们看一下命令的结果:

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=FalseTcpTestSucceeded= True,这很可能意味着 ICMP Echo 请求 (ping) 在远程计算机上被禁用。

如果您运行不带参数的Test-NetConnection,它将检查计算机是否已连接到互联网(检查网络的可用性)

internetbeacon.msedge.net

主持人)。

[玩转系统] 使用 PowerShell 检查打开(侦听)端口

您可以添加 -InformationLevelDetailed 选项来在检查远程 TCP 端口时显示详细信息:

TNC 192.168.32.101 -Port 3389 -InformationLevel Detailed

[玩转系统] 使用 PowerShell 检查打开(侦听)端口

该 cmdlet 有一个特殊参数 -CommonTCPPort,它允许您指定已知网络协议(HTTP、RDP、SMB、WINRM)的名称。

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

Test-NetConnection -ComputerName a-d.site -CommonTCPPort HTTP

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

Test-NetConnection ny-rds1 -CommonTCPPort RDP

您可以列出 Test-NetConnection cmdlet 返回的所有参数:

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

[玩转系统] 使用 PowerShell 检查打开(侦听)端口

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

TNC ny-msg1 -Port 25 -InformationLevel Quiet

该 cmdlet 返回

True

,这意味着远程 TCP 端口已打开。

[玩转系统] 使用 PowerShell 检查打开(侦听)端口

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

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

[玩转系统] 使用 PowerShell 检查打开(侦听)端口

您可以使用 Test-NetConnection cmdlet 通过使用 -TraceRoute 参数(类似于内置的

tracert

Windows 中的命令)。您可以使用-Hops参数限制路由检查期间的最大跳数。

Test-NetConnection ny-man01 -TraceRoute

Cmdlet 返回以毫秒为单位的网络访问延迟摘要(

PingReplyDetails (RTT): 41 ms

)以及通往目标主机途中的所有路由器的 IP 地址。

[玩转系统] 使用 PowerShell 检查打开(侦听)端口

PowerShell:检查多个主机上的开放端口

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

servers.txt

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

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

您可以使用简单的监视 PowerShell 脚本来检查远程服务器的可用性,并在任何服务器不可用时显示弹出通知。

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

  • RPC - TCP/135

  • LDAP - TCP/389

  • LDAP - TCP/3268

  • DNS - TCP/53

  • Kerberos - TCP/88

  • 中小企业-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 服务运行)。

[玩转系统] 使用 PowerShell 检查打开(侦听)端口

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

您可以使用 PowerShell 实现简单的 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 检查打开(侦听)端口

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

使用 Get-NetTCPConnection cmdlet 列出本地计算机上打开的端口(这相当于 PowerShell

NETSTAT

)。可以查看电脑上所有开放的TCP端口列表,如下:

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

[玩转系统] 使用 PowerShell 检查打开(侦听)端口

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

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

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

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯