一、通过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 == )
{
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 == )
{
msg = "未查找到有效物理网卡";
return false;
} int rv = -;
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 == -)
{
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;
}

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. 6.JAVA基础复习——JAVA中文档注释与帮助文档的生成

    java中的文档注释:用于说明该类的功能作用方便他人使用关键词前需要加@符 用于类的注释 @author name 作者 @version v1.0 版本 …… 用于函数的注释 @param para ...

  2. vmware中centos6.7系统图形化安装Oracle显示乱码问题解决

    root下: 修改环境属性  vi /etc/sysconfig/i18n LANG="en_US.UTF-8 1.在每次调用图形界面以前,我们使用export临时设置LANG(ORACLE ...

  3. First Python script

    learn what is api Jailbreak pycharm install requests on pycharm write first request: get, post MFA l ...

  4. 代理模式——用AOP测试业务层方法的执行时间

    代理模式 对代理模式的理解,通过http://www.runoob.com/design-pattern/proxy-pattern.html 对AOP的代理模式,参考https://www.cnbl ...

  5. pip安装scrapy失败:twisted安装失败 error: Microsoft Visual C++ 14.0 is required.. 解决方法

    在使用pip install scrapy命令安装scrapy框架时,Twisted出现安装错误.如下: building 'twisted.test.raiser' extension error: ...

  6. mysql 数据备份和还原

    使用mysqldump命令备份 使用root用户备份test数据库下的person表 mysqldump -u root -p test person > D:\backup.sql 备份多个数 ...

  7. 除了使用new关键字,还有什么方法可以创建Java对象呢?

    今天来盘点一下除了使用 "new" 关键字创建对象,还有什么方法可以创建Java对象呢? 因为是创建对象,所以这里ioc容器不在范围内 我们先看一下常用的new关键字创建 Clas ...

  8. HTML和CSS怎么用

    首页> 1.HTML和CSS是什么? ·网站和HTML页面 ·简单理解网站 ·一个房子比喻(HTML比喻成房子,CSS为装修) ·页面的整体结构:有树桩标签对嵌套组成 ·页面的组成单元:元素 · ...

  9. Bootstrap3基础 下载bootstrap3压缩包和相应的jQuery文件

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...

  10. React点击操作自动定位到另外一个元素

    使用Ref 方式一 使用ScrollIntoView方法 import React from 'react' export default class ScrollToElement extends ...