Sockets 获取IPv6标头作为数据包的一部分

Sockets 获取IPv6标头作为数据包的一部分,sockets,networking,ipv6,Sockets,Networking,Ipv6,当应用程序将原始套接字与IPv4一起使用时,它们可以使用IP_HDRINCL选项获取(并设置)IPv4报头作为数据包的一部分 类似地,应用程序如何获得作为(IPv6)数据包一部分的IPv6报头?我知道使用原始套接字在这里没有帮助 我可以用ioctl()代替套接字来获得我想要的吗?顺便说一句,我正试图在Linux上实现这一点。IP_HDRINCL应该对IPv4和IPv6都起到同等的作用,因为套接字为您的应用程序提供了原始数据以进行解释。如果没有出现这种情况,请提供创建和读取套接字的实际代码。IPv

当应用程序将原始套接字与IPv4一起使用时,它们可以使用IP_HDRINCL选项获取(并设置)IPv4报头作为数据包的一部分

类似地,应用程序如何获得作为(IPv6)数据包一部分的IPv6报头?我知道使用原始套接字在这里没有帮助


我可以用ioctl()代替套接字来获得我想要的吗?顺便说一句,我正试图在Linux上实现这一点。

IP_HDRINCL应该对IPv4和IPv6都起到同等的作用,因为套接字为您的应用程序提供了原始数据以进行解释。如果没有出现这种情况,请提供创建和读取套接字的实际代码。IPv6有一组不同的选项,等效的选项是
IPv6\u HDRINCL
,但它没有广泛的支持。这意味着您可能需要下拉到原始数据包捕获,libpcap和朋友。@Steve-o:此文档说明此选项只能用于在发送时添加IPv6标头,并且IPv6接收数据包从不包含IPv6数据包标头。@Maddy Microsoft的行为可能与Linux的行为不同。此RFC讨论了如何访问IPv6和IPv6扩展标题:。不幸的是,它没有提供一个选项来访问报头中的“payload length”字段,这正是我想要的。