我一直在研究使用IcmpSendEcho,发现它无法使用GetLastError reporting 11010 ping某些设备(例如我的BT Home Hub4)。而对于其他设备,它工作得很好(当在同一系统上执行时)。相比之下,ping.exe在所有这些设备上都是成功的,但我不知道Ping的实现有什么不同。到目前为止,我尝试过的所有案例都是IPv4,这是我直接提供的(所以没有DNS等)。
hIcmpFile = IcmpCreateFile();
ipAddress = inet_addr(ipAddressStr);
...hIcmpFile is reused
static const WORD sendSize = 32;
static const DWORD replySize = sizeof(ICMP_ECHO_REPLY) + sendSize;
char sendData[sendSize] = { 0 };
char replyBuffer[replySize];
auto ret = IcmpSendEcho(hIcmpFile, ipAddress, sendData, sendSize, NULL, replyBuffer, replySize, 1000);
if (ret == 0)
{
auto error = GetLastError();我找到的唯一另一份报告是what would cause ICMPsendEcho to fail when ping.exe succeeds。然而,这些答案似乎与我的问题不同。我尝试过使用不同的负载大小,也尝试过IcmpSendEcho2,但对于相同的设备也失败了。
发布于 2017-08-11 16:55:45
请尝试使用管理员权限运行。
发布于 2019-03-21 18:21:03
我也遇到过类似的问题,但我认为这个问题是由于icmp请求在您得到回复之前超时造成的。
我的代码主要基于IcmpSendEcho的MSDN页面中的示例代码,只是我在失败时添加了一些重试。我的代码在晚上运行,此时机器可能已经进入睡眠状态或其他一些低功耗状态,这意味着它们需要几秒钟的时间来唤醒和响应。
通常,我的输出日志会显示第一次ping尝试失败,并显示错误11010。第二次尝试总是成功的。因此,我猜第一次ping会给机器一个提示并唤醒它,但我错过了延迟的回复。第二次ping成功。
因此,要么尝试添加更长的超时,要么只添加几次重试。
https://stackoverflow.com/questions/26474755
复制相似问题