2

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 ヘッダー データにアクセスするにはどうすればよいですか?

あなたの助けは大歓迎です!

4

1 に答える 1