[原创]C#调用WMI更改本地网络IP设置

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析DNS,个人版 1个月
云解析 DNS,旗舰版 1个月
简介:

因家中与公司的网络配置不同,而我又是带着我的笔记本在家里与公司来来回回.这就导致要经常设置不同的IP和网关数据,一段时间下来后觉得特烦,做为一个程序员.为什么不好好利用自己的知识偷懒一下呢?特别是像我这样一个懒惰的人...

因为网络IP设置是要涉及到硬件,C#是没有现成接口调用的.只能通过调用API或者是WMI这道系统提供给我们的桥梁..在WMI这个大库中用于管理网络配置的则主要是通过"Win32_NetworkAdapterConfiguration"这个管理类.这里面已基本包括了IP,DNS,网关的设置信息...

在C#中使用WMI是很轻松的事情.下面直接给出C#实现代码,呵呵,我的文字表达能力很差,所以我也不多说了,代码量很少,看起来应该很简单的:

  1 using  System;
  2 using  System.Collections;
  3 using  System.Text;
  4 using  System.Management;
  5 using  System.Text.RegularExpressions;
  6 namespace  Kingthy.Windows.IPChanger.Providers
  7 {
  8    /// <summary>
  9    /// IPProvider 的摘要说明。
 10    /// </summary>

 11    public class IPProvider
 12    {
 13        public IPProvider()
 14        {
 15            //
 16            // TODO: 在此处添加构造函数逻辑
 17            //
 18        }

 19        /// <summary>
 20        /// 设置DNS
 21        /// </summary>
 22        /// <param name="dns"></param>

 23        public static void SetDNS(string[] dns)
 24        {
 25            SetIPAddress(null,null,null,dns);
 26        }

 27        /// <summary>
 28        /// 设置网关
 29        /// </summary>
 30        /// <param name="getway"></param>

 31        public static void SetGetWay(string getway)
 32        {
 33            SetIPAddress(null,null,new string[]{getway},null);
 34        }

 35        /// <summary>
 36        /// 设置网关
 37        /// </summary>
 38        /// <param name="getway"></param>

 39        public static void SetGetWay(string[] getway)
 40        {
 41            SetIPAddress(null,null,getway,null);
 42        }

 43        /// <summary>
 44        /// 设置IP地址和掩码
 45        /// </summary>
 46        /// <param name="ip"></param>
 47        /// <param name="submask"></param>

 48        public static void SetIPAddress(string ip,string submask)
 49        {
 50            SetIPAddress(new string[]{ip},new string[]{submask},null,null);
 51        }

 52        /// <summary>
 53        /// 设置IP地址,掩码和网关
 54        /// </summary>
 55        /// <param name="ip"></param>
 56        /// <param name="submask"></param>
 57        /// <param name="getway"></param>

 58        public static void SetIPAddress(string ip,string submask,string getway)
 59        {
 60            SetIPAddress(new string[]{ip},new string[]{submask},new string[]{getway},null);
 61        }

 62        /// <summary>
 63        /// 设置IP地址,掩码,网关和DNS
 64        /// </summary>
 65        /// <param name="ip"></param>
 66        /// <param name="submask"></param>
 67        /// <param name="getway"></param>
 68        /// <param name="dns"></param>

 69        public static void SetIPAddress(string[] ip,string[] submask,string[] getway,string[] dns)
 70        {
 71            ManagementClass wmi = new ManagementClass("Win32_NetworkAdapterConfiguration");
 72            ManagementObjectCollection moc = wmi.GetInstances();
 73            ManagementBaseObject inPar = null;
 74            ManagementBaseObject outPar = null;
 75            foreach(ManagementObject mo in moc)
 76            {
 77                //如果没有启用IP设置的网络设备则跳过
 78                if(!(bool)mo["IPEnabled"])continue;
 79
 80                //设置IP地址和掩码
 81                if(ip != null && submask != null)
 82                {
 83                    inPar = mo.GetMethodParameters("EnableStatic");
 84                    inPar["IPAddress"= ip;
 85                    inPar["SubnetMask"= submask;                
 86                    outPar = mo.InvokeMethod("EnableStatic",inPar,null);
 87                }

 88
 89                //设置网关地址
 90                if(getway != null)
 91                {
 92                    inPar = mo.GetMethodParameters("SetGateways");
 93                    inPar["DefaultIPGateway"= getway;
 94                    outPar = mo.InvokeMethod("SetGateways",inPar,null);
 95                }

 96
 97                //设置DNS地址
 98                if(dns != null)
 99                {
100                    inPar = mo.GetMethodParameters("SetDNSServerSearchOrder");
101                    inPar["DNSServerSearchOrder"= dns;
102                    outPar = mo.InvokeMethod("SetDNSServerSearchOrder",inPar,null);
103                }

104            }

105        }

106
107        /// <summary>
108        /// 启用DHCP服务器
109        /// </summary>

110        public static void EnableDHCP()
111        {
112            ManagementClass wmi = new ManagementClass("Win32_NetworkAdapterConfiguration");
113            ManagementObjectCollection moc = wmi.GetInstances();
114            foreach(ManagementObject mo in moc)
115            {
116                //如果没有启用IP设置的网络设备则跳过
117                if(!(bool)mo["IPEnabled"])continue;
118
119                //重置DNS为空
120                mo.InvokeMethod("SetDNSServerSearchOrder",null);
121                //开启DHCP
122                mo.InvokeMethod("EnableDHCP",null);
123            }

124        }

125
126        /// <summary>
127        /// 判断是否IP地址格式
128        /// </summary>
129        /// <param name="ip"></param>
130        /// <returns></returns>

131        public static bool IsIPAddress(string ip)
132        {
133            string[] arr = ip.Split('.');
134            if(arr.Length != 4)return false;
135
136            string pattern = @"\d{1,3}";
137            for(int i=0; i<arr.Length; i++)
138            {
139                string d = arr[i];
140                if(i == 0 && d == "0")return false;
141                if(!Regex.IsMatch(d,pattern))return false;
142
143                if(d != "0")
144                {
145                    d = d.TrimStart('0');
146                    if(d == "")return false;
147
148                    if(int.Parse(d) > 255)return false;
149                }

150            }

151
152            return true;
153        }

154    }

155}

156


注:关系Win32_NetworkAdapterConfiguration这个管理类可以参考这个教程
http://www.microsoft.com/china/technet/community/scriptcenter/topics/networking/01_atnc_intro.mspx




下面附上我根据上面的IPProvider做的一个仿系统更改网络IP界面的小程序界面.呵呵
本文转自Kingthy博客园博客,原文链接:http://www.cnblogs.com/kingthy/archive/2007/09/15/894338.html ,如需转载请自行联系原作者
相关文章
|
9月前
|
数据采集 JSON API
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
|
2月前
|
数据采集 监控 调度
C#网络爬虫之TianyaCrawler实战经验分享
C#网络爬虫之TianyaCrawler实战经验分享
|
7月前
|
数据采集 JSON JavaScript
C# 解析“JSON“格式数据和网络实战案例 入门
C# 解析“JSON“格式数据和网络实战案例 入门
|
8月前
|
JSON 监控 安全
通用网络安全编程:C#实现监控上网时间的软件与警报系统
在当今数字时代,网络安全已经成为每个人都必须关心的问题。为了保护家庭成员或企业员工在互联网上的安全,开发一款能够监控上网时间并实现警报系统的软件变得至关重要。本文将介绍如何使用C#编程语言创建这样一款软件,并通过一些具体的代码例子来阐述其实现过程。
217 0
|
10月前
|
网络协议 安全 API
C# Socket网络编程精华篇
C# Socket网络编程精华篇
|
存储 C#
基于C#的ArcEngine二次开发33:几何网络连通性分析(下)
基于C#的ArcEngine二次开发33:几何网络连通性分析
基于C#的ArcEngine二次开发33:几何网络连通性分析(下)
|
数据挖掘 数据库 C#
基于C#的ArcEngine二次开发33:几何网络连通性分析(上)
基于C#的ArcEngine二次开发33:几何网络连通性分析
基于C#的ArcEngine二次开发33:几何网络连通性分析(上)
|
Linux 编译器 开发工具
Linux网络环境配置:(内含:随机ip和固定ip设置方式)
Linux网络环境配置:(内含:随机ip和固定ip设置方式)
251 0
Linux网络环境配置:(内含:随机ip和固定ip设置方式)
|
C#
C#网络应用编程,实验七: 异步编程练习
C#网络应用编程,实验七: 异步编程练习
107 1
C#网络应用编程,实验七: 异步编程练习
|
C#
C#网络应用编程,实验5:数据流练习
C#网络应用编程,实验5:数据流练习
109 1
C#网络应用编程,实验5:数据流练习