5

インターフェイスがWindowsのPCの物理802.3イーサネットポートであるかどうかを正確に判断する方法を探しています。

ipconfig /all を使用すると、すべてのインターフェイスを一覧表示できます。PC でこれを行うと、VPN、Bluetooth、Wifi、および物理イーサネット インターフェイスを含むいくつかのエントリがここに一覧表示されます。

「isPhysical(interface)」のようなものを探しています。(複数の物理 LAN ポートがあってもかまいません。物理ポートかどうかを知りたいだけです)。

アップデート:

ジェイとクリス、ありがとう!

(コメントスペースが足りなかったのでこちらに書きます)

現在、WMI Win32_NetworkAdapter の使用を検討しています。ただし、AdapterType="Ethernet 802.3" の 4 つのインターフェイスが表示されます。

私のPCには物理ポートが1つしかなく、他のポートには「Virtual Machine Network Services Driver」という名前が付いています。(これらは何らかの悪意のある理由で私の会社によってインストールされていると思います)

インターフェイスで必要な属性を見つけましたが、winXP では使用できません!!!

PhysicalAdapter データ型: boolean アクセス型: 読み取り専用

アダプターが物理アダプターか論理アダプターかを示します。True の場合、アダプタは物理的です。Windows Server 2003、Windows XP、Windows 2000、および Windows NT 4.0: このプロパティは使用できません。

名前の「仮想」という単語のテキスト フィルターを実行する以外に、物理ポートかどうかを判断する方法はありますか?

更新 12/08

VM をインストールすると、仮想インターフェイスが追加されるようです。

仮想アダプターの詳細は次のとおりです: http://blogs.msdn.com/virtual_pc_guy/archive/2005/04/01/404816.aspx

ユーザーが管理者権限を持っていない場合、WMI インターフェイスが必要なデータを返さないという問題が見つかりました。それでは、GetAdapterInfo メソッドを見てみましょう。ただし、実際のアダプターの説明に「仮想マシン サービス ドライバー」が追加されているようで、「仮想」テキスト チェックが無効になっています。

GetAdapterInfo によって返される構造は次のとおりです。

http://msdn.microsoft.com/en-us/library/aa366062(VS.85).aspx

4

5 に答える 5

5

GetIfEntryを呼び出し、返されたMIB_IFROW構造体でIF_TYPE_ETHERNET_CSMACDのdwTypeを探します。

または、.NETで、 NetworkInterfaceTypeがEthernetのSystem.Net.NetworkInformation.NetworkInterfaceを探します。

于 2008-10-15T04:41:40.877 に答える
2

Windows 2000 SP2 以降のすべてのシステムでこれまで見てきた最善の方法は、WMI を使用することです。

http://msdn.microsoft.com/en-us/library/aa394582(VS.85).aspx

Win32_NetworkAdapter http://msdn.microsoft.com/en-us/library/aa394216(VS.85).aspx

また、ジェイが言及した名前空間 System.Net.NetworkInformation を使用できます。接続または切断されているネットワークカードの検出に関するリンクは次のとおりです。

http://felizk.dk/?p=43

于 2008-10-15T05:09:15.160 に答える
0

マシンに2つのNICがある場合、どちらが適切かをどのように選択しますか?これが行われているのを私が見た唯一の方法は、各インターフェイスのIPアドレスとのドロップダウンコンボをユーザーに提供することです。例についてはWiresharkを参照してください-

他に解決策があれば、聞いてみたいです-

于 2008-10-15T04:25:24.607 に答える
0

次の方法でインターフェイスを確認します。GetIfEntry を呼び出し、返された MIB_IFROW 構造体で IF_TYPE_ETHERNET_CSMACD の dwType を探します。

または、.NET で、NetworkInterfaceType が Ethernet の System.Net.NetworkInformation.NetworkInterface を探します。

名前に「仮想」というテキストが含まれているかどうかを確認します。

--- これは不十分なチェック方法のように思えますが、これまでのところ、これらの仮想 802.3 アダプターを無視する唯一の方法です。

于 2008-10-22T09:10:20.723 に答える
-1

答えはわかりませんが、複数のイーサネットインターフェイスを使用できる可能性があることに注意してください。

于 2008-10-15T04:26:46.820 に答える