当ping.exe成功时会导致ICMPsendEcho失败的原因

时间:2012-02-20 20:53:12

标签: delphi networking ping icmp

我手上有一个有趣的情况,我不太清楚如何对它进行故障排除。我做了一些类似于我的情况的搜索,但没有什么比得上它。如果答案已经存在于某处,我将非常感谢任何可以指出我正确方向的人。

好的,到了这一点。

我正在编写一个用于监控互联网连接的监视应用程序。它设计为以设定的间隔对一组域进行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个字节。

正如我所说,这些信息可能有用,也可能没有用,但我试图找出为什么当Windows ping在该机器上工作正常时,该应用程序无法生成ICMP响应。

另一个可能有帮助的小故事,互联网连接正在监控使用AT& T提升4g热点,实际设备是sierra无线MC8790 AirPrime卡。

任何人都对这些行为失败的原因有任何想法?

提前感谢您提供的任何有用信息以及花时间阅读我的帖子。

PS。

3 个答案:

答案 0 :(得分:3)

答案可能是您发送的ping的大小(有效负载似乎没有未记录的最小20字节大小)。有关更多信息,请参阅此帖子: http://groups.google.com/group/microsoft.public.win32.programmer.networks/browse_thread/thread/2b28b994a8067713?pli=1

答案 1 :(得分:2)

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

请参阅此示例:http://www.delphi-central.com/tutorials/icmp-ping.aspx

  

但请注意,对于Windows NT和Windows 2000   实现,原始套接字受安全检查,并且是   只有管​​理员组的成员才能访问。


另一个可能的原因可能是阻止ICMP数据包的防火墙

答案 2 :(得分:0)

我们与客户有同样的错误。解决方案是在IcmpSendEcho失败时将IcmpSendEcho2实现为计划B.它奏效了!