Go 戈朗没有';t向多播组发送UDP数据包

Go 戈朗没有';t向多播组发送UDP数据包,go,udp,multicast,Go,Udp,Multicast,目前我尝试在go中重新实现一个C应用程序。C应用程序的一部分是向多播组发送字符串。这将生成通过tcpdump捕获的以下数据包: 00000000 d4 c3 b2 a1 02 00 04 00 00 00 00 00 00 00 00 00 |................| 00000010 ff ff 00 00 01 00 00 00 14 81 06 56 47 2c 01 00 |...........VG,..| 00000020 46 00 00 00 46 00

目前我尝试在go中重新实现一个C应用程序。C应用程序的一部分是向多播组发送字符串。这将生成通过tcpdump捕获的以下数据包:

00000000  d4 c3 b2 a1 02 00 04 00  00 00 00 00 00 00 00 00  |................|
00000010  ff ff 00 00 01 00 00 00  14 81 06 56 47 2c 01 00  |...........VG,..|
00000020  46 00 00 00 46 00 00 00  33 33 00 02 10 01 04 ce  |F...F...33......|
00000030  ef ca fe 1a 86 dd 60 00  00 00 00 10 11 01 fe 80  |......`.........|
00000040  00 00 00 00 00 00 06 ce  ef ff fe ca fe 1a ff 02  |................|
00000050  00 00 00 00 00 00 00 00  00 00 00 02 10 01 be 8f  |................|
00000060  03 e9 00 10 99 68 6e 6f  64 65 69 6e 66 6f        |.....hnodeinfo|
我尝试用以下代码复制该行为:

const MultiCastGroup string = "ff02:0:0:0:0:0:2:1001"
const Port int = 1001
const Proto string = "udp6"
const MaxDataGramSize int = 8192

var announcedAddr = &net.UDPAddr{IP: net.ParseIP(MultiCastGroup), Port: Port}

buf := []byte("nodeinfo")
unicastConn, _ := net.ListenUDP(Proto, &net.UDPAddr{IP: net.IPv6zero, Port: 0})
unicastConn.WriteToUDP(buf, announcedAddr)
但我认为它不起作用,因为我可以通过tcpdump从中捕获的所有信息是:

00000000  d4 c3 b2 a1 02 00 04 00  00 00 00 00 00 00 00 00  |................|
00000010  ff ff 00 00 01 00 00 00                           |........|
00000018
这包裹似乎连发送都没有。我在Debian气喘机上试过。如果您遇到与golang和UDP类似的问题,是否有人对此进行了检查


提前感谢

您是否尝试在其他主机上收听它

Go(至少在1.4中)对多播上的环回进行了硬编码禁用。也就是说,你看不到自己的数据包

您可以通过调用套接字FD本身上的setsockopt来覆盖此设置,或者:

图书馆可以为你做这件事


或者,您可以从中获取代码(必须四处查看才能找到它)

您是否调用了
socket.JoinGroup
?@否您不必加入要发送给它的多播组。