15

Windows API を使用して、実際のアドレスと VM アドレスを区別する必要があります。API を使用GetAdaptersAddressesして、ローカル マシンの IP アドレスのリストを作成しています。VMware ネットワーク アダプタに関連付けられたアドレスやその他のアドレス (自動構成およびトンネル アダプタ アドレス) とは別に、「実際の」アドレスのみを抽出する必要があります。これを区別するための API やフラグを見つけることができませんでした。これを行う方法はありますか?

PS :によって返される構造IfType内のフラグは、VMware アドレスと実際のアドレスを区別するのに役立ちません。IP_ADAPTER_ADDRESSESGetAdaptersAddresses

4

3 に答える 3

17

MAC アドレスの先頭 (最初の 3 つのセグメント) は、インターフェイスが仮想かどうかを示します。

"00:05:69"; //vmware1
"00:0C:29"; //vmware2
"00:50:56"; //vmware3
"00:1C:42"; //parallels1
"00:03:FF"; //microsoft virtual pc
"00:0F:4B"; //virtual iron 4
"00:16:3E"; //red hat xen , oracle vm , xen source, novell xen
"08:00:27"; //virtualbox

EDIT
より明確にするために、インターフェイスに上記の文字列のいずれかで始まるMACアドレスがある場合、それは仮想です。

于 2010-06-17T14:47:39.537 に答える
3

clyfeの回答を読んだ後、MACアドレスプレフィックスのより完全なリストを取得するサイトを見つけました。

参照してください:ベンダー/イーサネット/Bluetooth MAC アドレスのルックアップと検索

例: VirtualBox には 17 個の MAC プレフィックスがあります。

Prefix  Vendor
000F4B  Virtual Iron Software, Inc. (was: Katana Technology)
001307  Paravirtual Corporation (was: Accenia, Inc.)
0013BE  Virtual Conexions
0021F6  Virtual Iron Software
00240B  Virtual Computer Inc.
00A0B1  First Virtual Corporation
00E0C8  virtual access, ltd.
545200  linux kernal virtual machine (kvm)
000F4B  Virtual Iron Software, Inc. (was: Katana Technology)
001307  Paravirtual Corporation (was: Accenia, Inc.)
0013BE  Virtual Conexions
0021F6  Oracle Corporation (was: Virtual Iron Software)
00240B  Virtual Computer Inc.
00A0B1  First Virtual Corporation
00E0C8  virtual access, ltd.
18922C  Virtual Instruments
3CF392  Virtualtek. Co. Ltd

最後に、「ネットワーク カードの説明」から仮想ネットワーク アダプターを検出することを好みました。その説明 (C++: IP_ADAPTER_INFO::Description) に「Virtual」または「VMWare」という単語が表示された場合、それは仮想ネットワーク アダプターであると見なします。

于 2016-01-01T14:43:01.577 に答える