4

次の設定を検討してください: LAN インターフェースと WiFi インターフェースを備えた Windows PC (新しいラップトップの標準)。各インターフェイスは、ネットワークに接続されているか、ネットワークから切断されている可能性があります。どちらのアダプターがインターネットに接続されているかを判断する方法が必要です。具体的には、両方が異なるネットワークに接続されている場合、一方はインターネットに接続されており、もう一方は接続されていません。

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

この問題に提案できる他の解決策はありますか?

いくつかの回答に続いて、詳しく説明しましょう。

  • バインドするアダプターを選択する必要がある製品があるため、これが必要です。製品が実行されるネットワークまたはホストのセットアップを制御する方法がないため、可能な限り仮定を少なくして、可能な限り堅牢なソリューションが必要です。
  • これは製品の一部であるため、コードで行う必要があります。

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

@Till: Steve Moon が言ったように、アダプターのアドレスに依存することは、内部ネットワークのセットアップで多くの仮定を行うため、一種の危険です。

@Steve Moon:ルーティングテーブルを見るのは良い考えのように思えますが、ルーティングロジックを自分で適用する代わりに、上記のように「GetBestInterface」を使用しようとしています。それが何をすべきかは、あなたの答えで概説したとおりだと思いますが、よくわかりません。私が独自の「ルーティング ロジック」を実装することに消極的である理由は、より「筋金入りの」ネットワーク関係者によって作成およびテストされたライブラリ/API を使用する場合よりも、間違っている可能性が高いからです。

4

8 に答える 8

4

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

幸いなことに、99.9% のホーム ユーザーにとっては、これでうまくいくでしょう。ルーティング テーブルがあまりない可能性が高く、GetBestInterface は自動的にワイヤレスよりも有線を優先するので、うまくいくはずです。失敗したケースの 0.1% に対してオーバーライド オプションを追加して、1 日で終わります。

ただし、企業で使用する場合は、特定の宛先に対して GetBestInterface を使用する必要があります。そうしないと、宛先と同じ LAN 上に誰かがいる場合に問題が発生します (つまり、「外部」インターフェイスではなく「内部」インターフェイスを使用する必要があります)。 )または宛先への特定のルートがあります(たとえば、私の内部ネットワークは宛先のネットワークとピアリングできます)。

繰り返しになりますが、この「インターネットに接続された」アダプターで何をするつもりなのかわからないので、大したことではないかもしれません.

于 2008-09-02T10:46:50.633 に答える
1

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

だから私の場合、一番上のものは「インターネットニック」です。

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)

もう1つの方法は、pingまたはGetBestInterface 4.2.2.2の代わりになります。これは古くて由緒あるDNSサーバーであり、現在GTEIによって保持されています。私が正しく覚えていれば、以前はSprintによるものでした。

于 2008-09-07T14:16:05.903 に答える
1

どうやら、Vista には、インターネット接続などのクエリを可能にする新しいインターフェイスがあるようです。NLM インターフェイス、特にINetworkConnectionを見てください。GetConnectivity メソッドを使用して、ネットワーク接続にインターネット接続があるかどうかを具体的に照会できます。

関連項目: Windows Vista での Network Awareness 残念ながら、これは Vista でしか利用できないため、XP では元のヒューリスティックを維持する必要があります。

于 2008-09-05T14:34:22.460 に答える
0

一部の公開サイトに対して traceroute を実行すると表示されます。もちろん、そこにたどり着くインターフェースが複数ある場合もあります。

于 2008-09-02T07:08:53.200 に答える
0

各 NIC を介して google.com に ping を実行します。

于 2008-09-02T05:19:39.827 に答える
0

[スタート] > [ファイル名を指定して実行] > cmd.exe (これは XP および Vista で機能します):ipconfig /all

これにより、コンピューターのインターフェイスに関するすべての情報が表示されます。「パブリック」に面したインターフェイスには、パブリック IP アドレスが必要です。まず、 192.168.xx または 10.xxx であってはなりません:)

于 2008-09-02T05:22:59.630 に答える
0

ネットワークの観点から見ると、どちらもいつでも「インターネット」にルーティングできます。スイッチでスパニング ツリー プロトコルなどが有効になっている場合、最初はルーティング カードであったものが、もはやそうではないことに気付く場合があります。

于 2008-09-16T12:53:49.460 に答える
0

ルーティング テーブルを見てください。通常、Windows でネットワーク間をルーティングしない限り (これは可能ですが、最近のクライアント コンピューターでは珍しいことです)、既定のルートを保持するインターフェイスはインターネットに接続されます。

あなたの質問では、なぜ、または何を使用してこれを行っているのかについて詳しく説明していないため、詳細を提供することはできません. コマンド ライン ツール「route」が役立つかもしれませんが、ルーティング テーブルを調べるために使用しているプログラミング言語に対応したライブラリが存在する可能性があります。

ほとんどのサイトはある種の NATed ファイアウォールまたはプロキシ セットアップと、「インターネット」インターフェイスは実際にはインターネットに接続する「プライベート」LAN 上にあります。

更新: あなたの詳細情報に基づいて、適切な解決策があるようです。0.0.0.0 の選択についてはよくわかりません。これは、IP アドレスの境界ケースであるためです。特定のプラットフォーム/言語の組み合わせでは問題ないかもしれません。(API の説明から) アドレスを指定するだけでよいように思えますが、インターネット上に存在することがわかっているアドレス (たとえば、Web サイトの IP アドレス、または 65.66.67.68 などのよりランダムなもの) を指定しないのはなぜでしょうか? rfc-1918 アドレスのいずれか、または localhost 範囲 (127.0.0.0/8)、またはマルチキャスト、その他の予約済み範囲、および .mil または .gov に解決されるアドレスを選択しないように注意してください。 getbestinterface がトラフィックを送信しているようには聞こえません。

于 2008-09-02T05:24:39.533 に答える