GetAdaptersInfo获取网卡信息

本文介绍了如何使用GetAdaptersInfo API获取Windows系统中的网卡信息,包括区分物理网卡与虚拟网卡的方法,如通过MAC地址、描述和注册表硬件信息,以及判断网卡是否在使用和网卡类型的技巧。

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定义的,有以下几种:

ValueMeaning

IF_TYPE_OTHER

1

Some other type of network interface.

IF_TYPE_ETHERNET_CSMACD

6

An Ethernet network interface.

IF_TYPE_ISO88025_TOKENRING

9

A token ring network interface.

IF_TYPE_PPP

23

A PPP network interface.

IF_TYPE_SOFTWARE_LOOPBACK

24

A software loopback network interface.

IF_TYPE_ATM

37

An ATM network interface.

IF_TYPE_IEEE80211

71

An IEEE 802.11 wireless network interface.

IF_TYPE_TUNNEL

131

A tunnel type encapsulation network interface.

IF_TYPE_IEEE1394

144

An IEEE 1394 (Firewire) high performance serial bus network interface.

 

 



 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值