WMI设置有线网卡IP地址
一、通过WMI获取物理适配器序号
NetEnabled: 是否启用了适配器,True为启用,False为禁用;
PhysicalAdapter: 适配器是否物理或逻辑适配器,True为物理,False为逻辑;
public static List<int> GetUseIndex(){List<int> list = new List<int>();ManagementClass mc = new ManagementClass("Win32_NetworkAdapter");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){bool p1 = Convert.ToBoolean(mo["NetEnabled"]);bool p2 = Convert.ToBoolean(mo["PhysicalAdapter"]);if (p1 && p2){list.Add(Convert.ToInt32((mo["Index"])));}}return list;}
二、过滤虚拟网卡、无线网卡
通过“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_PHYSICAL ==NCF_PHYSICAL
判断有线网卡和无线网卡,注册表路径:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\【连接索引号】\Ndi\Interfaces
路径下的键值:LowerRange,如果Value包含wifi或者wlan,(验证的两台设备Value=“wlan,ethernet,vwifi”),表示无线网卡,具体代码如下:
public static bool GetWiredIndex(ref int index, ref string msg){try{List<int> allenable = GetUseIndex();if (allenable.Count == 0){msg = "未查找到有效网络连接";return false;}List<int> allReal = new List<int>();foreach (int ii in allenable){var vv = Convert.ToInt32(GetCharacteristics(@"SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\000" + ii, "Characteristics"));if ((vv & 0x4) == 0x4)//区分物理网卡、虚拟网卡 {allReal.Add(ii);}}if (allReal.Count == 0){msg = "未查找到有效物理网卡";return false;}int rv = -1;foreach (int ii in allReal){var vv = GetCharacteristics(@"SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\000" + ii + @"\Ndi\Interfaces", "LowerRange").ToString();if (!vv.Contains("wifi") && !vv.Contains("wlan")){rv = ii;break;}}if (rv == -1){msg = "未查找到有效有线网卡";return false;}else{index = rv;return true;}}catch (Exception ex){msg = ex.Message;return false;}}private static object GetCharacteristics(string name, string key){object registData;using (RegistryKey hkml = Registry.LocalMachine){RegistryKey software = hkml.OpenSubKey(name, true);registData = software.GetValue(key).ToString();}return registData;}
三、设置有线网卡IP、子网掩码、网关、DNS
public static bool SetWiredIP(int index, string ip, string subnetMask, string ipGateway, string dns){ ManagementBaseObject inPar = null;ManagementBaseObject outPar = null;ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){if (Convert.ToInt32(mo["Index"]) == index){//设置ip地址和子网掩码 inPar = mo.GetMethodParameters("EnableStatic");inPar["IPAddress"] = new string[] { ip };inPar["SubnetMask"] = new string[] { subnetMask };outPar = mo.InvokeMethod("EnableStatic", inPar, null);//设置网关地址 inPar = mo.GetMethodParameters("SetGateways");inPar["DefaultIPGateway"] = new string[] { ipGateway };outPar = mo.InvokeMethod("SetGateways", inPar, null);//设置DNS inPar = mo.GetMethodParameters("SetDNSServerSearchOrder");inPar["DNSServerSearchOrder"] = new string[] { dns };outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null);return true;}}return false;}
转载于:https://www.cnblogs.com/xienb/p/10307524.html
WMI设置有线网卡IP地址相关推荐
- Linux设置一个网卡IP地址,linux下一块网卡设置多个ip地址(示例代码)
无论是在实际的生产坏境中,还是平时的练习中, 一个网卡设置多个ip地址是非常常见的,也是非常有用的. 我们以centos6.8系统为列, 在一块网卡上设置多个ip地址. 1>. 给一块网卡设置多 ...
- Linux下一块网卡设置多个IP地址
在windows下给一块网卡设置多个IP,是比较容易的,今天我写的内容是关于在LINUX系统下,给一块网卡设置多个IP地址,在Linux系统下面,第一块网卡就叫eth0,第二块网卡就叫eth1,这里我 ...
- android获取网卡ip地址吗,Native.js获取android有线网络IP地址
刚上手Native.js 请教问题如下: 想通过Native.js 获取Android有线网络IP地址,提示这一行console.log(en.hasMoreElements());报错: Uncau ...
- 设置静态固定ip地址
archlinux设置固定ip cd /etc/netctl/ Ip adds 查看网卡id vim 网卡id TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY ...
- python设置本机IP地址、子网掩码、DNS,获取本机IP地址、子网掩码、DNS、MAC
python设置本机IP地址.子网掩码.DNS,获取本机IP地址.子网掩码.DNS.MAC main.py """=== coding: UTF8 ==="&q ...
- 两台计算机的ip地址怎么配置,同一台电脑如何设置两个IP地址?电脑配置双ip地址图文教程...
同一台电脑如何设置两个IP地址?很多时候我们电脑在实际运用过程中需要访问两个网段的地址,但是我们只有一个IP,跨网段是不能访问的,现在操作系统有了这个功能,一台电脑可以设置两个网段的ip解决了以前非要 ...
- Linux系统配置网卡ip地址
这里我采用修改网络配置文件的方式配置网卡的ip地址,网络服务重启ip地址也不会丢失 1.进入到网络配置文件目录/etc/sysconfig/network-scripts,这里可以看到以ifcfg-开 ...
- 计算机默认的dns地址怎么找,怎么设置电脑的IP地址与DNS地址
生活中有很多地方需要修改电脑IP地址和DNS地址后才能上网,那你知道怎样设置电脑的IP地址与DNS地址吗?下面是学习啦小编给大家整理的一些有关设置电脑的IP地址与DNS地址的方法,希望对大家有帮助! ...
- 如何设置局域网静态ip地址?
一.什么是静态ip地址? 静态IP地址即固定IP地址,是长期固定分配给一台计算机使用的IP地址,一般只是作为特殊服务器的电脑才拥有静态IP地址.静态IP地址是手动设置的. 二.设置静态ip地址有什么好 ...
最新文章
- 单据自动转换并审核的方法示例
- 三、Oracle的简单查询
- MySQL SQL优化
- 深度优先搜索知识总结
- Shell入门(十)之echo
- 使用 Python 切割图片
- 为什么析构函数可以能声明为虚函数,构造函数不可以
- Swagger 官方 Starter 配上这个增强方案是真的香!
- 实践线性模型对于大规模一类别协同过滤
- java.util.concurrent.*下的常见类你了解多少?
- matlab 雷达工具箱,使用Matlab的工具箱,学习“相控阵雷达技术”
- 4k电视测试软件64,2017年四款看4k视频软件推荐,智能电视必备!
- ubuntu live cd制作
- django运行错误:wrong number of arguments for ‘set‘ command
- CDR插件开发之Addon插件001 - 从零开始安装VS2022详细步骤
- Pandas创建透视表教程
- 全球首发,国产开源「文本-视频生成」模型!免费在线体验,一键实现视频生成自由...
- No input file specified 出现的原因及解决方法
- JDBC心得体会--总结
- GMTSAR合成孔径雷达干涉测量InSAR数据处理、形变信息提取与分析等实践技术应用
热门文章
- 2010-2019年290个地级市经济发展与城市绿化数据
- 流式凋亡率计算_流式细胞仪检测细胞凋亡率案例分析报告
- [BZOJ1614][Usaco2007 Jan]Telephone Lines架设电话线
- web的常见的性能优化方法
- 基于SpringBoot的项目:商城项目
- [记录] 文献管理 —— 将自己在Mendeley上的几千篇文献进行归档 (踩过的坑)
- 20200304----大厂笔试1 笔记
- APP刷量黑色收入年过百万:开发者急功近利
- Thrift in python
- 开源软件鸿蒙闪退,鸿蒙开源是怎样一情况