[英]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.