2

返されたさまざまなアダプタリスト

GetIpAddrTableより少ないネットワークアダプタを返す理由の根本的な原因を知りたいですGetAdaptersAddresses。候補となる理由を以下に示します(回答ごとに更新)。

候補となる理由

  • IPv6アダプター:これらはにのみ表示されGetAdaptersAddressesます。この例では、GetIpAddrTableからの出力に表示されないIPv4とIPv6の両方のリンクローカルIPアドレスを持つアダプターのケースがあります。

バックグラウンド

GetIpAddrTableWindows 764ビットHomePremium(バージョン:6.1.7601 Service Pack 1ビルド7601)を実行している特定のDellラップトップの機能に関する問題を調査しています。問題のシステムは、を介して特定のネットワークアダプタを検出できませんGetIpAddrTable。診断結果を以下に示します。

これらの2つの関数からこのように大きく異なる結果が表示される理由を誰かが説明できますか?私たちはGetIpAddrTable2年近く問題なく使用しています。

ドキュメントチェック

ドキュメントGetIpAddrTableは、リンク状態の検出によってXPで問題が発生する可能性があることが示されていますが、アダプターがまったく表示されない理由は示されていません。仮想アダプタは含まれていないようですが、デバイスは仮想アダプタではありません(Ethernet over USBです)。

Windows Server2008およびWindowsVistaでは、GetIpAddrTable関数によって返されるIPv4アドレスは、ローカルコンピューター上のTCP/IPスタックのメディアセンシング機能の影響を受けません。GetIpAddrTable関数は、有効なIPv4アドレスのみを返します。

このシステムで行ったテストでは、有効な接続がありますが、によってのみ報告されGetAdaptersAddresses、ではありませんGetIpAddrTable。Windowsはアダプタが無効であると考えていると思いますが、この理論を確認するために何をテストすればよいかわかりません。パケットはデバイスとの間で流れており、IPv4アドレスマッピングテーブルには表示されません。

実装の詳細

  • Belcarra USBLANイーサネットガジェットドライバー(当社用にカスタマイズ)を使用しています
  • デバイスがDHCPを介してホストとデバイスに登録されることを期待しています
  • ドライバーはDHCPを提供します
  • 最初のホストアダプタには169.254.142.9が割り当てられています
  • 私たちの最初のデバイスアダプターは169.254.142.10です。
  • デバイスへのトラフィックは外部にルーティングされません(リンクローカル)

GetIpAddrTableの結果

通常、2つまたは3つのネットワークアダプタが表示され、ループバックアダプタは表示されないことが予想されます。おそらく、このリストに127.0.0.1が存在することは問題の一部であり、通常、稼働中のマシンでは観察されません。

  • アダプタ1:ソフトウェアループバックインターフェイス1
  • アダプター2:Intel(R)Centrino(R)Wireless-N 1030

GetAdaptersAddressesの結果

この関数によって返されるアダプターを、返される順序でリストしました。最初の呼び出しからの一致するアダプターが強調されます。ipconfig出力に存在しない唯一のアダプターは太字で示されています。

  • アダプター1:USBLANアダプター
  • アダプター2:Microsoft仮想WiFiミニポートアダプター
  • アダプター3:Bluetoothデバイス(パーソナルエリアネットワーク)
  • アダプター4:Intel(R)Centrino(R)Wireless-N 1030
  • アダプター5:RealtekPCIeGBEファミリーコントローラー
  • アダプタ6:ソフトウェアループバックインターフェイス1
  • アダプター7:MicrosoftISATAPアダプター
  • アダプター8:Microsoft ISATAPアダプター#2
  • アダプター9:Teredoトンネリング疑似インターフェース
  • アダプター10:Microsoft ISATAPアダプター#3
  • アダプター11:Microsoft ISATAPアダプター#4
  • アダプター12:Microsoft ISATAPアダプター#5

ipconfig/all結果

ソフトウェアループバックアダプタだけが存在しないことに注意してください。これは、ipconfigが2番目の関数または同様のインターフェイスを内部で使用していることを示しています。

  • アダプター1:USBLANアダプター
  • アダプター2:Microsoft仮想WiFiミニポートアダプター
  • アダプター3:Bluetoothデバイス(パーソナルエリアネットワーク)
  • アダプター4:Intel(R)Centrino(R)Wireless-N 1030
  • アダプター5:RealtekPCIeGBEファミリーコントローラー
  • アダプター6:MicrosoftISATAPアダプター
  • アダプター7:Microsoft ISATAPアダプター#2
  • アダプター8:Teredoトンネリング疑似インターフェース
  • アダプター9:Microsoft ISATAPアダプター#3
  • アダプター10:Microsoft ISATAPアダプター#4
  • アダプター11:Microsoft ISATAPアダプター#5

相互参照の結果

コマンドは、ソフトウェアループバックインターフェイスを除いて、ipconfig /allと同じデータを返しているようです。GetAdaptersAddresses現在、この問題を解決するために使用するライブラリを切り替えることを検討していますが、期待される結果が返されないGetAdaptersAddresses理由が心配です。GetIpAddrTableご入力いただきありがとうございます!

関連する質問

4

1 に答える 1

1

GetIpAddrTable()IPv4 インターフェイスのみを返します。

GetAdaptersAddresses()IPv4 および/または IPv6 アダプターを返し、1 つのアダプターに複数の IP アドレスを割り当てることができます。

あなたはリンゴとオレンジを比較していて、なぜリンゴがオレンジより少ないのか疑問に思っています。

于 2012-11-26T22:33:33.983 に答える