在golang中本地发送UDPv6

时间:2017-02-11 12:19:39

标签: go udp ipv6

我需要发送一个UDPv6数据报,能够通过本地接收者(或通过tcpdump)跟踪此消息。

daddr, err = net.ResolveUDPAddr("udp6", "[address]:port")
if err != nil {
    return err
}

conn, err := net.DialUDP("udp6", nil, daddr)
if err != nil {
    return err
}
defer conn.Close()

conn.Write(...)

与IPv4不同,此代码不适用于IPv6。例如,当我尝试将数据报发送到多播地址时,例如,至[FF01 :: DB8:0:0]:5000,我得到connect: invalid argument。当我尝试将其发送到[fe80 :: 20c:29ff:fee1:d66]:5000(根据ifconfig我的IPv6地址)时,会发生同样的情况。

1 个答案:

答案 0 :(得分:3)

在这两种情况下(链路本地和接口本地多播),您忘记指定范围ID。如果没有这个,就无法确定使用哪个接口,并且您从操作系统中收到Invalid argument错误。

net.UDPAddr使用Zone字段存储范围ID。您需要确保提供了一个,方法是明确设置Zone或使用percent-suffix notation