ASIO-BOOST 라이브러리를 사용하여 ICMPv6 에코 응답을 수신하면 Windows 7에서 이상한 문제가 발생합니다. 수신 된 데이터에 IP 헤더가 없으며 ICMP 헤더와 페이로드 만 있습니다.Windows에서 ICMPv6 에코 응답에 IP 헤더가 누락되었습니다.
//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;
참고 : 아래의 일부 자세한 내용은 수신 한 데이터뿐만 아니라
//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;
참고 IP 헤더가 : 데이터의 ICMPv6에만 헤더와 페이로드를 가지고있다. 그러나 Linux에서는 데이터가 ICMPv6 헤더 및 페이로드 뒤에 오는 IP 헤더로 시작됩니다.
에코 응답을 받으면 IP 헤더에서 TTL, 소스 IP 등의 정보를 얻을 필요가 있습니다. 이 경우 IP 헤더 데이터에 어떻게 액세스합니까?
귀하의 도움에 감사드립니다.