一、通过WMI获取物理适配器序号

NetEnabled: 是否启用了适配器,True为启用,False为禁用;
PhysicalAdapter: 适配器是否物理或逻辑适配器,True为物理,False为逻辑;

  1. public static List<int> GetUseIndex()
  2. {
  3. List<int> list = new List<int>();
  4. ManagementClass mc = new ManagementClass("Win32_NetworkAdapter");
  5. ManagementObjectCollection moc = mc.GetInstances();
  6. foreach (ManagementObject mo in moc)
  7. {
  8. bool p1 = Convert.ToBoolean(mo["NetEnabled"]);
  9. bool p2 = Convert.ToBoolean(mo["PhysicalAdapter"]);
  10. if (p1 && p2)
  11. {
  12. list.Add(Convert.ToInt32((mo["Index"])));
  13. }
  14. }
  15. return list;
  16. }

二、过滤虚拟网卡、无线网卡

通过“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”),表示无线网卡,具体代码如下:

  1. public static bool GetWiredIndex(ref int index, ref string msg)
  2. {
  3. try
  4. {
  5. List<int> allenable = GetUseIndex();
  6. if (allenable.Count == )
  7. {
  8. msg = "未查找到有效网络连接";
  9. return false;
  10. }
  11. List<int> allReal = new List<int>();
  12. foreach (int ii in allenable)
  13. {
  14. var vv = Convert.ToInt32(GetCharacteristics(@"SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\000" + ii, "Characteristics"));
  15. if ((vv & 0x4) == 0x4)//区分物理网卡、虚拟网卡
  16. {
  17. allReal.Add(ii);
  18. }
  19. }
  20. if (allReal.Count == )
  21. {
  22. msg = "未查找到有效物理网卡";
  23. return false;
  24. }
  25.  
  26. int rv = -;
  27. foreach (int ii in allReal)
  28. {
  29. var vv = GetCharacteristics(@"SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\000" + ii + @"\Ndi\Interfaces", "LowerRange").ToString();
  30. if (!vv.Contains("wifi") && !vv.Contains("wlan"))
  31. {
  32. rv = ii;
  33. break;
  34. }
  35. }
  36. if (rv == -)
  37. {
  38. msg = "未查找到有效有线网卡";
  39. return false;
  40. }
  41. else
  42. {
  43. index = rv;
  44. return true;
  45. }
  46. }
  47. catch (Exception ex)
  48. {
  49. msg = ex.Message;
  50. return false;
  51. }
  52. }
  53.  
  54. private static object GetCharacteristics(string name, string key)
  55. {
  56. object registData;
  57. using (RegistryKey hkml = Registry.LocalMachine)
  58. {
  59. RegistryKey software = hkml.OpenSubKey(name, true);
  60. registData = software.GetValue(key).ToString();
  61. }
  62. return registData;
  63. }

三、设置有线网卡IP、子网掩码、网关、DNS

  1. public static bool SetWiredIP(int index, string ip, string subnetMask, string ipGateway, string dns)
  2. {
            
  3. ManagementBaseObject inPar = null;
  4. ManagementBaseObject outPar = null;
  5. ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
  6. ManagementObjectCollection moc = mc.GetInstances();
  7. foreach (ManagementObject mo in moc)
  8. {
  9. if (Convert.ToInt32(mo["Index"]) == index)
  10. {
  11. //设置ip地址和子网掩码
  12. inPar = mo.GetMethodParameters("EnableStatic");
  13. inPar["IPAddress"] = new string[] { ip };
  14. inPar["SubnetMask"] = new string[] { subnetMask };
  15. outPar = mo.InvokeMethod("EnableStatic", inPar, null);
  16.  
  17. //设置网关地址
  18. inPar = mo.GetMethodParameters("SetGateways");
  19. inPar["DefaultIPGateway"] = new string[] { ipGateway };
  20. outPar = mo.InvokeMethod("SetGateways", inPar, null);
  21.  
  22. //设置DNS
  23. inPar = mo.GetMethodParameters("SetDNSServerSearchOrder");
  24. inPar["DNSServerSearchOrder"] = new string[] { dns };
  25. outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null);
  26. return true;
  27. }
  28. }
  29. return false;
  30. }

