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

[玩转系统] PowerShell:使用 Test-OpenPort 测试开放的 TCP 端口(多个主机、多个端口号)

作者:精品下载站 日期:2024-12-14 07:26:01 浏览:15 分类:玩电脑

PowerShell:使用 Test-OpenPort 测试开放的 TCP 端口(多个主机、多个端口号)


正如标题所说,今天的重点是端口扫描。当一台计算机向另一台计算机发送 SYN 时,远程计算机通常会用 SYN + ACK 或 RST 进行应答。通过这个事实,我们可以测试端口是否打开。

[玩转系统] PowerShell:使用 Test-OpenPort 测试开放的 TCP 端口(多个主机、多个端口号)

[玩转系统] PowerShell:使用 Test-OpenPort 测试开放的 TCP 端口(多个主机、多个端口号)

可以使用不同的端口扫描仪来测试端口是否开放。或者 Test-NetConnection 或自行创建的脚本。记住测试网络连接:

[玩转系统] PowerShell:使用 Test-OpenPort 测试开放的 TCP 端口(多个主机、多个端口号)

但是,如果您尝试测试多台计算机和多个端口,您将面临错误消息。

[玩转系统] PowerShell:使用 Test-OpenPort 测试开放的 TCP 端口(多个主机、多个端口号)

下面的函数解决了这个问题。 Test-OpenPort 允许同时测试多台计算机和多个端口。

测试开放端口

在我们讨论函数本身之前,我想展示一下我的函数的实际应用。该函数有两个参数:Target 和 Port。


Test-OpenPort -Target 192.168.0.1 -Port 80

[玩转系统] PowerShell:使用 Test-OpenPort 测试开放的 TCP 端口(多个主机、多个端口号)

这些参数没有命名,因此您可以省略参数名称。


Test-OpenPort 192.168.0.1 80

[玩转系统] PowerShell:使用 Test-OpenPort 测试开放的 TCP 端口(多个主机、多个端口号)

您也可以省略目标。此参数的默认值为 localhost。


Test-OpenPort -Port 80,443

[玩转系统] PowerShell:使用 Test-OpenPort 测试开放的 TCP 端口(多个主机、多个端口号)

在多台计算机和端口上运行需要使用逗号。


Test-OpenPort 192.168.0.1,a-d.site -Port 80,443

[玩转系统] PowerShell:使用 Test-OpenPort 测试开放的 TCP 端口(多个主机、多个端口号)

屏幕的输出是一个对象。因此,您可以使用选择对象或格式命令(格式表...)自定义此对象


Test-OpenPort 192.168.0.1,a-d.site -Port 80,443,53 | Sort-Object Status

[玩转系统] PowerShell:使用 Test-OpenPort 测试开放的 TCP 端口(多个主机、多个端口号)

为了获得更甜美的景色:


Test-OpenPort 192.168.0.1,a-d.site -Port 80,443,53 | Sort-Object Status | Out-GridView

[玩转系统] PowerShell:使用 Test-OpenPort 测试开放的 TCP 端口(多个主机、多个端口号)

功能

将此函数复制到您的 PowerShell ISE 会话中,然后按绿色启动按钮。


function Test-OpenPort {

<# 

.SYNOPSIS
Test-OpenPort is an advanced Powershell function. Test-OpenPort acts like a port scanner. 

.DESCRIPTION
Uses Test-NetConnection. Define multiple targets and multiple ports. 

.PARAMETER
Target
Define the target by hostname or IP-Address. Separate them by comma. Default: localhost 

.PARAMETER
Port
Mandatory. Define the TCP port. Separate them by comma. 

.EXAMPLE
Test-OpenPort -Target a-d.site,cnn.com,10.0.0.1 -Port 80,443 

.NOTES
Author: Patrick Gruenauer
Web:
https://a-d.site 

.LINK
None. 

.INPUTS
None. 

.OUTPUTS
None.

#>

[CmdletBinding()]

param

(

[Parameter(Position=0)]
$Target='localhost',

[Parameter(Mandatory=$true, Position=1, Helpmessage = 'Enter Port Numbers. Separate them by comma.')]
$Port

)

$result=@()

foreach ($t in $Target)

{

foreach ($p in $Port)

{

$a=Test-NetConnection -ComputerName $t -Port $p -WarningAction SilentlyContinue

$result+=New-Object -TypeName PSObject -Property ([ordered]@{
'Target'=$a.ComputerName;
'RemoteAddress'=$a.RemoteAddress;
'Port'=$a.RemotePort;
'Status'=$a.tcpTestSucceeded

})

}

}

Write-Output $result

}

使其永久化

如果您喜欢我的方法,请打开 PowerShell ISE。将该函数复制到您的 ISE 会话中。在 C:\Program Files\Windows PowerShell\Modules 中创建一个文件夹,并将代码保存为 psm1 文件。确保您的文件名和文件夹名称匹配。

[玩转系统] PowerShell:使用 Test-OpenPort 测试开放的 TCP 端口(多个主机、多个端口号)

[玩转系统] PowerShell:使用 Test-OpenPort 测试开放的 TCP 端口(多个主机、多个端口号)

关闭 PowerShell。再次打开 PowerShell。该命令现在可供所有用户使用。享受 Test-OpenPort 带来的乐趣!

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

取消回复欢迎 发表评论:

关灯