【发布时间】:2013-06-08 00:15:08
【问题描述】:
在使用 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 上,数据以 ICMPv6 标头和有效负载之后的 IP 标头开始。
当我收到回显回复时,我需要从 IP 标头中获取一些信息,例如 TTL、源 IP 等。在这种情况下如何访问 IP 标头数据?
非常感谢您的帮助!
【问题讨论】:
标签: windows boost-asio ipv6 ping icmp