2009-09-23 26 views
2

我們的團隊正在開發基於Linux 2.6的互聯網媒體設備。目前我們通過ping ping www.google.com嵌入式Linux設備檢測互聯網連接的智能方法

檢測互聯網連接是否建立(通過有線以太網i/f)(我們已經測試過該設備不支持ICMP數據包轉發,因此我們的應用程序代碼錯誤地報告了互聯網在這種情況下不可用。

有沒有人知道更精細的方法來推斷是否可以通過/ dev/eth0訪問互聯網連接,而無需通過ping一個衆所周知的服務?

+0

我回答了這個問題,這是一個騙局。你可以檢查它。 – 2009-09-23 19:43:19

+0

嗨帕維爾,你提出一個有趣的觀點。什麼是「連接」?關於最終用戶需要如何「連接」的確有不同的想法。對於我們的應用程序而言,我們的設備需要能夠解析DNS地址,並與Internet上大量其他機器(對等體)進行任意消息交換,其身份僅在運行時才知曉。 個人而言,我很高興ChristopheD提出的默認路由檢查。 ICMP回顯方法顯然存在缺陷,因爲許多網絡鏈接管理員都禁止其鏈接上的所有類型的ICMP流量。 – sototozo 2009-09-23 20:49:24

回答

4

作爲ChristopheD引用答案的人,這不是我在這裏使用的方法。它適用於另一個問題,因爲在這種情況下,我們正在檢查當前機器是否存在直接PPP鏈接 - 在這種情況下,您連接到可能已經或可能沒有默認路由的abitrary網絡,獨立於更廣泛的互聯網連接。

由於您需要爲您的應用程序提供全球DNS連接,因此我會檢查這一點 - 查找您知道始終存在的地址 - 例如com.域的NS類型查詢。在放棄之前,使用合理的超時時間和/或重試幾次。事情是這樣的:

dig NS +aaonly com. 

忽略輸出和測試退出值 - 0指示查找才得以聯繫根服務器,別的,這是不是。

2

最終,您希望設備能夠使用Internet來實現一些有用的功能。如果設備通常連接的定義良好的服務器,那麼向其發送查詢會很有用。

在「一無所有」和「有用的功能」之間有很多步驟,你可能會檢查任何那些爲「連接」的一些措施:

  • 以太網電纜,建立(或PPP鏈路堵塞,或Wi-Fi,無論是你的低層)
  • DHCP服務器分配的地址(如適用)
  • 默認網關是功能
  • DNS服務器響應
  • 目標服務器爲響應(也許不是一個ICMP的ping,但你可能會使用一個小的HTTP查詢或任何其他協議)

根據你的客戶如何悟性,或者如果你想有一個有用的錯誤/診斷,他們可以報告到技術支持,它可能是有用的檢測所有這些。

也可以做一個traceroute作爲診斷工具。