8

我手头有一个有趣的情况,我不太确定如何解决它。我做了一些与我的情况类似的搜索,但没有什么能与之匹配。如果答案已经在这里的某个地方存在,我将不胜感激任何可以指出我正确方向的人。

好的,言归正传。

我正在编写一个监视互联网连接的看门狗应用程序。它旨在以设定的时间间隔 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 卡。

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

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

PS。

4

3 回答 3

3

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

于 2012-02-29T18:41:25.427 回答
2

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

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

但是请注意,对于 Windows NT 和 Windows 2000 实施,原始套接字需要经过安全检查,并且只能由管理员组的成员访问。


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

于 2012-02-21T08:16:42.750 回答
0

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

于 2013-05-10T17:39:09.177 回答