2017-02-11 46 views
0

我需要發送一個UDPv6數據報,能夠通過本地接收器(或通過tcpdump)跟蹤此消息。在golang本地發送UDPv6

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地址)時,會發生同樣的情況。

回答

2

在這兩種情況下(鏈路本地和接口本地多播),您已經忘記指定範圍ID。沒有這個,就不可能確定使用哪個接口,並且從操作系統中得到一個Invalid argument錯誤。

net.UDPAddr使用Zone字段來存儲範圍ID。您需要確保您提供了一個,通過明確設置Zone或使用percent-suffix notation

+0

謝謝!對於我的卡地址,我得到'write:connection refused',對於(鏈路本地)多播地址,它按預期工作。 – ababo