2008-09-02 4 views
4

次のセットアップを検討してください。 LANインターフェイスとWiFiインターフェイス(新しいノートパソコンの標準)を備えたWindows PC。各インターフェイスは、ネットワークに接続または切断されている可能性があります。アダプターのどれがインターネットに接続されているかを判断する方法が必要です。具体的には、両方が異なるネットワークに接続されている場合は、インターネットに接続されていて、もう1つは接続されていません。どのNICがインターネットに接続されているかはどうやって分かりますか?

私の現在の解決策は、IPHelperの "GetBestInterface"機能を使用し、IPアドレス "0.0.0.0"を提供することです。

他にもこの問題の解決策がありますか?

答えのいくつかの後、私は手の込んだてみましょう:

  • 私はと結合するアダプターを選択しなければならない製品を持っているので、私はこれを必要とします。私は、製品が動作するネットワークまたはホストの設定を制御する方法がないため、可能な限り少ない想定で、できるだけ堅牢なソリューションが必要です。
  • これは製品の一部であるため、コードでこれを行う必要があります。

@Chris Upchurch:これにより、google.comが起動している(通常は問題ありません)と、pingを許可するためにインストールされているパーソナルファイアウォールに依存しています。

@Till:スティーブムーンのように、内部ネットワークの設定について多くの仮定をするため、アダプタのアドレスに依存するのは危険です。

@Steve Moon:ルーティングテーブルを見てみるのはいい考えですが、ルーティングロジックを自分で適用するのではなく、上記のように "GetBestInterface"を使用しようとしています。私はそれがあなたの答えに概説したとおりであると信じていますが、私は本当にわかりません。自分の "ルーティングロジック"を実装したくない理由は、もっとハードコアなネットワークの人々が書いてテストしたライブラリ/ APIを使うよりも、間違ってしまう可能性が高いからです。

答えて

4

技術的には、「インターネットに接続」はありません。実際の問題は、どのインターフェースが所望のアドレスに経路指定可能であるかである。現在、あなたは、「デフォルトルート」を照会しています。これは、宛先への特定のルートが存在しない場合に適用されます。しかし、あなたは特定のルートを無視しています。

幸いにも、家庭のユーザーの99.9%は、そのトリックを行うでしょう。彼らはルーティングテーブルの多くを持っていない可能性があり、GetBestInterfaceは自動的に有線経由で有線接続を優先します。 .1%の症例のオーバーライドオプションを投げ、それを1日と呼んでください。

しかし、法人向けには、特定の宛先に対してGetBestInterfaceを使用する必要があります。そうしないと、誰かが宛先と同じLAN上にある場合に問題が発生します(つまり、内部インターフェイスを使用する必要があります。あなたの目的地への特定のルートを持っています(私の内部ネットワークはあなたの目的地のネットワークと仲良くできます)。

また、私はこのアダプタを "インターネットに接続"して何をしようとしているのかよくわからないので、大したことではないかもしれません。

0

それぞれのNICにもかかわらずgoogle.comを送信します。

0

[スタート]> [実行]> [cmd.exe](これはXPとVistaで動作します):ipconfig /all

これは、コンピュータ内のインタフェースに関するすべての情報を表示します。 「パブリック」フェイスインタフェースにはパブリックIPアドレスが必要です。まず、は192.168.x.xまたは10.x.x.xでなければなりません。

0

ルーティングテーブルを見てください。一般的に、ウィンドウ内のネットワーク間をルーティングしない限り(これは可能ですが、最近はクライアントコンピュータにとって珍しい)、デフォルトルートを保持するインターフェイスはインターネット接続を確立します。

あなたの質問には、これをなぜやっているのかが詳細には書かれていないので、何か具体的な説明はできません。コマンドラインツールの "route"には何らかの助けがありますが、ルーティングテーブルを見るために使用しているプログラミング言語のライブラリがあります。

インターフェイスのIPアドレスに依存することはできません(たとえば、RFC-1918アドレス[192.168.0.0/16、172.16.0.0/12、10.0.0.0/8]がインターネットではないと仮定します)ほとんどのサイトには、NATされたファイアウォールやプロキシの設定があり、「インターネット」インターフェースは実際にあなたをインターネットに連れ出す「プライベート」LAN上にあるからです。

更新:あなたの詳しい情報に基づいて、まともな解決策があるように聞こえます。私はそれがIPアドレスの境界のケースであるため、0.0.0.0の選択についてはあまり確かではありません。プラットフォーム/言語の特定の組み合わせでOKかもしれません。あなたはちょうどアドレスを指定することができるように、(APIの説明から)音が出ます。あなたのWebサイトのIPアドレス、または65.66.67.68のようなランダムなもの? rfc-1918アドレス、localhost範囲(127.0.0.0/8)、マルチキャスト、その他の予約範囲、.milまたは.govに解決されるアドレスのいずれかを選択しないようにしてくださいgetbestinterfaceのような音はどんなトラフィックでも送信しますが、フィードをフィードダウンすることで気分が悪くなります。:)

0

tracerouteを公開サイトに表示します。もちろん、そこにあなたを連れてくる複数のインターフェースがあるかもしれません。

1

明らかに、Vistaにはインターネット接続などのクエリを可能にする新しいインターフェイスがあります。 NLM Interfacesをご覧ください。具体的にはINetworkConnectionです。GetConnectivityメソッドを使用してネットワーク接続がインターネット接続になっているかどうかを具体的に問い合わせることができます。

も参照してください:Network Awareness on Windows Vista 残念ながら、これはVistaでのみ利用可能ですので、XPでは元のヒューリスティックを維持する必要があります。

2

私はルーティングテーブルを見るでしょう。どのNICに0.0.0.0のルートがあり、有効になっていてANDが最も低いメトリックを持っているかは、現在インターネットにパケットを送信しているNICです。

私の場合、トップ1は「インターネットニック」です。

IPv4 Route Table 
=========================================================================== 
Active Routes: 
Network Destination  Netmask   Gateway  Interface Metric 
      0.0.0.0   0.0.0.0  10.0.0.10  10.0.0.51  20 
      0.0.0.0   0.0.0.0  10.0.0.10  10.0.0.50  25 
(much other stuff deleted) 

別の方法としては、pingを実行またはGetBestInterface 4.2.2.2ことです - これは現在GTEIで開催された、古い由緒あるDNSサーバです。私が正しく覚えていれば、スプリントによって

0

ネットワークの観点からみると、いつでも「インターネット」にルーティングできます。スパニングツリープロトコルのようなものがスイッチでイネーブルになっていると、ルーティングカードが何を開始したのかが分かりません。

関連する問題