获取当前活跃状态的网卡MAC地址、物理地址

Wmic命令:Win32_NetworkAdapterWin32_NetworkAdapterConfiguration。

其中cmd命令行执行:

1. Wmic Path Win32_NetworkAdapter get GUID,MACAddress,NetEnabled,PhysicalAdapter,Index

备注:

GUID:连接唯一标识;

MACAddress:网卡地址;

NetEnabled: 是否启用了适配器,True为启用,False为禁用;

PhysicalAdapter: 适配器是否物理或逻辑适配器,True为物理,False为逻辑;

Index: 网络适配器的索引号,存储在系统注册表中。注册表路径Win32Registry|System\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}.

Msdn地址:

https://msdn.microsoft.com/en-us/library/aa394216(v=vs.85).aspx

要求:

Minimum supported client

Windows Vista

Minimum supported server

Windows Server 2008

Namespace

Root\CIMV2

MOF

CIMWin32.mof

DLL

CIMWin32.dll

2. Wmic Path Win32_NetworkAdapterConfiguration get IPEnabled,MACAddress,SettingID, IPAddress, IPSubnet,Index

备注:

IPEnabled: 是否启用了适配器,True为启用,False为禁用;

MACAddress:网卡地址;

SettingID: 连接唯一标识;

IPAddress:IP地址;

IPSubnet:子网掩码;

Index: Windows网络适配器配置的索引号,在有多个配置时使用。注册表路径Win32Registry|System\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318};

Msdn地址:

https://msdn.microsoft.com/en-us/library/aa394217(v=vs.85).aspx#

要求:

Minimum supported client

Windows Vista

Minimum supported server

Windows Server 2008

Namespace

Root\CIMV2

MOF

CIMWin32.mof

DLL

CIMWin32.dll

参数匹配关系:

Win32_NetworkAdapter

Win32_NetworkAdapterConfiguration

GUID

SettingID

NetEnabled

IPEnabled

MACAddress

MACAddress

Index

Index

区分物理网卡和虚拟网卡

通过“Characteristics”这个值来确定网卡的类型是虚拟网卡还是物理网卡。

Characteristics 值在注册表在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\【连接索引号】\下,在windows中,Characteristics 的取值如下,Characteristics项可以有1个或多个如下的值(多值应计算总和):【备注:在Windows7和Windows10下确认,Characteristics为dword,不可能多个值,这里的多个值,计算总和暂时未知。】

0x1

NCF_VIRTUAL

说明组件是个虚拟适配器

0x2

NCF_SOFTWARE_ENUMERATED

说明组件是一个软件模拟的适配器

0x4

NCF_PHYSICAL

说明组件是一个物理适配器

0x8

NCF_HIDDEN

说明组件不显示用户接口

0x10

NCF_NO_SERVICE

说明组件没有相关的服务(设备驱动程序)

0x20

NCF_NOT_USER_REMOVABLE

说明不能被用户删除(例如,通过控制面板或设备管理器)

0x40

NCF_MULTIPORT_INSTANCED_ADAPTER

说明组件有多个端口,每个端口作为单独的设备安装。每个端口有自己的hw_id(组件ID) 并可被单独安装,这只适合于EISA适配器

0x80

NCF_HAS_UI

说明组件支持用户接口(例如,Advanced Page或Customer Properties Sheet)

0x400

NCF_FILTER

说明组件是一个过滤器

如果是虚拟网卡:Characteristics & NCF_VIRTUAL ==NCF_VIRTUAL

如果是物理网卡:Characteristics & NCF_PHYSICAL ==NCF_PHYSICAL

Example:

Characteristics的值为0x84,则0x84&0x4=0x4,则表示该网卡为物理网卡。

备注:

该方法在实体机上测试,可以区分开物理网卡和虚拟网卡;但是,在虚拟机系统中,也可以找到物理网卡。

参考地址:

http://blog.csdn.net/jianghui3132749/article/details/4868350

总结:

获取当前活跃的物理网卡地址,可以直接使用Win32_NetworkAdapter,Win32_NetworkAdapterConfiguration主要作为一个参考比较。另外,命令支持系统最低版本有所限制,Windows Vista及以上,服务器版本Windows Server 2008及以上。

判断无线网卡和有线网卡

1. 注册表路径:HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\【连接唯一标识】\Connection

路径下的键值:MediaSubType,如果Value=2,表示无线网卡。

2. 注册表路径:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\【连接索引号】\Ndi\Interfaces

路径下的键值:LowerRange,如果Value包含wifi或者wlan,(验证的两台设备Value=“wlan,ethernet,vwifi”),表示无线网卡。

总结:如上两种方法判断是否无线网卡的判断标准, 对于标准的适用性,特殊情况,如VPN、虚拟网卡等情况是否有能很好的支持,仍然需要验证。另外,3G网卡等尚未在判断标准中,暂不支持。

备注:通过“netsh wlan set hostednetwork mode=allow ssid=Simnovo key=SimnovoWifi”命令创建的无线虚拟网卡,在判断条件1,2下,均验证为无线网卡,但是结合Characteristics的值判断物理网卡,可以区分出来该网卡是无线虚拟网卡。

通过物理网卡条件以及无线网卡条件结合判断,采用wmic和注册表方式相对比较稳定。

判断流程

1. Win7以上设备:执行Wmic Path Win32_NetworkAdapter get GUID,MACAddress,NetEnabled,PhysicalAdapter,Index,获取NetEnabled和PhysicalAdapter均为True的项。其中NetEnabled获取的True是为了获取当前使用中的网卡。GUID为连接唯一标识,Index为连接索引号。

XP设备:由于XP对Win32_NetworkAdapter部分字段不支持,采用Wmic Path Win32_NetworkAdapterConfiguration get IPEnabled,MACAddress,SettingID, IPAddress, IPSubnet,Index,获取IPEnabled为True的想,其中,IPEnabled获取的True是为了获取当前使用中的网卡。SettingID为连接唯一标识,Index为连接索引号。

2. 根据1中获取到的连接索引号,注册表路径“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\【连接索引号】\”下,判断Characteristics,筛选出物理网卡

3. 根据2中获取的物理网卡,采用判断有线网卡和无线网卡两中方案进行筛选,获取最终的当前使用中的网卡为有线物理网卡还是无线物理网卡。

验证结果【图片有些小,点击链接查看】

联想win8.1 WIFI 【正确】

联想win8 WIFI 【正确】

三星win8 WIFI 【正确】

XPE有线 【正确】

联想win7有线 【正确】

Win10 有线 【正确】

HP 有线 【正确】

HP wifi 【正确】

HP 3G: 【错误】

推荐一下自己的网站:www.mylofter.com:81,平行世界

MAC地址获取,有线网卡与无线网卡、物理网卡与虚拟网卡的区分的更多相关文章

  1. 根据MAC地址获取网络地址及ZDP_NwkAddrReq函数的用法

    1..对于设备需要获取本设备的网络地址和MAC地址: NLME_GetShortAddr()——返回本设备的16位网络地址 NLME_GetExtAddr()——  返回本设备的64位扩展地址 2.使 ...

  2. Linux 下PHP获取服务器状态CPU、MEM使用率、磁盘使用率、IP地址获取、MAC地址获取等信息记录

    获取服务器状态记录使用的是SHELL命令方式进行获取输出结果  然后进行字符串拆分处理等方式进行获取到自己有用信息 贴出获取方式以及常用处理方式 <?PHP $fp = popen('执行SHE ...

  3. 获取客户机MAC地址 根据IP地址 获取机器的MAC地址 / 获取真实Ip地址

    [DllImport("Iphlpapi.dll")] private static extern int SendARP(Int32 dest, Int32 host, ref ...

  4. 做双网卡绑定_______物理机在双网卡的情况下做多IP绑定

    公司的环境是这样的: 一台物理机需要做双网卡绑定,同时呢,在双网卡绑定的同时还要做多IP. 其实整个过程可以分为两个步骤: 第一个,物理机先做双网卡. 第二个,在bond上做多IP实例. 双网卡绑定的 ...

  5. ios Mac 地址获取

    //mac address #include <sys/socket.h> // Per msqr #include <sys/sysctl.h> #include <n ...

  6. Java获取本机的IP与MAC地址

    有些机器有许多虚拟的网卡,获取IP地址时会出现一些意外,所以需要一些验证: // 获取mac地址 public static String getMacAddress() { try { Enumer ...

  7. 转 笔记本无线和有线的MAC地址修改

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xueqiang03/article/details/80741734无线网卡的mac地址在出厂时就被 ...

  8. java获取服务器IP地址及MAC地址的方法

    这篇文章主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下   本文实例讲述了 ...

  9. java获取本机IP地址和MAC地址的方法

    // 获取ip地址 public static String getIpAddress() { try { Enumeration<NetworkInterface> allNetInte ...

随机推荐

  1. c实现swap函数陷阱

    swap函数陷阱 使用c实现一个交换两个数的函数,代码很简单: void swap(int *a, int *b) { *a ^= *b; *b ^= *a; *a ^= *b; } 只有3行代码,且 ...

  2. java.lang.NoSuchMethodError: com.google.common.hash.HashFunction.hashInt(I)Lcom/google/common/hash/HashCode; 解决办法

    今天在java 上运行spark查询的时候出现一个问题: java.lang.NoSuchMethodError: com.google.common.hash.HashFunction.hashIn ...

  3. 面试问烂的 MySQL 查询优化,看完屌打面试官!

    Java技术栈 ,一般把连接数设置得大一些). 并发量:同一时刻数据库服务器处理的请求数量 3.超高的 CPU使用率:CPU资源耗尽出现宕机. 4.磁盘 IO:磁盘 IO性能突然下降.大量消耗磁盘性能 ...

  4. mysql之MHA、Mycat综合分析

    一.简介 MHA:  你可以把它看做是一个监控MySQL的工具,当master挂了之后,起一个slave作为master,另外一台slave重新作为新master的备库: 所以MHA的架构做好是三台数 ...

  5. 解决WIN8输入法的问题,Ctrl+空格,Ctrl+Shift,切换问题

    在WIN8中,我们曾经熟悉的的Ctrl+空格和Ctrl+Shift消失了,取而导致的是WIN+空格. 在这里先简单解释一下WIN8的输入法结构: 在WIN7以前的输入法中,输入法采用了平行目录的结构, ...

  6. Java oop第05章_多态、接口

    一. 为什么需要接口? Java中当一个类继承父类时,最多也只能继承一个父类,扩展性会受到一定的限制,为了弥补这一缺陷,Java又提供了一种新的引用数据类型分类,叫接口. 一个类只能继承一个父类,但可 ...

  7. UC浏览器禁止图片阅读模式处理方法

    本文转载自:https://www.cnblogs.com/MY0101/p/9969818.html UC浏览器点击图片会出现图片阅读模式. 如何处理? <img style=" w ...

  8. leetcode-157周赛-5216-统计元音字母序列的数目

    题目描述: 方法:倒推 class Solution(object): def countVowelPermutation(self, n): MOD = 10 ** 9 + 7 a=e=i=o=u= ...

  9. DELPHI实现类似仿360桌面的程序界面

    1.窗体半透明: Alphablend属性为true;Alphablendvalue的值为100 2.窗体透明: formCreate: Self.TransparentColor := True;S ...

  10. Ubunto 无法连接ssh客服端

    解决办法: (1)查看ip地址是否冲突 我在单位的虚拟机ip地址是192.168.14.85,与其它机器冲突了.改成了192.168.14.83   (2)关闭Ubuntu14.04的防火墙 root ...