2017-02-11 5 views
0

이 메시지를 로컬 수신기 (또는 tcpdump을 통해)에서 추적 할 수있는 UDPv6 데이터 그램을 보내야합니다.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 (내 IPv6 주소는 ifconfig에 따라)까지 보내려고 할 때도 마찬가지입니다.

답변

2

두 경우 모두 (링크 로컬 및 인터페이스 로컬 멀티 캐스트) 스코프 ID를 지정하는 것을 잊었습니다. 이렇게하지 않으면 사용할 인터페이스를 결정할 수 없으며 운영 체제에서 Invalid argument 오류가 발생합니다.

net.UDPAddrZone 필드를 사용하여 범위 ID를 저장합니다. Zone을 명시 적으로 설정하거나 percent-suffix notation을 사용하여 제공했는지 확인해야합니다.

+0

감사합니다. 내 카드 주소에 대해'write : connection refused'를 얻습니다. (링크 로컬) 멀티 캐스트 주소는 예상대로 작동합니다. – ababo