You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

局域网内UDP广播消息故障排查求助

UDP广播失效排查问题

我之前有一款软件可以向指定端口发送UDP广播消息,局域网内其他机器都能正常接收,但最近这个功能突然失效了,原因不明。

为了排查问题,我写了以下测试脚本:

发送端脚本(sender.ps1)

$udpClient = New-Object System.Net.Sockets.UdpClient
$endpoint = New-Object System.Net.IPEndPoint ([System.Net.IPAddress]::Broadcast, 20777)
$data = [System.Text.Encoding]::ASCII.GetBytes("Test Message Here")
$udpClient.Send($data, $data.Length, $endpoint)

接收端脚本(receiver.ps1)

$udpClient = New-Object System.Net.Sockets.UdpClient 20777
$endpoint = New-Object System.Net.IPEndPoint ([System.Net.IPAddress]::Any, 0)
while ($true) {
    $data = $udpClient.Receive([ref]$endpoint)
    Write-Output ("Received: " + [System.Text.Encoding]::ASCII.GetString($data))
}

脚本在同一机器上运行时能正常接收消息,但分别在发送端和接收端机器运行时,接收端没有任何输出。

注:这些脚本仅用于调试当前问题,无法确定故障前是否能正常运行。

我已经尝试关闭了防火墙,但问题依然存在;在两台机器上执行arp -a命令都能看到对方设备。

请问我可以采取哪些步骤来排查数据包的流向?


排查步骤
  • 在发送端抓包验证广播是否发出
    使用tshark(Windows)或tcpdump(Linux)在发送端抓包,过滤UDP端口20777的广播包:

    • Windows命令:tshark -i <网卡名称> udp port 20777 and broadcast
    • Linux命令:tcpdump -i <网卡名称> udp port 20777 and broadcast
      如果抓不到包,说明发送端的UDP广播未成功发出,可能是多网卡环境下UdpClient默认绑定网卡不对,可修改脚本指定具体网卡IP发送:
    $udpClient = New-Object System.Net.Sockets.UdpClient("192.168.1.100", 0) # 替换为发送端网卡IP
    $endpoint = New-Object System.Net.IPEndPoint ([System.Net.IPAddress]::Broadcast, 20777)
    $data = [System.Text.Encoding]::ASCII.GetBytes("Test Message Here")
    $udpClient.Send($data, $data.Length, $endpoint)
    
  • 在接收端抓包验证是否收到广播
    同样用抓包工具在接收端监听UDP端口20777流量,过滤规则:udp port 20777。如果能抓到包但脚本无输出,说明接收脚本存在问题;如果抓不到包,说明数据包未到达接收端,问题出在网络链路或中间设备。

  • 检查局域网交换机/路由器的广播限制
    部分设备可能开启了广播风暴抑制或VLAN隔离,导致广播包无法跨设备传输。登录设备管理界面,确认两台机器在同一VLAN,且广播包允许在该VLAN内转发。

  • 验证UDP单播通信是否正常
    修改发送脚本,将广播地址换成接收端具体IP(如[System.Net.IPAddress]::Parse("192.168.1.101")),测试单播是否能正常接收。如果单播正常,说明问题仅出在广播机制;如果单播也失败,排查子网掩码是否一致、IP路由是否正常。

  • 检查系统网络配置与权限

    • Windows系统:执行netsh int ip reset重置网络配置后重启,排查是否有组策略限制UDP广播,或网卡高级设置中是否禁用了广播功能。
    • 确认两台机器子网掩码一致,不在同一子网的广播包无法直接到达。
  • 用第三方工具测试UDP广播
    使用netcat工具验证:

    • 接收端:Linux执行nc -ul 20777,Windows执行nc -u -l -p 20777
    • 发送端:nc -u -b <广播地址> 20777后输入测试消息
      如果netcat能收到消息,说明你的PowerShell脚本存在问题;如果也收不到,问题在系统或网络层面。

内容的提问来源于stack exchange,提问作者Richard Whitehouse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:05:06