我们的团队正在开发基于Linux 2.6 的互联网媒体设备。目前,我们通过 ping www.google.com 来检测是否建立了互联网连接(通过有线以太网 i/f)

我们测试设备的某些网络不支持 ICMP 数据包转发,因此我们的应用程序代码在这种情况下错误地将 Internet 报告为不可用。

有谁知道一种更精确的方法来推断互联网连接是否可以通过 /dev/eth0 获得,而无需诉诸 ping 知名服务?

有帮助吗?

解决方案

至于是谁写的答案被ChristopheD引用的家伙,这不是我在这里使用的方法。它的工作对其他的问题,因为在这种情况下,我们被检查的直接PPP链路的存在,从目前的机器 - 在这种情况下,您连接可能会或可能不会已经有一个默认路由的abitrary网络,独立于它的更宽的互联网连接。

由于需要全球DNS连接为您的应用程序,我会检查是否存在 - 查找你知道总会有一个地址 - 像在NS域的com.类型的查询。使用相当长的超时和/或放弃之前重试几次。是这样的:

dig NS +aaonly com.

忽略的输出和测试退出值 - 0表示该查找是能够接触根服务器,别的并且它不是

其他提示

最终您希望设备能够使用互联网来实现某些有用的功能。如果设备通常连接到一个明确定义的服务器,那么向该服务器发送查询将会很有用。

在“无”和“有用的功能”之间有很多步骤,您可以检查其中任何一个作为“连接性”的某种衡量标准:

  • 插入以太网电缆(或建立 PPP 链接,或 Wi-Fi,无论您的底层是什么)
  • DHCP 服务器分配的地址(如果适用)
  • 默认网关正在运行
  • DNS 服务器正在响应
  • 目标服务器正在响应(可能不是 ICMP ping,而是一个小型 HTTP 查询或您可能使用的任何其他协议)

根据您的客户的精明程度,或者您是否想要他们可以向技术支持报告的有用错误/诊断,检测所有这些可能会很有用。

能够将跟踪路由作为诊断工具也可能很有用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top