2

我想编写一个脚本来检查随机 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' or '192.168.1.5', '192.168.1.105', 192.168.1.110' | 检查端口

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

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

4

1 回答 1

1

我已经能够将 Boe Prox 的“测试端口”功能用于类似的扫描/报告功能,代码可在 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 地址和端口范围。

于 2013-11-01T23:00:05.437 回答