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

简介:

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

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

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

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

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

19        /// 
20        /// 设置DNS
21        /// 

22        /// 

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

27        /// 
28        /// 设置网关
29        /// 

30        /// 

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

35        /// 
36        /// 设置网关
37        /// 

38        /// 

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

43        /// 
44        /// 设置IP地址和掩码
45        /// 

46        /// 
47        /// 

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

52        /// 
53        /// 设置IP地址,掩码和网关
54        /// 

55        /// 
56        /// 
57        /// 

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        /// 
63        /// 设置IP地址,掩码,网关和DNS
64        /// 

65        /// 
66        /// 
67        /// 
68        /// 

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        /// 
108        /// 启用DHCP服务器
109        /// 

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        /// 
127        /// 判断是否IP地址格式
128        /// 

129        /// 
130        /// 

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







下面附上我根据上面的IPProvider做的一个仿系统更改网络IP界面的小程序界面.呵呵

本文转自Kingthy博客园博客,原文链接:http://www.cnblogs.com/kingthy/archive/2007/09/15/894338.html,如需转载请自行联系原作者

相关文章
|
数据采集 JSON API
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
|
6月前
|
缓存 监控 算法
基于 C# 网络套接字算法的局域网实时监控技术探究
在数字化办公与网络安全需求增长的背景下,局域网实时监控成为企业管理和安全防护的关键。本文介绍C#网络套接字算法在局域网实时监控中的应用,涵盖套接字创建、绑定监听、连接建立和数据传输等操作,并通过代码示例展示其实现方式。服务端和客户端通过套接字进行屏幕截图等数据的实时传输,保障网络稳定与信息安全。同时,文章探讨了算法的优缺点及优化方向,如异步编程、数据压缩与缓存、错误处理与重传机制,以提升系统性能。
120 2
|
10月前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
347 0
|
数据采集 监控 调度
C#网络爬虫之TianyaCrawler实战经验分享
C#网络爬虫之TianyaCrawler实战经验分享
|
Linux 网络安全
CentOS7网络配置-静态IP设置
CentOS7网络配置-静态IP设置
967 0
|
数据采集 JSON JavaScript
C# 解析“JSON“格式数据和网络实战案例 入门
C# 解析“JSON“格式数据和网络实战案例 入门
|
JSON 监控 安全
通用网络安全编程:C#实现监控上网时间的软件与警报系统
在当今数字时代,网络安全已经成为每个人都必须关心的问题。为了保护家庭成员或企业员工在互联网上的安全,开发一款能够监控上网时间并实现警报系统的软件变得至关重要。本文将介绍如何使用C#编程语言创建这样一款软件,并通过一些具体的代码例子来阐述其实现过程。
336 0
|
网络协议 安全 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:几何网络连通性分析(上)

热门文章

最新文章