我一直在使用 https://github.com/ottomata/multicast-tester 来配置一个主机来侦听组播流量,以便我可以使用tcpdump捕获它。这是简单的部分:
ip route add 224.0.0.0/4 dev eth0
multicast-receiver -g 239.255.0.2 -p 5568
tcpdump -A -X -veni wlan0 dst host 239.255.0.2
tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:50:12.879565 10:dd:b1:99:16:45 > 12:42:99:5a:b9:c1, ethertype IPv4 (0x0800), length 680: (tos 0x0, ttl 32, id 7747, offset 0, flags [none], proto UDP (17), length 666)
192.168.1.71.60230 > 239.255.0.2.5568: UDP, length 638
0x0000: 4500 029a 1e43 0000 2011 c81f c0a8 0147 E....C.........G
0x0010: efff 0002 eb46 15c0 0286 de35 0010 0000 .....F.....5....
0x0020: 4153 432d 4531 2e31 3700 0000 726e 0000 ASC-E1.17...rn..
0x0030: 0004 9ecf d3c6 1b01 7547 a506 37c0 6c96 ........uG..7.l.
0x0040: 7e12 7258 0000 0002 4d2d 5365 7269 6573 ~.rX....M-Series
0x0050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0080: 0000 0000 0000 0000 6400 00a1 0000 0272 ........d......r
0x0090: 0b02 a100 0000 0102 0100 0000 0000 0000 ................
0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x00f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0100: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0110: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0120: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0130: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0140: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0150: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0160: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0170: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0180: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0190: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x01a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x01b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x01c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x01d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x01e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x01f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0200: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0210: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0220: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0230: 0000 0000 0000 0000 0000 0000 0000 000e ................
0x0240: ff00 000e ff00 0000 0000 0000 0000 0000 ................
0x0250: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0260: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0270: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0280: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0x0290: 0000 0000 0000 0000 0000
现在,我想永远循环播放这一帧。我知道我需要将主机重新配置为多播源;但这应该做到:
multicast-sender -g 239.255.0.2 -p 5568
那么现在,我该如何重播我的帧?
我不认为多播发送者能够处理大量的空字符;但 nc 应该能够做到这一点。在修复了帧标题中有关 src 和 dst 字段的一些详细信息后。
对于好奇的人:这是以太网DMX的ASC-E1.17协议;最新的设备使用E1.31或E1.37。这个IP就是宇宙2。端口 5568 似乎是按规范固定的,我相信 DMX 插槽是在帧内内内联发送的(这里我在插槽 421-425 上发送旋转颜色,大约 0x0240)。我的目的是检查污染ACN规范是否容易,并研究是否有人可以访问我的网络可能会扰乱我的工作......以及我应该如何保护我的网络免受问题的影响。但是,购买第二个 ACN 源会比用 nc 锻造框架更广阔,灵活性更低......
我在网络中有另一台计算机来检查寄生虫帧是否已正确注入(并由交换机传输)。
如果此测试失败,我将需要购买其他 ACN 源。
所以,我找到了一个解决方案:
录制帧:
ip route add 224.0.0.0/4 dev wlan0
/root/multicast-tester/bash/multicast-receiver -g 239.255.0.1 -p 556
# start playing a sequence from an ACN master
# and from an other console:
tcpdump -veni wlan0 -c 10 -w /tmp/recc dst host 239.255.0.1
现在,重播帧。以下项目是 tcpreplay 的一个分支: https://github.com/rigtorp/udpreplay 安装后,只需循环重播帧:
while true ; do ./udpreplay -i wlan0 /tmp/recc ; done
您将看到您的 DMX 客户端在各种订单之间抖动。
tcpreplay 包含在 Debian 中;udpreplay 还没有。
我之前的问题是我正在收听错误的 (DMX) 宇宙(2 而不是 1)。
此方法还可用于记录和重放某些 DMX 序列;或者作为家庭编写的 DMX 母版的起点。
使用这种方法,可能可以与其他ACN设备一起玩得开心。