WMI设置有线网卡IP地址的更多相关文章

  1. linux配置网卡IP地址命令详细介绍及一些常用网络配置命令

    linux配置网卡IP地址命令详细介绍及一些常用网络配置命令2010-- 个评论 收藏 我要投稿 Linux命令行下配置IP地址不像图形界面下那么方 便,完全需要我们手动配置,下面就给大家介绍几种配置 ...

  2. CentOS 网络设置修改 指定IP地址 DNS 网关(转)

    CentOS 网络设置修改 指定IP地址 DNS 网关(实测 笔记)   环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Centos-6.5-x86_64 ...

  3. 刚写好的读取多网卡IP地址的函数

    虽然现在一机多网卡已经很普遍(像Notebook带有线.无线.蓝芽等),但是找一个现成的能够一次过读出所有网卡IP地址的函数实在是难,无奈自己写了一个,好东西谁用谁知道. //uses WinSock ...

  4. ubuntu Server 设置主机静态 ip地址

    ubuntu Server 设置主机静态 ip地址 1:先输入 ifconfig 查看当前网络配置 2:然后关闭 eth0 网卡 sudo ifdown eth0 3:配置静态ip sudo vim ...

  5. 从ip addr add和ifconfig的区别看linux网卡ip地址的结构

    今天一个老外在邮件列表上问了一个问题,就是ip addr add和ifconfig的区别,我给他进行了解答,可能因为英语不好吧,解答的很简单,因此我还是要在这里详细说明一下.其实它们之间没有什么区别, ...

  6. 网吧局域网里的设置外网IP地址、设置内网IP地址、限制内网速度和路由器共享

    现在啊,网吧的需求越来越高,同时在经济比较充裕的情况下,作为网吧的老板可能希望打造全千兆的网吧,让每个进入网吧的人都能充分体验高速的感觉,当然更重要的是在同行竞争中处于上游,特别是对网络游戏爱好者的吸 ...

  7. Azure经典门户创建VM,如何设置使用静态IP地址?

    使用 Azure 经典管理门户中创建的虚拟机,无法使用静态IP 地址,在管理界面没有该设置.在新的管理门户中虽然有使用静态IP的设置,但是选项是灰色,无法修改,提示错误:This virtual ma ...

  8. Lodop获取客户端主网卡ip地址是0.0.0.0

    LODOP技术手册的GET_SYSTEM_INFO篇,LODOP可以用语句获取到客户端很多信息,NetworkAdapter.1.IPAddress是主网卡IP地址,通常情况下是没问题的,不过如果当前 ...

  9. 为同一部电脑设置2个IP地址

    为同一部电脑设置2个IP地址 在HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans下 点击0000.0001,000 ...

随机推荐

  1. JVM 工作原理和流程

    作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚 ...

  2. Windows 下安装 Memcached

    Windows 下安装 Memcached 官网上并未提供 Memcached 的 Windows 平台安装包,我们可以使用以下链接来下载,你需要根据自己的系统平台及需要的版本号点击对应的链接下载即可 ...

  3. Web 前端编程运维必备

    Html 1.Html 标签初知 2.Html 标签种类 3.Html 符号 4.Html Title 标签 5.Html meta 标签 6.Html Link 标签 7.Html p 标签 8.H ...

  4. 终于有人把云计算、大数据和 AI 讲明白了

    最近学习hadoop以及生态,顺便看到了这篇文章,总结的很到位,转载下. 我今天要讲这三个话题,一个是云计算,一个大数据,一个人工智能,我为什么要讲这三个东西呢?因为这三个东西现在非常非常的火,它们之 ...

  5. 组装一台PRUSA I3打印机

    闲来无事,又搞了台机.这样下去顶不住了.草. 还是咸鱼购买,但是这台收到的时候比我以前任何一台都要散,几乎重新装了一台. 此处省略收到货时候的零件图,省略装机图. 不得不提的是,原机用的山寨melzi ...

  6. 将markdown文档使用gulp转换为HTML【附带两套css样式】

    将markdown文档使用gulp转换为HTML[附带两套css样式] 今天遇到一个需求,即将Markdown文档转为为HTML在网页展示,身为一名程序员,能用代码解决的问题,手动打一遍无疑是可耻的. ...

  7. Pycharm,Python 安装OpenCV and CV2 时,报错,教你如何正确安装。

    Collecting cv2 Could not find a version that satisfies the requirement cv2 (from versions: ) No matc ...

  8. java中的循环方法(附带本人遇到的坑)

    java循环结构 顺序结构的程序语句只能 被执行一次.如果你要同样的操作执行多次,就需要使用循环结构. java中有三种主要的循环结构: 1.while 循环 2.do...while 循环 3.fo ...

  9. windows中cmd常用命令收集

    1.经常会启动端口后忘关,需要杀端口的命令:查找端口占用命令 netstat -ano|findstr 端口例如      (8081)      杀端口: taskkill /pid xxxxx - ...

  10. BalkanOI 2018 Parentrises(贪心+基础DP)

    题意 https://loj.ac/problem/2713 思路 对于 \(\text{P1}\) 的档,首先可以看出 \(O(n^3)\) 的方法,即用 \(O(n^3)\) 的 \(\text{ ...