首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IcmpSendEcho失败,但ping成功

IcmpSendEcho失败,但ping成功
EN

Stack Overflow用户
提问于 2014-10-21 04:55:54
回答 2查看 3.1K关注 0票数 1

我一直在研究使用IcmpSendEcho,发现它无法使用GetLastError reporting 11010 ping某些设备(例如我的BT Home Hub4)。而对于其他设备,它工作得很好(当在同一系统上执行时)。相比之下,ping.exe在所有这些设备上都是成功的,但我不知道Ping的实现有什么不同。到目前为止,我尝试过的所有案例都是IPv4,这是我直接提供的(所以没有DNS等)。

代码语言:javascript
复制
    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,但对于相同的设备也失败了。

EN

回答 2

Stack Overflow用户

发布于 2017-08-11 16:55:45

请尝试使用管理员权限运行。

票数 1
EN

Stack Overflow用户

发布于 2019-03-21 18:21:03

我也遇到过类似的问题,但我认为这个问题是由于icmp请求在您得到回复之前超时造成的。

我的代码主要基于IcmpSendEcho的MSDN页面中的示例代码,只是我在失败时添加了一些重试。我的代码在晚上运行,此时机器可能已经进入睡眠状态或其他一些低功耗状态,这意味着它们需要几秒钟的时间来唤醒和响应。

通常,我的输出日志会显示第一次ping尝试失败,并显示错误11010。第二次尝试总是成功的。因此,我猜第一次ping会给机器一个提示并唤醒它,但我错过了延迟的回复。第二次ping成功。

因此,要么尝试添加更长的超时,要么只添加几次重试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26474755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档