如何使用Powershell检查开放端口



我想编写一个脚本来检查 radom IP 或主机名以查看端口是否打开。这是我到目前为止所拥有的。脚本名称为检查端口。

foreach ($xhost in $computername){
    Write-Host $xhost
    foreach ($port in $ports) {
        $Socket = New-Object System.Net.Sockets.TCPClient            
        $Connection = $Socket.BeginConnect($xhost,$port,$null,$null) 
        $Connection.AsyncWaitHandle.WaitOne(5000,$false) | out-null
        if ($Connection -eq $true)
            { write-host = "$xhost port $port is open" }
        else
            { write-host = "port $port is closed" }      
        $Socket.EndConnect($Connection)
        $Socket.Close()
   }
}

我想通过以下方式输入值:.\checkport '192.186.1.5'或'192.168.1.5', '192.168.1.105', 192.168.1.110' |检查端口

它似乎没有读取 IP 地址或显示结果。

我想知道是否有人可以指出我可以告诉我我在这个脚本中做错了什么?

我已经能够使用Boe Prox的"Test-Port"功能进行类似的扫描/报告功能,该代码可在PoshCode上找到:

http://poshcode.org/2514

当我需要测试端口的目录运行状况时,我构建了一个带有"端口"和"协议"列的 csv,然后为每个要检查的端口添加了端口号/协议。这在以下脚本中使用:

. .test-port.ps1
$computersToCheck = get-content .computers.txt
$portList = Import-CSV .portList.csv
foreach($entry in $portList)
{
    $testPortParams = @{
        port = $($entry.port)
    }   
    if( $($entry.protocol) -eq "tcp")
    { $testPortParams += @{ TCP = $true } }
    else
    { $testPortParams += @{ UDP = $true } }
    $outLog = "portTest-$($entry.port)-$($entry.protocol).txt"
    $computersToCheck | 
        Test-Port @testPortParams |
        Sort-Object -Property open,name -descending | 
        format-table -auto -outVariable status
    Add-Content -path $outLog -value $status 
}

您当然可以构建一个馈送器脚本来构建要扫描的 IP 地址和端口的范围。

最新更新