2012-02-20 146 views
8

我手上有一个有趣的情况,我不太清楚如何去解决它。我做了一些类似于我的情况的搜索,但没有任何匹配。如果答案已经存在,我会很感激任何能够指引我的人。什么会导致ICMPsendEcho失败,当ping.exe成功

好的,重点。

我正在写监视互联网连接的看门狗应用程序。它的目的是以设定的时间间隔ping一组域,当它们中的任何一个响应ping时,状态计时器被重置。如果状态计时器超过设定的阈值,则尝试采取几个纠正措施阶段来解决问题。

够简单吧?

这是它变得奇怪的地方。

我正在使用ICMPsendecho发出ping请求。在我的开发环境(win7)上,它似乎工作正常,测试和一切顺利。但是,在部署它的环境中,它没有收到回应。部署环境是Windows XP sp3机器。

在整个故障排除过程中,我已经注意到几件事情,这些事情可能会或可能不会有助于实际尝试解决此问题。

windows ping.exe在我用来测试连接状态的所有域的部署环境上工作得很好,它只有我的ICMPsendecho调用似乎无法生成响应。

我已经在部署环境中安装wireshark,并且可以看到两种类型的ping上的请求都成功发出数据包。 windows ping生成长度为74字节的请求数据包,我的程序调用生成长度为42字节的数据包。 Windows响应数据包在接收时类似于74个字节。

安装Wireshark后切换到开发环境一分钟。 Windows ping与部署环境中的数据包一样会生成类似的情况。但是,我的应用程序在生成请求时,数据包的长度为42个字节(与部署环境相同),但收到的响应长度为60个字节。

正如我所说的,该信息可能会或可能不会有用,但我试图找出为什么此应用程序无法生成ICMP响应时,Windows平台似乎在该机器上正常工作。

另一个小小的消息可能会帮助,互联网连接监控使用AT & T的提升4G热点,实际的设备是无线的MC8790 AirPrime卡。

任何人有任何想法,为什么这些ping失败?

提前感谢您提供的任何有用信息,并花时间阅读我的文章。

PS。

+2

did ICMPSendEcho返回错误? – OnTheFly 2012-02-20 23:42:25

+0

没有错误,它只是没有收到回应。 – PoultrySlave 2012-02-21 14:19:21

+0

什么是Windows版本? – 2012-02-21 21:42:48

回答

3

答案可能在于您发送的ping的大小(对于有效载荷似乎有一个未公开的最小大小为20个字节)。看到这篇文章的更多信息: http://groups.google.com/group/microsoft.public.win32.programmer.networks/browse_thread/thread/2b28b994a8067713?pli=1

+0

感谢您的回复!我没有马上注意到,但问题仍未解决,需要在某个时候加以解决。我会将此视为可能的原因。 – PoultrySlave 2012-03-26 21:07:10

+0

这实际上是问题的原因。我们使用的代码为响应数据包分配了不正确的空间量。我认为这会引发错误/例外,但事实并非如此。在这个特定客户的位置上还有许多其他问题,所以它解决了更难的问题。 – PoultrySlave 2013-05-21 18:58:28

+0

@PoultrySlave你能详细说明一下吗?你最终使用了什么响应缓冲区大小?谷歌小组链接了关于实验性增加尺寸的讨论,但我不清楚一般应该使用多大的尺寸。我看到一个类似的问题,IcmpSendEcho在ping工作正常时超时,并且很好奇你最终做了什么来实现它。 – Nerdtron 2013-12-13 17:25:19

2

您是否检查过用户权限? Ping.exe不需要管理员权限,但Windows中的原始ICMP命令需要管理员权限。

见这个例子:但是http://www.delphi-central.com/tutorials/icmp-ping.aspx

,请注意,对于Windows NT和Windows 2000 实现,原始套接字都服从安全检查,并 只给管理员组的成员访问。


另一个可能的原因可能是一个防火墙哪些块ICMP分组。

+0

为什么ICMPsendecho会在开发环境中而不是在部署环境中生成响应? 我还没有检查过用户的权限,但是在我看来,除非在windows 7下icmp.dll的使用是不同的(也可能是),他们都会无法生成响应。 但是,看到我目前处于停滞状态,我会进一步反思您的想法,因为我的想法很好...... 感谢您的回复。 – PoultrySlave 2012-02-21 14:16:26

+0

如果应用程序在这两种环境中都具有管理权限,则它们都应该有效。所以我猜想防火墙设置可能不同(请参阅我的编辑)。 – mjn 2012-02-21 16:52:23

0

我们有一个客户端相同的错误。解决方案是在IcmpSendEcho失败时将IcmpSendEcho2实现为计划B.有效!

+0

如何实现IcmpSendEcho2函数? – 2016-05-19 07:22:28

相关问题