It only detects Renderer on the PC, not within the LAN. Not sure if there is still maintenance, but this is the only tool of that kind. I dont know why Microsoft itself is not implementing it. Please consider an update.
Since i work myself on UPnP in WSL i most probably know where the bug is. You do the M-Search on the wrong IP address . Windows has quite some internal IP addresses and interface names.
Try: powershell.exe -ExecutionPolicy Bypass -File wsl_scan.ps1
script:
try {
$sock = New-Object System.Net.Sockets.Socket([System.Net.Sockets.AddressFamily]::InterNetwork,
[System.Net.Sockets.SocketType]::Dgram,
[System.Net.Sockets.ProtocolType]::Udp)
$sock.Connect("8.8.8.8", 53)
$localEP = $sock.LocalEndPoint
$localIP = $localEP.Address.ToString()
$sock.Close()
} catch {
Write-Error "Could not determine local IP via socket method: $_"
exit 1
}
if (-not $localIP) {
Write-Error "No valid local IPv4 address found."
exit 1
}
$multicastAddress = "239.255.255.250"
$port = 1900
$request = @"
M-SEARCH * HTTP/1.1
HOST: ${multicastAddress}:${port}
MAN: "ssdp:discover"
MX: 3
ST: ssdp:all
"@
$bytes = [Text.Encoding]::ASCII.GetBytes($request)
Bind to the detected local IP
$localEP = New-Object System.Net.IPEndPoint ([System.Net.IPAddress]::Parse($localIP)), 0
$udpClient = New-Object System.Net.Sockets.UdpClient($localEP)
$udpClient.JoinMulticastGroup([System.Net.IPAddress]::Parse($multicastAddress))
$remoteEP = New-Object System.Net.IPEndPoint ([System.Net.IPAddress]::Parse($multicastAddress)), $port
Send request
$udpClient.Send($bytes, $bytes.Length, $remoteEP) | Out-Null
Write-Host "M-SEARCH sent via $localIP..."
Collect responses
$timeoutMs = 5000
$stopWatch = [System.Diagnostics.Stopwatch]::StartNew()
while ($stopWatch.ElapsedMilliseconds -lt $timeoutMs) {
if ($udpClient.Available -gt 0) {
$remote = New-Object System.Net.IPEndPoint([System.Net.IPAddress]::Any, 0)
$responseBytes = $udpClient.Receive([ref]$remote)
$response = [Text.Encoding]::ASCII.GetString($responseBytes)
Write-Host "Response from $($remote.Address):n$responsen---`n"
} else {
Start-Sleep -Milliseconds 100
}
}
$udpClient.Close()
It only detects Renderer on the PC, not within the LAN. Not sure if there is still maintenance, but this is the only tool of that kind. I dont know why Microsoft itself is not implementing it. Please consider an update.
Since i work myself on UPnP in WSL i most probably know where the bug is. You do the M-Search on the wrong IP address . Windows has quite some internal IP addresses and interface names.
Try: powershell.exe -ExecutionPolicy Bypass -File wsl_scan.ps1
script:
try {
$sock = New-Object System.Net.Sockets.Socket([System.Net.Sockets.AddressFamily]::InterNetwork,
[System.Net.Sockets.SocketType]::Dgram,
[System.Net.Sockets.ProtocolType]::Udp)
} catch {
Write-Error "Could not determine local IP via socket method: $_"
exit 1
}
if (-not $localIP) {
Write-Error "No valid local IPv4 address found."
exit 1
}
$multicastAddress = "239.255.255.250"
$port = 1900
$request = @"
M-SEARCH * HTTP/1.1
HOST: ${multicastAddress}:${port}
MAN: "ssdp:discover"
MX: 3
ST: ssdp:all
"@
$bytes = [Text.Encoding]::ASCII.GetBytes($request)
Bind to the detected local IP
$localEP = New-Object System.Net.IPEndPoint ([System.Net.IPAddress]::Parse($localIP)), 0
$udpClient = New-Object System.Net.Sockets.UdpClient($localEP)
$udpClient.JoinMulticastGroup([System.Net.IPAddress]::Parse($multicastAddress))
$remoteEP = New-Object System.Net.IPEndPoint ([System.Net.IPAddress]::Parse($multicastAddress)), $port
Send request
$udpClient.Send($bytes, $bytes.Length, $remoteEP) | Out-Null
Write-Host "M-SEARCH sent via $localIP..."
Collect responses
$timeoutMs = 5000
$stopWatch = [System.Diagnostics.Stopwatch]::StartNew()
while ($stopWatch.ElapsedMilliseconds -lt $timeoutMs) {
if ($udpClient.Available -gt 0) {
$remote = New-Object System.Net.IPEndPoint([System.Net.IPAddress]::Any, 0)
$responseBytes = $udpClient.Receive([ref]$remote)
$response = [Text.Encoding]::ASCII.GetString($responseBytes)
Write-Host "Response from $($remote.Address):
n$responsen---`n"} else {
Start-Sleep -Milliseconds 100
}
}
$udpClient.Close()