zoukankan      html  css  js  c++  java
  • C#设置本地网络(DNS、网关、子网掩码、IP)

    如今网络在我们的生活工作中所起的作用越来越大,可以说离开了网络我们就无法正常的工作和生活。作为程序员我们写的程序大多数也会跟网络相关,而想要使用网络首先要将机器的网络配置设置好。而手动设置的方法显然很不可取,所以我们要让程序帮我们完成。下面是一个很常用的C#设置系统各种网络参数的一个小Demo一起看看吧。 

    这个Demo是通过"Win32_NetworkAdapterConfiguration"这个管理类.这里面已基本包括了IP,DNS,网关的设置信息。 

    在C#中使用WMI还是比较简单的: 

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System;
    using System.Collections;
    using System.Text;
    using System.Management;
    using System.Text.RegularExpressions;
    
    
    namespace Demo
    {
        /// <summary>
        /// 网络设置类,设置网络的各种参数(DNS、网关、子网掩码、IP)
        /// </summary>
        public class NetworkSetting
        {
            public NetworkSetting()
            {
                // 构造函数逻辑            
            }
    
            /// <summary>
            /// 设置DNS
            /// </summary>
            /// <param name="dns"></param>
            public static void SetDNS(string[] dns)
            {
                SetIPAddress(null, null, null, dns);
            }
            /// <summary>
            /// 设置网关
            /// </summary>
            /// <param name="getway"></param>
            public static void SetGetWay(string getway)
            {
                SetIPAddress(null, null, new string[] { getway }, null);
            }
            /// <summary>
            /// 设置网关
            /// </summary>
            /// <param name="getway"></param>
            public static void SetGetWay(string[] getway)
            {
                SetIPAddress(null, null, getway, null);
            }
            /// <summary>
            /// 设置IP地址和掩码
            /// </summary>
            /// <param name="ip"></param>
            /// <param name="submask"></param>
            public static void SetIPAddress(string ip, string submask)
            {
                SetIPAddress(new string[] { ip }, new string[] { submask }, null, null);
            }
            /// <summary>
            /// 设置IP地址,掩码和网关
            /// </summary>
            /// <param name="ip"></param>
            /// <param name="submask"></param>
            /// <param name="getway"></param>
            public static void SetIPAddress(string ip, string submask, string getway)
            {
                SetIPAddress(new string[] { ip }, new string[] { submask }, new string[] { getway }, null);
            }
            /// <summary>
            /// 设置IP地址,掩码,网关和DNS
            /// </summary>
            /// <param name="ip"></param>
            /// <param name="submask"></param>
            /// <param name="getway"></param>
            /// <param name="dns"></param>
            public static void SetIPAddress(string[] ip, string[] submask, string[] getway, string[] dns)
            {
                ManagementClass wmi = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc = wmi.GetInstances();
                ManagementBaseObject inPar = null;
                ManagementBaseObject outPar = null;
                foreach (ManagementObject mo in moc)
                {
                    //如果没有启用IP设置的网络设备则跳过
                    if (!(bool) mo["IPEnabled"])
                        continue;                
                    
                    //设置IP地址和掩码
                    if (ip != null && submask != null)
                    {
                        inPar = mo.GetMethodParameters("EnableStatic");
                        inPar["IPAddress"] = ip;
                        inPar["SubnetMask"] = submask;
                        outPar = mo.InvokeMethod("EnableStatic", inPar, null);
                    }                
                    
                    //设置网关地址
                    if (getway != null)
                    {
                        inPar = mo.GetMethodParameters("SetGateways");
                        inPar["DefaultIPGateway"] = getway;
                        outPar = mo.InvokeMethod("SetGateways", inPar, null);
                    }                
                    
                    //设置DNS地址
                    if (dns != null)
                    {
                        inPar = mo.GetMethodParameters("SetDNSServerSearchOrder");
                        inPar["DNSServerSearchOrder"] = dns;
                        outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null);
                    }
                }
            }        
            
            /// <summary>
            /// 启用DHCP服务器
            /// </summary>
            public static void EnableDHCP()
            {
                ManagementClass wmi = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc = wmi.GetInstances();
                foreach (ManagementObject mo in moc)
                {
                    //如果没有启用IP设置的网络设备则跳过
                    if (!(bool) mo["IPEnabled"])
                        continue;               
                    //重置DNS为空
                    mo.InvokeMethod("SetDNSServerSearchOrder", null);
                    //开启DHCP
                    mo.InvokeMethod("EnableDHCP", null);
                }
            }        
    
            /// <summary>
            /// 判断是否符合IP地址格式
            /// </summary>
            /// <param name="ip"></param>
            /// <returns></returns>
            public static bool IsIPAddress(string ip)
            {
                //将完整的IP以“.”为界限分组
                string[] arr = ip.Split('.');
    
    
                //判断IP是否为四组数组成
                if (arr.Length != 4)
                    return false;            
    
    
                //正则表达式,1~3位整数
                string pattern = @"\d{1,3}";
                for (int i = 0; i < arr.Length; i++)
                {
                    string d = arr[i];
    
    
                    //判断IP开头是否为0
                    if (i == 0 && d == "0")
                        return false;
    
    
                    //判断IP是否是由1~3位数组成
                    if (!Regex.IsMatch(d, pattern))
                        return false;            
        
                    if (d != "0")
                    {
                        //判断IP的每组数是否全为0
                        d = d.TrimStart('0');
                        if (d == "")
                            return false;        
                        
                        //判断IP每组数是否大于255
                        if (int.Parse(d) > 255)
                            return false;
                    }
                }            return true;
            }
        }
    }

    好了,写好上面这个类以后,就等着哪里需要然后NEW一个就可以了。很简单吧,如果遇到设置失败的情况,可能是因为权限不够,执行C#默认以管理员身份运行程序

  • 相关阅读:
    PAT 甲级 1027 Colors in Mars
    PAT 甲级 1026 Table Tennis(模拟)
    PAT 甲级 1025 PAT Ranking
    PAT 甲级 1024 Palindromic Number
    PAT 甲级 1023 Have Fun with Numbers
    PAT 甲级 1021 Deepest Root (并查集,树的遍历)
    Java实现 蓝桥杯VIP 算法训练 无权最长链
    Java实现 蓝桥杯VIP 算法训练 无权最长链
    Java实现 蓝桥杯 算法提高 抽卡游戏
    Java实现 蓝桥杯 算法提高 抽卡游戏
  • 原文地址:https://www.cnblogs.com/ShaYeBlog/p/2917053.html
Copyright © 2011-2022 走看看