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 ヘッダー データにアクセスするにはどうすればよいですか?
あなたの助けは大歓迎です!