一、通过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地址相关推荐

  1. Linux设置一个网卡IP地址,linux下一块网卡设置多个ip地址(示例代码)

    无论是在实际的生产坏境中,还是平时的练习中, 一个网卡设置多个ip地址是非常常见的,也是非常有用的. 我们以centos6.8系统为列, 在一块网卡上设置多个ip地址. 1>. 给一块网卡设置多 ...

  2. Linux下一块网卡设置多个IP地址

    在windows下给一块网卡设置多个IP,是比较容易的,今天我写的内容是关于在LINUX系统下,给一块网卡设置多个IP地址,在Linux系统下面,第一块网卡就叫eth0,第二块网卡就叫eth1,这里我 ...

  3. android获取网卡ip地址吗,Native.js获取android有线网络IP地址

    刚上手Native.js 请教问题如下: 想通过Native.js 获取Android有线网络IP地址,提示这一行console.log(en.hasMoreElements());报错: Uncau ...

  4. 设置静态固定ip地址

    archlinux设置固定ip cd /etc/netctl/ Ip adds 查看网卡id vim 网卡id TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY ...

  5. python设置本机IP地址、子网掩码、DNS,获取本机IP地址、子网掩码、DNS、MAC

    python设置本机IP地址.子网掩码.DNS,获取本机IP地址.子网掩码.DNS.MAC main.py """=== coding: UTF8 ==="&q ...

  6. 两台计算机的ip地址怎么配置,同一台电脑如何设置两个IP地址?电脑配置双ip地址图文教程...

    同一台电脑如何设置两个IP地址?很多时候我们电脑在实际运用过程中需要访问两个网段的地址,但是我们只有一个IP,跨网段是不能访问的,现在操作系统有了这个功能,一台电脑可以设置两个网段的ip解决了以前非要 ...

  7. Linux系统配置网卡ip地址

    这里我采用修改网络配置文件的方式配置网卡的ip地址,网络服务重启ip地址也不会丢失 1.进入到网络配置文件目录/etc/sysconfig/network-scripts,这里可以看到以ifcfg-开 ...

  8. 计算机默认的dns地址怎么找,怎么设置电脑的IP地址与DNS地址

    生活中有很多地方需要修改电脑IP地址和DNS地址后才能上网,那你知道怎样设置电脑的IP地址与DNS地址吗?下面是学习啦小编给大家整理的一些有关设置电脑的IP地址与DNS地址的方法,希望对大家有帮助! ...

  9. 如何设置局域网静态ip地址?

    一.什么是静态ip地址? 静态IP地址即固定IP地址,是长期固定分配给一台计算机使用的IP地址,一般只是作为特殊服务器的电脑才拥有静态IP地址.静态IP地址是手动设置的. 二.设置静态ip地址有什么好 ...

最新文章

  1. 单据自动转换并审核的方法示例
  2. 三、Oracle的简单查询
  3. MySQL SQL优化
  4. 深度优先搜索知识总结
  5. Shell入门(十)之echo
  6. 使用 Python 切割图片
  7. 为什么析构函数可以能声明为虚函数,构造函数不可以
  8. Swagger 官方 Starter 配上这个增强方案是真的香!
  9. 实践线性模型对于大规模一类别协同过滤
  10. java.util.concurrent.*下的常见类你了解多少?
  11. matlab 雷达工具箱,使用Matlab的工具箱,学习“相控阵雷达技术”
  12. 4k电视测试软件64,2017年四款看4k视频软件推荐,智能电视必备!
  13. ubuntu live cd制作
  14. django运行错误:wrong number of arguments for ‘set‘ command
  15. CDR插件开发之Addon插件001 - 从零开始安装VS2022详细步骤
  16. Pandas创建透视表教程
  17. 全球首发,国产开源「文本-视频生成」模型!免费在线体验,一键实现视频生成自由...
  18. No input file specified 出现的原因及解决方法
  19. JDBC心得体会--总结
  20. GMTSAR合成孔径雷达干涉测量InSAR数据处理、形变信息提取与分析等实践技术应用

热门文章

  1. 2010-2019年290个地级市经济发展与城市绿化数据
  2. 流式凋亡率计算_流式细胞仪检测细胞凋亡率案例分析报告
  3. [BZOJ1614][Usaco2007 Jan]Telephone Lines架设电话线
  4. web的常见的性能优化方法
  5. 基于SpringBoot的项目:商城项目
  6. [记录] 文献管理 —— 将自己在Mendeley上的几千篇文献进行归档 (踩过的坑)
  7. 20200304----大厂笔试1 笔记
  8. APP刷量黑色收入年过百万:开发者急功近利
  9. Thrift in python
  10. 开源软件鸿蒙闪退,鸿蒙开源是怎样一情况