簡體   English   中英

IcmpSendEcho失敗,但“ ping”成功

[英]IcmpSendEcho fails but “ping” succeeds

我一直在使用IcmpSendEcho ,發現使用GetLastError報告11010它將無法ping通某些設備(例如,我的BT Home Hub 4)。而對於其他設備,它可以正常工作(在同一系統上執行時)。 相比之下, ping.exe在所有這些設備上都成功,但是我不知道Ping的實現有何不同。 到目前為止,我嘗試過的所有情況都是IPv4,我直接提供了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();

我發現的唯一其他報告是當ping.exe成功時會導致ICMPsendEcho失敗的原因 但是這些答案似乎與我的問題不同。 我嘗試使用不同的有效負載大小,並且嘗試了IcmpSendEcho2 ,但對於相同的設備也失敗了。

嘗試以管理員權限運行。

我遇到了類似的問題,但是我認為問題是由於icmp請求在您得到回復之前超時。

我的代碼很大程度上基於IcmpSendEcho的MSDN頁面上的示例代碼,僅在失敗時添加了一些重試。 我的代碼在晚上運行,這時機器很可能已經進入睡眠或其他低功耗狀態,這意味着它們需要幾秒鍾的時間才能喚醒並回復。

通常,我的輸出記錄指出,第一次ping嘗試失敗,錯誤11010。第二次嘗試始終成功。 因此,我猜測第一次ping會給機器戳一聲並喚醒它,但我錯過了延遲的回復。 第二次ping成功。

因此,請嘗試添加更長的超時時間或僅添加一些重試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM