Я пытаюсь отправить пакеты IPv6 в Голанге.Поэтому я использую syscall.Socket(syscall.AF_INET6, syscall.SOCK_RAW, syscall.IPPROTO_RAW)
Пакеты IPv6 выходят из строя, но если я проверяю их с помощью Wireshark, они деформируются.
Hexdump Wireshark:
0000 cc ce 1e 3b 13 9b ac bc 32 79 d5 5f 86 dd 60 0d
0010 a3 80 00 30 ff ff 20 03 00 cd df 1e 3d 00 91 17
0020 c3 e0 8b b3 ff fe 2a 00 14 50 40 01 08 1e 00 00
0030 00 00 00 00 20 03 6a ba ff e0 00 08 3a 40 20 03
0040 00 cd df 1e 3d 00 08 51 b8 bd e1 17 94 85 2a 00
0050 14 50 40 01 08 1e 00 00 00 00 00 00 20 03 80 00
0060 00 00 be ef 00 01
Hexdump Buffer:
00000000 6a ba ff e0 00 08 3a 40 20 03 00 cd df 1e 3d 00
00000010 08 51 b8 bd e1 17 94 85 2a 00 14 50 40 01 08 1e
00000020 00 00 00 00 00 00 20 03 80 00 00 00 be ef 00 01
Таким образом, правильный заголовок начинается с позиции 36 в дампе wireshark
Учебник для ipv4 https://www.darkcoding.net/software/raw-sockets-in-go-link-layer/
buffer := createHeader()
sockWrite, _ := syscall.Socket(syscall.AF_INET6, syscall.SOCK_RAW, syscall.IPPROTO_RAW)
var addrArr [16]byte
copy(addrArr[:], destAddr.IP)
addr := syscall.SockaddrInet6{
Port: 0,
Addr: addrArr,
}
syscall.Sendto(sockWrite, buffer, 0, &addr)