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

如何用tshark捕获接收端的组播UDP入站消息?

如何捕获接收端的入站组播UDP消息

应用A向应用B发送组播消息,应用日志显示已成功完成连接建立与消息收发,日志内容如下:

Sender: 48704 -> /239.6.7.8:46655
Receiver: /172.17.95.17:48704, Hello, world!
Sender: 48704 -> /239.6.7.8:46655
Receiver: /172.17.95.17:48704, Hello, world!
Sender: 48704 -> /239.6.7.8:46655
Receiver: /172.17.95.17:48704, Hello, world!

但使用tshark捕获时,仅能抓到发送端发出的消息,tshark输出如下:

[hudson@edg-perf09 ~]$ tshark -ni any | grep "46655"
Capturing on 'any'
0.114114866 172.17.95.17 -> 239.6.7.8    UDP 57 Source port: 48704  Destination port: 46655
1.115497174 172.17.95.17 -> 239.6.7.8    UDP 57 Source port: 48704  Destination port: 46655
2.116822371 172.17.95.17 -> 239.6.7.8    UDP 57 Source port: 48704  Destination port: 46655
3.118153942 172.17.95.17 -> 239.6.7.8    UDP 57 Source port: 48704  Destination port: 46655
4.119370365 172.17.95.17 -> 239.6.7.8    UDP 57 Source port: 48704  Destination port: 46655
5.120568524 172.17.95.17 -> 239.6.7.8    UDP 57 Source port: 48704  Destination port: 46655
6.121715504 172.17.95.17 -> 239.6.7.8    UDP 57 Source port: 48704  Destination port: 46655

解决步骤

  • 确认接收端主机已加入目标组播组
    组播包不会被网卡默认转发到用户空间,除非主机已加入对应组播组。执行以下命令检查:

    ip maddr show
    

    如果输出中没有239.6.7.8的记录,手动加入组播组(替换<网卡名>为实际网卡,比如eth0或docker0):

    sudo ip addr add 239.6.7.8 dev <网卡名>
    # 或者用路由命令
    sudo route add -net 239.0.0.0 netmask 240.0.0.0 dev <网卡名>
    
  • 调整tshark捕获参数
    抓组播包需要root权限,且需明确指定捕获规则:

    • 直接捕获目标端口和组播地址的流量:
      sudo tshark -ni <网卡名> udp port 46655 and ip dst 239.6.7.8
      
    • 如果要捕获所有组播流量:
      sudo tshark -ni any ip multicast
      

    另外,部分网卡默认关闭多播功能,需先启用:

    sudo ip link set <网卡名> multicast on
    
  • 检查接收端应用的绑定配置
    应用B必须绑定到0.0.0.0(全地址监听)或目标组播地址239.6.7.8,才能接收组播包。如果应用仅绑定了单播地址(比如172.17.95.17),内核不会将组播包递交给应用,抓包工具也无法捕获到对应的入站流量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:15:57