C#設置IP地址 用WMI


 

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;
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM