MAC地址获取,有线网卡与无线网卡、物理网卡与虚拟网卡的区分
获取当前活跃状态的网卡MAC地址、物理地址
Wmic命令:Win32_NetworkAdapter和Win32_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地址获取,有线网卡与无线网卡、物理网卡与虚拟网卡的区分的更多相关文章
- 根据MAC地址获取网络地址及ZDP_NwkAddrReq函数的用法
1..对于设备需要获取本设备的网络地址和MAC地址: NLME_GetShortAddr()——返回本设备的16位网络地址 NLME_GetExtAddr()—— 返回本设备的64位扩展地址 2.使 ...
- Linux 下PHP获取服务器状态CPU、MEM使用率、磁盘使用率、IP地址获取、MAC地址获取等信息记录
获取服务器状态记录使用的是SHELL命令方式进行获取输出结果 然后进行字符串拆分处理等方式进行获取到自己有用信息 贴出获取方式以及常用处理方式 <?PHP $fp = popen('执行SHE ...
- 获取客户机MAC地址 根据IP地址 获取机器的MAC地址 / 获取真实Ip地址
[DllImport("Iphlpapi.dll")] private static extern int SendARP(Int32 dest, Int32 host, ref ...
- 做双网卡绑定_______物理机在双网卡的情况下做多IP绑定
公司的环境是这样的: 一台物理机需要做双网卡绑定,同时呢,在双网卡绑定的同时还要做多IP. 其实整个过程可以分为两个步骤: 第一个,物理机先做双网卡. 第二个,在bond上做多IP实例. 双网卡绑定的 ...
- ios Mac 地址获取
//mac address #include <sys/socket.h> // Per msqr #include <sys/sysctl.h> #include <n ...
- Java获取本机的IP与MAC地址
有些机器有许多虚拟的网卡,获取IP地址时会出现一些意外,所以需要一些验证: // 获取mac地址 public static String getMacAddress() { try { Enumer ...
- 转 笔记本无线和有线的MAC地址修改
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xueqiang03/article/details/80741734无线网卡的mac地址在出厂时就被 ...
- java获取服务器IP地址及MAC地址的方法
这篇文章主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下 本文实例讲述了 ...
- java获取本机IP地址和MAC地址的方法
// 获取ip地址 public static String getIpAddress() { try { Enumeration<NetworkInterface> allNetInte ...
随机推荐
- 机械手相机9点坐标标定-基于C#+EmguCV
很多初学者,都对标定概念模糊不清,分不清坐标系之间的关系,搞不清相机标定和机械手相机标定有什么关系,想当初自己也是一个人摸索了很久,本文将尽量给大家解释. 我们通常所说的相机标定分为两种,一种是相机参 ...
- 普通用户授予root权限
开始用linux的时候会遇到用户权限问题,比如安装软件的时候经常会提示权限不足,下面介绍给普通用户授予root权限. 找到 cd /etc/sudoers可以看到用户的权限是:只有读取的权限(以下操 ...
- Jmeter-----请求依赖之JsonExtractor
层级关系填写: 1.第一个必须是$ 2.用英文状态下的 . 来代表下一个层级
- 一个好的mvc5+ef6的学习地址
链接地址: MVC5 + EF6 入门完整教程 感谢这位博主的无私奉献 文章目录列表:http://www.cnblogs.com/miro/p/3777960.html#3673688
- PHP算法之整数转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 ...
- MySql General error:2006
当启用模块时发生Mysql数据库错误,错误信息见附件,实际是“General error: 2006 MySQL server has gone away......”错误. 解决方法:找到my.in ...
- canvas绘制线和矩形
###canvas绘制矩形 HTML中的元素canvas只支持一种原生的图形绘制:矩形.所有其他的图形的绘制都至少需要生成一条路径 1.绘制矩形 canvas提供了三种方法绘制矩形: ----> ...
- 【JZOJ6346】ZYB和售货机
description analysis 其实这个连出来的东西叫基环内向树 先考虑很多森林的情况,也就是树根连回自己 明显树根物品是可以被取完的,那么买树根的价钱要是儿子中价钱最小的那个 或者把那个叫 ...
- ETL工具-Kattle:初识kattle
ETL是EXTRACT(抽取).TRANSFORM(转换).LOAD(加载)的简称,实现数据从多个异构数据源加载到数据库或其他目标地址,是数据仓库建设和维护中的重要一环也是工作量较大的一块.当前知道的 ...
- 单调栈——cf777E
傻逼单调栈啊我怎么想了半天dp #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef st ...