gpt4 book ai didi

windows - 在 Windows 上,ICMPv6 回显回复缺少 IP header

转载 作者:可可西里 更新时间:2023-11-01 10:47:30 25 4
gpt4 key购买 nike

当使用 ASIO-BOOST 库接收 ICMPv6 回显回复时,我在 Windows 7 上遇到了一个奇怪的问题。收到的数据缺少 IP header ,它只有 ICMP header 和有效负载。下面是更多详细信息:

//IPv4
replyBuffer.consume(replyBuffer.size());
mySocketIPv4->async_receive(replyBuffer.prepare(65575),..);
--packet received--
replyBuffer.commit(length);
std::istream istr(&replyBuffer);
icmp_header icmp_hdr;
ipv4_header ipv4_hdr
istr >> ipv4_hdr >> icmp_hdr;

注意:收到的数据也有IP头

//IPv6
replyBuffer.consume(replyBuffer.size());
mySocketIPv6->async_receive(replyBuffer.prepare(65575),..);
--packet received--
replyBuffer.commit(length);
std::istream istr(&replyBuffer);
icmp_header icmp_hdr;
ipv6_header ipv6_hdr
//istr >> ipv6_hdr >> icmp_hdr; - works on Linux only
istr >> icmp_hdr;

注意:数据只有 ICMPv6 header 和负载。然而,在 Linux 上,数据以 IP header 开头,紧跟在 ICMPv6 header 和有效负载之后。

当我收到回显回复时,我需要从 IP header 中获取一些信息,如 TTL、源 IP 等。在这种情况下,如何访问 IP header 数据?

非常感谢您的帮助!

最佳答案

在 Winsock 上使用原始套接字无法接收 IPv6 header 。作为this MSDN page

For IPv6 (address family of AF_INET6), an application receives everything after the last IPv6 header in each received datagram regardless of the IPV6_HDRINCL socket option. The application does not receive any IPv6 headers using a raw socket.

关于windows - 在 Windows 上,ICMPv6 回显回复缺少 IP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17056098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com