3

私たちのチームは、Linux 2.6 ベースのインターネット メディア デバイスを開発しています。現在、www.google.com に ping を送信することで、インターネット接続が (有線イーサネット i/f 経由で) 確立されているかどうかを検出しています。

デバイスをテストした一部のネットワークは ICMP パケット転送をサポートしていないため、この場合、アプリケーション コードは誤ってインターネットを利用できないと報告します。

よく知られているサービスにpingを実行することなく、 /dev/eth0 を介してインターネット接続が利用可能かどうかを推測するためのより洗練されたアプローチを知っている人はいますか?

4

2 に答える 2

5

ChristopheD が参照するその回答を書いた人として、それは私がここで使用するアプローチではありません。他の質問ではうまくいきました。その場合、現在のマシンからの直接の PPP リンクの存在を確認していたからです。この場合、デフォルト ルートがある場合とない場合がある任意のネットワークに接続しています。より広いインターネット接続から独立しています。

アプリにはグローバル DNS 接続が必要なので、ドメインのNSタイプ クエリのように、常に存在することがわかっているアドレスを調べます。com.適度に長いタイムアウトを使用するか、あきらめる前に数回再試行してください。このようなもの:

dig NS +aaonly com.

出力を無視して、終了値をテストします。0 は、ルックアップがルート サーバーに接続できたことを示します。それ以外は接続できなかったことを示します。

于 2009-09-23T22:15:30.740 に答える
2

最終的には、デバイスが何らかの便利な機能のためにインターネットを使用できるようにする必要があります。デバイスが一般的に接続する明確に定義されたサーバーがある場合は、それにクエリを送信すると便利です。

「何もない」と「便利な機能」の間には多くのステップがあり、「接続性」の尺度としてそれらのいずれかをチェックできる可能性があります。

  • イーサネット ケーブルが接続されている (または PPP リンクが確立されているか、Wi-Fi など、低層が何であれ)
  • DHCP サーバーが割り当てたアドレス (該当する場合)
  • デフォルトゲートウェイは機能しています
  • DNS サーバーが応答しています
  • 宛先サーバーが応答している (おそらく ICMP ping ではなく、小さな HTTP クエリまたは使用している可能性のある他のプロトコル)

顧客の知識に応じて、または技術サポートに報告できる有用なエラー/診断が必要な場合は、それらすべてを検出すると役立つ場合があります。

また、診断ツールとして traceroute を実行できると便利な場合があります。

于 2009-09-23T23:59:32.707 に答える