一尘不染

在Golang中本地发送UDPv6

go

我需要发送一个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(根据的我的IPv6地址ifconfig)时,也会发生同样的情况。


阅读 309

收藏
2020-07-02

共1个答案

一尘不染

在这两种情况下(链路本地和接口本地多播),您都忘记了指定作用域ID。没有这个,就不可能确定要使用哪个接口,并且您会Invalid argument从操作系统中得到一个错误。

net.UDPAddr使用该Zone字段存储范围ID。您需要通过Zone显式设置或使用百分比后缀表示法来确保已提供了一个。

2020-07-02