C++ 使用boost发送icmp数据包将清除校验和字节

C++ 使用boost发送icmp数据包将清除校验和字节,c++,boost,ping,icmp,C++,Boost,Ping,Icmp,当使用Boost Asio发送ICMPv6回显请求时,每当我执行send_to或async_send_to调用时,某个层似乎正在清除校验和。使用命令行ping实用程序时,没有问题。对于任何调用,当我在Wireshark中查看传出数据包时,所有字段:类型、代码、标识符、序列和有效负载都会被表示出来。另外,正确的字节在调用前后都在缓冲区中。请看下面的图片: 下面是要复制的代码。这是Boost 1.62,VS2015 #包括 #包括 使用boost::asio::ip::address_v6; 使用

当使用Boost Asio发送ICMPv6回显请求时,每当我执行send_to或async_send_to调用时,某个层似乎正在清除校验和。使用命令行ping实用程序时,没有问题。对于任何调用,当我在Wireshark中查看传出数据包时,所有字段:类型、代码、标识符、序列和有效负载都会被表示出来。另外,正确的字节在调用前后都在缓冲区中。请看下面的图片:

下面是要复制的代码。这是Boost 1.62,VS2015

#包括
#包括
使用boost::asio::ip::address_v6;
使用boost::asio::ip::icmp;
const char*ICMPREQUESTBODY=“abcdefghijklmnopqrstuvabcdefghi”;
常量无符号短ICMPIDENTIFIER_u0=1;
无符号短tempchecksum=0x5d46;
无符号整数icmpsequence_u70;
无符号字符ICMPv6TYPEECHOREQUEST_uu2;=128;
无符号字符ICMPv6CODE_u0;
int main()
{
boost::asio::io_服务io;
boost::asio::io_服务::工作iowrk(io);
boost::thread iothread(boost::bind(&boost::asio::io_service::run,&io));
auto source=address_v6::from_字符串(“2601:XXX:XXX:XXX::106”);
自动目的地=地址_v6::from_字符串(“2601:XXX:XXX:XXX::202”);
icmp::endpoint remote_endpoint=boost::asio::ip::icmp::endpoint(目标,0);
icmp::endpoint local_endpoint(icmp::v6(),0);
icmp::套接字elsocko(io,本地_端点);
无符号字符icmppacket[40];
ICMPacket[0]=ICMPv6TYPEECHOREQUEST\u0;
ICMPacket[1]=ICMPv6CODE_382;;
icmppacket[2]=(tempchecksum&0xff00)>>8;
icmppacket[3]=(tempchecksum&0x00ff);
icmppacket[4]=(ICMPIDENTIFIER_uxff00)>>8;
icmppacket[5]=(ICMPIDENTIFIER_u0;&0x00ff);
ICMPacket[6]=(icmpsequence_uxFF00)>>8;
icmppacket[7]=(icmpsequence_u0;&0x00ff);
memcpy(&icmppacket[8],icmpprequestbody,32);
发送到远程终端(boost::asio::buffer(icmppacket));
//boost::asio::streambuf reply\u buffer\u;
//elsocko.receive_from(reply_buffer_uu.prepare(65535)),远程_端点;
}

目标没有响应,因为校验和无效。是什么原因导致此问题/如何解决此问题?

禁用McAfee LiveSafe防火墙允许icmpv6 ping正常工作。似乎没有直接解决此问题的设置

它可能错误地认为校验和被卸载到网卡上。你知道你在运行什么操作系统吗?@stark我在运行Win 10(10.0.14393)。@stark我把我的演示应用程序放在Win 2012R2上,效果很好。所以你知道了一些事情。我看不到本地nic上有任何突出的设置表明它可能正在执行此操作。我只看到tcp和udp校验和卸载选项。我用Intel GB交换了pc上的nic,问题仍然存在。在另一个虚拟机上的旧版Win10上进行了尝试,ping正常。我禁用了McAfee防火墙,这纠正了问题。McAfee一定是在这里插手了。