5

我想调试一些多播问题,我希望有一些小程序/实用程序来显示传入的多播数据包。

从发送机器(A),我使用 Richard Stevens 的sock程序(随他的 TCP/IP 插图书籍 Vol1 提供)发送多播数据包(源端口=目标端口=7000),如下所示:

sock -u -b 7000 224.0.0.7 7000

在接收机器(B)上,我可以使用 Wireshark 捕获发送的数据包,但是,sock在 B 上运行的相同命令没有报告接收到任何内容。

然后,我应该在 B 上使用什么程序来查看传入的多播数据包,除了 Wireshark 是矫枉过正的。

Linux 和 Windows 程序都受到欢迎。

在此处输入图像描述

4

5 回答 5

12

这是一个将打印传入数据的python脚本;

# Multicast client
# Adapted from: http://chaos.weblogs.us/archives/164

import socket

ANY = "0.0.0.0" 
MCAST_ADDR = "224.0.0.7"
MCAST_PORT = 7000

# Create a UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)

# Allow multiple sockets to use the same PORT number
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

# Bind to the port that we know will receive multicast data
sock.bind((ANY,MCAST_PORT))

# Tell the kernel that we want to add ourselves to a multicast group
# The address for the multicast group is the third param
status = sock.setsockopt(socket.IPPROTO_IP,
socket.IP_ADD_MEMBERSHIP,
socket.inet_aton(MCAST_ADDR) + socket.inet_aton(ANY))

# setblocking(0) is equiv to settimeout(0.0) which means we poll the socket.
# But this will raise an error if recv() or send() can't immediately find or send data. 
sock.setblocking(0)

while 1:
    try:
        data, addr = sock.recvfrom(1024)
    except socket.error as e:
        pass
    else:
        print "From: ", addr
        print "Data: ", data
于 2013-03-08T12:16:40.380 回答
3

您可以使用 netcat (nc) 来做到这一点:

netcat -vv -l -p 1234 -u

这意味着 netcat 正在以 UDP 模式详细侦听 localhost 的端口 1234。

于 2015-01-27T15:17:43.317 回答
0

我以前写过一个多播测试应用程序。

你可以在这里查看:https ://github.com/eranbetzalel/SimpleMulticastAnalyzer

于 2013-09-03T11:41:02.643 回答
0

在 Windows 上,我发现这些实用程序对于调试 udp 非常方便(在两端)

http://www-personal.umich.edu/~bdr/et/mcast-windows.html#download

于 2017-03-14T07:23:15.397 回答
0

这是我在使用 netcat 搜索捕获多播数据包时的第一次命中,我发现 tcpdump 做得更好。只是为其他点击这篇文章的人做个笔记。

安装:

sudo apt install tcpdump

跑步:

tcpdump -c 8 -n -i eth0 portrange 1234-1239

看起来可能也有 Windows 端口,但我没有尝试:https ://www.winpcap.org/windump/

于 2019-03-05T01:28:33.647 回答