使用 ASIO-BOOST 库接收 ICMPv6 回显回复时,我在 Windows 7 上遇到了奇怪的问题。接收到的数据缺少 IP 标头,它只有 ICMP 标头和有效负载。下面的一些更多细节:
//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 标头和有效负载。然而,在 Linux 上,数据以 IP 标头开始,紧跟在 ICMPv6 标头和有效负载之后。
当我收到回显回复时,我需要从 IP 标头中获取一些信息,例如 TTL、源 IP 等。在这种情况下如何访问 IP 标头数据?
非常感激你的帮助!