【发布时间】:2014-10-20 20:55:54
【问题描述】:
我一直在研究使用 IcmpSendEcho,发现它无法 ping 某些设备(例如我的 BT Home Hub 4),GetLastError 报告 11010。而对于其他设备它工作正常(在相同的系统)。相比之下,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,但同样的设备也失败了。
【问题讨论】:
-
您的代码看起来与函数的 MSDN 页面上发布的示例非常相似。您是否尝试过运行网络捕获工具来查看数据包是否真的离开了主机?
-
11010 是
IP_REQ_TIMED_OUT。 -
是的,ping.exe 到我的本地局域网路由器的时间始终小于 2 毫秒...我将尝试在 Wireshark 中比较它们。