Test-NetConnection cmdleti ile TCP port kontrolünü gerçekleştirebiliyoruz. Peki ya UDP? Sürekli makineye nmap yüklemekten sıkılanlar, elimin altında bir function dursun kullanayım diyenler. Aşağıdaki function tam size göre :p
function Test-UDPConnection { param ( [string]$ComputerName, [int]$Port ) $UDPClient = New-Object System.Net.Sockets.UdpClient $Timeout = 1000 $UDPClient.Client.ReceiveTimeout = $Timeout try { $UDPClient.Connect($ComputerName, $Port) $Message = [byte[]]@(0) $UDPClient.Send($Message, $Message.Length) > $null $RemoteEndPoint = New-Object System.Net.IPEndPoint([System.Net.IPAddress]::Any, 0) $Response = $UDPClient.Receive([ref]$RemoteEndPoint) if ($Response) { "UDP bağlantısı $ComputerName üzerinde yer alan ve port değeri $Port olan servise başarılı şekidle sağlandı. Port açık ve cevap veriyor.." } else { "Cevap alınamadı port kapalı." } } catch { "UDP bağlantısı $ComputerName bu cihaz üzerinde yerlan portu $Port olan alana sağlanamadı.. Error: $_" } finally { $UDPClient.Close() } } # Kullanım örneği: Test-UDPConnection -ComputerName 192.168.1.2 -Port 53
“Powershell ile UDP Port Taraması” üzerine 2 yorum
Scriptinizde sorun var. bilgisayar adını çözdüğü sürece hataya düşmüyor. Örn. yok.gov.tr üzerinden port 53 sorgulaması yapldığında başarışı diyor. Başka portlar da test ettik.
Selam hocam haklısın, geri dönüş için teşekkürler. Aslında bunun sebebi UdpClient.Connect kullanarak hedef makineye UDP bağlantısı kurmayı deniyor. Ancak UdpClient.Connect, UDP protokolünün doğası gereği bağlantı doğrulaması yapmaz ve sadece hedef adresle bir bağlantı kurar gibi görünür. Eğer bir DNS çözümleme varsa, sadece çözümleme başarılıysa bağlantı başarılı olarak görünebilir. Fakat burada hedef UDP portunun gerçekten açık olup olmadığını anlamak için daha ileri bir doğrulama ekleyerek scripti güncelledim.