Отправка пакетов ipv6 через RAW_Sockets в golang - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь отправить пакеты 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)

...