
Test-NetConnection可以验证TCP,不能验证UDP,ntpserver是UDP协议,默认123端口,因此本方法不适用
Test-NetConnection -ComputerName 169.254.10.10 -Port 80 -InformationLevel Detailed①使用w32tm命令
w32tm /stripchart /computer:ntp.tencent.com /dataonly /samples:1②Test-NetConnection -ComputerName ntp.tencent.com -Port 123 -InformationLevel Detailed 可以测试TCP连通性,并不能测试UDP连通性。安装https://nmap.org/dist-old/nmap-5.35DC1-setup.exe 后,用nmap -sU -p 123 ntp.tencent.com测试是通的

③不想安装第三方软件,powershell 如何测试udp连通性?
构造 48 字节 NTP 请求(Mode=3),通过 UdpClient 发送到 UDP 123 并等待响应,用于验证 UDP 连通性且服务有回应。
存为Test-UdpNtp.ps1,PowerShell 运行示例:
powershell -ExecutionPolicy Bypass -File .\Test-UdpNtp.ps1 -Server ntp.tencent.com -TimeoutMs 2000
powershell -ExecutionPolicy Bypass -File .\Test-UdpNtp.ps1 -Server ntp.aliyun.com -TimeoutMs 2000
param(
[Parameter(Mandatory=$false)]
[string]$Server = "ntp.aliyun.com",
[Parameter(Mandatory=$false)]
[int]$Port = 123,
[Parameter(Mandatory=$false)]
[int]$TimeoutMs = 2000
)
function Test-UdpNtp {
param(
[string]$Server,
[int]$Port = 123,
[int]$TimeoutMs = 2000
)
# Build minimal NTP request packet: 48 bytes, first byte 0x1B (LI=0, VN=3, Mode=3)
$packet = New-Object byte[] 48
$packet[0] = 0x1B
$udp = $null
try {
$udp = [System.Net.Sockets.UdpClient]::new()
$udp.Client.ReceiveTimeout = $TimeoutMs
# Connect sets default remote endpoint (no TCP-style handshake)
$udp.Connect($Server, $Port)
# Send NTP request
[void]$udp.Send($packet, $packet.Length)
# Receive response
$remoteEP = [System.Net.IPEndPoint]::new([System.Net.IPAddress]::Any, 0)
$response = $udp.Receive([ref]$remoteEP)
if ($response -and $response.Length -ge 48) {
return @{
Reachable = $true
Server = $Server
Port = $Port
RemoteAddress = $remoteEP.Address.ToString()
RemotePort = $remoteEP.Port
ResponseLength = $response.Length
Message = "UDP reachable, NTP response received"
}
} else {
return @{
Reachable = $false
Server = $Server
Port = $Port
Message = "Received data with unexpected length: $($response.Length)"
}
}
}
catch [System.Net.Sockets.SocketException] {
return @{
Reachable = $false
Server = $Server
Port = $Port
Error = $_.Exception.Message
Message = "No response or network error (timeout/firewall/packet drop)"
}
}
catch {
return @{
Reachable = $false
Server = $Server
Port = $Port
Error = $_.Exception.Message
Message = "Unknown error occurred"
}
}
finally {
if ($udp) { $udp.Close() }
}
}
# Execute test and print result
$result = Test-UdpNtp -Server $Server -Port $Port -TimeoutMs $TimeoutMs
if ($result.Reachable) {
Write-Host "[OK] $($result.Message): $($result.Server):$($result.Port) from $($result.RemoteAddress):$($result.RemotePort), response length $($result.ResponseLength) bytes" -ForegroundColor Green
exit 0
} else {
if ($result.Error) {
Write-Host "[FAIL] $($result.Message): $($result.Server):$($result.Port) error: $($result.Error)" -ForegroundColor Red
} else {
Write-Host "[FAIL] $($result.Message): $($result.Server):$($result.Port)" -ForegroundColor Red
}
exit 2
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。