首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >powershell验证ntpserver udp协议123端口的连通性

powershell验证ntpserver udp协议123端口的连通性

原创
作者头像
Windows技术交流
发布2025-09-22 17:39:19
发布2025-09-22 17:39:19
2490
举报
文章被收录于专栏:Windows技术交流Windows技术交流

Test-NetConnection可以验证TCP,不能验证UDP,ntpserver是UDP协议,默认123端口,因此本方法不适用

代码语言:txt
复制
Test-NetConnection -ComputerName 169.254.10.10 -Port 80 -InformationLevel Detailed

①使用w32tm命令

代码语言:txt
复制
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

代码语言:txt
复制
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
}
powershell验证ntpserver连通性.zip

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档