Powershell
June 8, 2023

Как проверить открыт ли порт через PowerShell

Иногда возникает ситуация, когда надо проверить доступность порт на каком либо ресурсе. И если проверить открыт ли порт TCP мы знаем как:

Test-NetConnection <host or ip> -port <port>

то как проверить открыт ли порт UDP - не всегда. Проверить открыт ли порт UDP можно, но немного сложнее:

$IPAddress = "<host or ip>"
$Port = <port>
$Timeout = 2000  # Время ожидания ответа в миллисекундах

$udpClient = New-Object System.Net.Sockets.UdpClient

try {
    $localEndPoint = New-Object System.Net.IPEndPoint([System.Net.IPAddress]::Any, 0)
    $udpClient.Client.Bind($localEndPoint)
    
    $result = $udpClient.BeginReceive($null, $null)
    $udpClient.Connect($IPAddress, $Port)
    $null = $udpClient.Send([byte[]](0), 0)
    
    $success = $result.AsyncWaitHandle.WaitOne($Timeout)
    
    if ($success) {
        $remoteEndPoint = [System.Net.IPEndPoint]$udpClient.Client.RemoteEndPoint
        Write-Host "UDP Port $Port is open on $IPAddress"
    } else {
        Write-Host "UDP Port $Port is closed or timed out on $IPAddress"
    }
} catch {
    Write-Host "Error occurred: $_"
} finally {
    $udpClient.Close()
}