【发布时间】:2016-07-16 16:19:01
【问题描述】:
我需要检查和修改 IPv6 扩展标头。所以我设置了一个原始套接字来监听本地地址上的所有 IP 数据包。
package main
import (
"log"
"net"
)
func main() {
c, err := net.ListenIP("ip6:tcp", &net.IPAddr{
IP: net.IPv6loopback,
Zone: "",
})
if err != nil {
panic(err)
}
buf := make([]byte, 1024)
for {
numRead, ipaddr, err := c.ReadFromIP(buf)
log.Print(numRead, ipaddr, err)
log.Printf("% X\n", buf[:numRead])
}
}
我在连接上尝试了所有Read*() 方法,但似乎它们只是返回没有标头的有效负载。
所以我的问题是:如何访问数据包的 IPv6 标头?
【问题讨论】:
-
需要注意的是,很少使用 IPv6 扩展标头,不幸的是,路径中的许多 ISP 会阻止或去除扩展标头,因为它们可用于攻击。
标签: sockets networking go ipv6