GetAdaptersInfo的问题
通过GetAdaptersInfo获取网卡配置和Ip地址信息
由于可能有多个网卡,因此struct _IP_ADAPTER_INFO* Next字段为一个链表结构指针。发现
根据API函数 GetAdaptersInfo()获取网卡信息后,得到很多网卡,如何区分网卡类型呢?
物理网卡与虚拟网卡
网卡可分为物理网卡与虚拟网卡。其中物理网卡又可分为有线网卡、无线网卡、蓝牙设备的网卡。
物理网卡就是安装在电脑上的真实网卡,每块物理网卡都有不同的且唯一的物理地址(MAC地址);
虚拟网卡的mac
虚拟网卡则是通过软件模拟的虚拟网络适配器,它也有唯一的mac地址,但是有一定规律,可以用穷举法把虚拟网卡都罗列出来达到区别的办法。
"00:05:69"; //vmware1
"00:0C:29"; //vmware2
"00:50:56"; //vmware3
"00:1c:14"; //vmware4
"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
网卡的描述Description
有人介绍 区分物理网卡和虚拟网卡:pAdapter->Description中包含"PCI"是:物理网卡。这是不准确的,很多有线无线的物理网卡在描述里真不包含PCI字样。
虚拟网卡的描述也有明确说明,也可以用穷举的办法标识出来。
pIpAdapterInfo->Description包含
"VMware" ,
"VirtualBox" ,
"TAP-Windows",
"Microsoft",
"VPN" 等的,都是虚拟网卡。
注册表的硬件信息
用读取注册表硬件信息的办法,这是准确的办法
若是物理网卡,其硬件信息中的项通常会包含 PCI 。
例如,pAdapter的网卡的名为 {ACA306D0-1D69-4116-BC2B-919BABCDD084}。
在注册表中的信息所在位置为:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Network/{4D36E972-E325-11CE-BFC1-08002BE10318}/{ACA306D0-1D69-4116-BC2B-919BABCDD084}/Connection
若PnpInstanceID的值以PCI开头,说明是物理网卡。
正在使用的网卡
if (pIpAdapterInfo->LeaseObtained > 10) //网卡连接有ip租期,说明是当下是正在用的网卡,有的虚拟网卡也得到ip租期
网卡的类型
pAdapter->Type为71的是:无线网卡。 有的虚拟网卡是无线网卡 ,有的虚拟网卡是有线网卡
pIpAdapterInfo->Type == IF_TYPE_IEEE80211)) //网卡类型,无线网卡
pIpAdapterInfo->Type == MIB_IF_TYPE_ETHERNET //以太网卡
dwType:该接口的类型,这个类型是被IANA定义的,有以下几种:
本文介绍了如何使用GetAdaptersInfo API获取Windows系统中的网卡信息,包括区分物理网卡与虚拟网卡的方法,如通过MAC地址、描述和注册表硬件信息,以及判断网卡是否在使用和网卡类型的技巧。
1209

被折叠的 条评论
为什么被折叠?



