如何用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
相关产品推荐
相关产品推荐

