zoukankan      html  css  js  c++  java
  • C#的网络适配器操作

         网络的相关设置在项目开发中有较多的应用,有时候需要在项目中对网络信息进行相关设置。

         现在提供提供几种相关的辅助方法类。

    (1).IP地址

            /// <summary>
            /// IP地址
            /// </summary>
            public string IpAddress
            {
                get
                {
                    string ipAddress;
                    var address = GetAddress();
                    if (address == null)
                    {
                        ipAddress = string.Empty;
                    }
                    else
                    {
                        ipAddress = address.Address.ToString();
                    }
                    return ipAddress;
                }
                set { if (value == null) throw new ArgumentNullException(nameof(value)); }
            }

    (2).网关地址

            /// <summary>
            /// 网关地址
            /// </summary>
            public string Getway
            {
                get
                {              
                    string getway;
                    if (Getwaryes != null && Getwaryes.Count > 0)
                    {
    
                        getway = Getwaryes[0].Address.ToString() == "0.0.0.0" ? "" : Getwaryes[0].Address.ToString(); 
                    }
                    else
                    {
                        getway =string.Empty;
                    }
                    return getway;
                }
                set { if (value == null) throw new ArgumentNullException(nameof(value)); }
            }

    (3). DHCP服务器地址

           /// <summary>
            /// DHCP服务器地址
            /// </summary>
            public string DhcpServer
            {
                get
                {
                    string dhcpServer;
                    if (DhcpServerAddresses != null && DhcpServerAddresses.Count > 0)
                    {
                        dhcpServer = DhcpServerAddresses[0].ToString();
                    }
                    else
                    {
                        dhcpServer = string.Empty;
                    }
                    return dhcpServer;
                }
                set { if (value == null) throw new ArgumentNullException(nameof(value)); }
            }

    (4).MAC地址

            /// <summary>
            /// MAC地址
            /// </summary>
            public string MacAddres
            {
                get
                {
                    string macAddress;
                    if (MacAddress == null)
                        macAddress = string.Empty;
                    else if (MacAddress.ToString().Length == 12)
                    {
                        macAddress = MacAddress.ToString().Insert(4, "-").Insert(9, "-");
                    }
                    else
                    {
                        macAddress = MacAddress.ToString();
                    }
                    return macAddress;
                }
                set { if (value == null) throw new ArgumentNullException(nameof(value)); }
            }

    (5). 主DNS地址

            /// <summary>
            /// 主DNS地址
            /// </summary>
            public string DnsMain
            {
                get
                {
                    var dnsMain =string.Empty;
    
                    if (DnsAddresses.Count > 0)
                    {
                        if (IsIPAddress(DnsAddresses[0].ToString()))
                        {
                            dnsMain = DnsAddresses[0].ToString();
                        }
                    }
                    else
                    {
                        dnsMain =string.Empty;
                    }
                    return dnsMain;
                }
                set { if (value == null) throw new ArgumentNullException(nameof(value)); }
            }

    (6).备用DNS地址

            /// <summary>
            /// 备用DNS地址
            /// </summary>
            public string DnsBackup
            {
                get
                {
                    var dnsBackup = string.Empty;
                    if (DnsAddresses.Count > 1)
                    {
                        if (IsIPAddress(DnsAddresses[1].ToString()))
                        {
                            dnsBackup = DnsAddresses[1].ToString();
                        }
    
                    }
                    else
                    {
                        dnsBackup = string.Empty;
                    }
                    return dnsBackup;
                }
                set { if (value == null) throw new ArgumentNullException(nameof(value)); }
            }

    (7).子网掩码

            /// <summary>
            /// 子网掩码
            /// </summary>
            public string Mask
            {
                get
                {
                    string mask;
                    var address = GetAddress();
                    if (address == null)
                    {
                        mask = "";
                    }
                    else
                    {
                        if (address.IPv4Mask != null) 
                        {
                            mask = address.IPv4Mask.ToString();
                        }
                        else
                        {
                            mask = "255.255.255.0";
                        }
                       
                    }
                    return mask;
                }
                set { if (value == null) throw new ArgumentNullException(nameof(value)); }
            }

    (8).属性

           /// <summary>
            /// DNS集合
            /// </summary>
            public IPAddressCollection DnsAddresses { get; set; }
            /// <summary>
            /// 网关地址集合
            /// </summary>
            public GatewayIPAddressInformationCollection Getwaryes { get; set; }
    
            /// <summary>
            /// IP地址集合
            /// </summary>
            public UnicastIPAddressInformationCollection IpAddresses { get; set; }
    
            /// <summary>
            /// DHCP地址集合
            /// </summary>
            public IPAddressCollection DhcpServerAddresses { get; set; }
    
            /// <summary>
            /// 网卡MAC地址
            /// </summary>
            public PhysicalAddress MacAddress { get; set; }
    
            /// <summary>
            /// 是否启用DHCP服务
            /// </summary>
            public bool IsDhcpEnabled { get; set; }
    
            /// <summary>
            /// 描述信息
            /// </summary>
            public string Description { get; set; }
            /// <summary>
            /// 网络接口类型
            /// </summary>
            /// <returns></returns>
            public string NetworkInterfaceType { get; set; }
    
            /// <summary>
            /// 速度
            /// </summary>
            public string Speed { get; set; } 

    (9).是否是IP地址

            /// <summary>
            /// 是否是IP地址
            /// </summary>
            /// <param name="ipAddress"></param>
            /// <returns></returns>
            public bool IsIPAddress(string ipAddress)
            {
                const string regexStr = @"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]).(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$";
                var regex = System.Text.RegularExpressions.Regex.Match(ipAddress, regexStr);
                return regex.Success;
            }

    (10).启用DHCP服务

            /// <summary>
            /// 启用DHCP服务
            /// </summary>
            public bool EnableDhcp()
            {
                var wmi = new ManagementClass("Win32_NetworkAdapterConfiguration");
                var moc = wmi.GetInstances();
                foreach (var o in moc)
                {
                    var mo = (ManagementObject) o;
                    if (!(bool)mo["IPEnabled"])
                        continue;
                    if (mo["SettingID"].ToString() != NetworkInterfaceId) continue;
                    mo.InvokeMethod("SetDNSServerSearchOrder", null);
                    mo.InvokeMethod("EnableDHCP", null);
                }
                //查询现适配器接口信息
                var networkAdapter = new NetworkAdapterUtil().GetNeworkAdapterByNetworkInterfaceId(NetworkInterfaceId); 
                return networkAdapter != null && networkAdapter.IsDhcpEnabled;
            }

    (11).设置IP地址,子网掩码,网关,DNS

            /// <summary>
            /// 设置IP地址,子网掩码,网关,DNS,
            /// </summary>
            public bool SetIpAddressSubMaskDnsGetway(string ipAddress, string subMask, string getWay, string dnsMain, string dnsBackup)
            {
                string[] dnsArray;
                if (string.IsNullOrEmpty(dnsBackup))
                {
                    dnsArray = new[] { dnsMain };
                }
                else
                {
                    dnsArray = new[] { dnsMain, dnsBackup };
                }
                return SetIpAddress(new[] { ipAddress }, new[] { subMask }, new[] { getWay }, dnsArray);
    
            }
    
            /// <summary>
            /// 设置IP地址和子网掩码
            /// </summary>
            public bool SetIpAddressAndSubMask(string ipAddress, string subMask)
            {
               return SetIpAddress(new[] { ipAddress }, new[] { subMask }, null, null);
    
            }
    
    
            /// <summary>
            /// 设置IP网关
            /// </summary>
            public bool SetGetWayAddress(string getWay)
            {
                return SetIpAddress(null, null, new[] { getWay }, null);
    
            }

    (12).设置主,备份DNS地址

            /// <summary>
            /// 设置主,备份DNS地址
            /// </summary>
            public bool SetDnsAddress(string dnsMain, string dnsBackup)
            {
                string[] dnsArray;
                if (string.IsNullOrEmpty(dnsBackup))
                {
                    dnsArray = new[] { dnsMain };
                }
                else
                {
                    dnsArray = new[] { dnsMain, dnsBackup };
                }
                return  SetIpAddress(null, null, null, dnsArray);
    
            }

    (13).得到IPV4地址

            /// <summary>
            /// 得到IPV4地址
            /// </summary>
            /// <returns></returns>
            private UnicastIPAddressInformation GetAddress()
            {
                if (IpAddresses == null || IpAddresses.Count <= 0) return null;
                switch (IpAddresses.Count)
                {
                    case 3:
                        return IpAddresses[2];
                    case 2:
                        return IpAddresses[1];
                }
                return IpAddresses[0];
            }

    (14).检查设置IP地址,如果返回空,表示检查通过,为了方便返回就字符串了

            /// <summary>
            /// 检查设置IP地址,如果返回空,表示检查通过,为了方便返回就字符串了,没用枚举了
            /// </summary>
            /// <param name="ipAddress"></param>
            /// <param name="subMask"></param>
            /// <param name="getWay"></param>
            /// <param name="dnsMain"></param>
            /// <param name="dnsBackup"></param>
            /// <returns></returns>
            public string IsIPAddress(string ipAddress, string subMask, string getWay, string dnsMain, string dnsBackup)
            {
                if (!string.IsNullOrEmpty(ipAddress))
                {
                    if (!IsIPAddress(ipAddress)) return "IP地址格式不对";
                }
               if (!string.IsNullOrEmpty(subMask))
                {
                    if (!IsIPAddress(subMask)) return "子网掩码格式不对";
                }
               if (!string.IsNullOrEmpty(getWay))
                {
                    if (!IsIPAddress(getWay)) return "网关地址格式不对";
                }
                if (!string.IsNullOrEmpty(dnsMain))
                {
                    if (!IsIPAddress(dnsMain)) return "主DNS地址格式不对";
                }
                if (string.IsNullOrEmpty(dnsBackup)) return "";
                return !IsIPAddress(dnsBackup) ? "备用DNS地址格式不对" : "";
            }

    (15).设置IP地址

            /// <summary>
            /// 设置IP地址
            /// </summary>
            /// <param name="ip"></param>
            /// <param name="submask"></param>
            /// <param name="getway"></param>
            /// <param name="dns"></param>
            private bool SetIpAddress(IEnumerable ip, IEnumerable submask, IEnumerable getway, IEnumerable dns)
            {
                var wmi = new ManagementClass("Win32_NetworkAdapterConfiguration");
                var moc = wmi.GetInstances();
                foreach (var o in moc)
                {
                    var mo = (ManagementObject) o;
                    if (!(bool)mo["IPEnabled"])
                        continue;
                    if (NetworkInterfaceId != mo["SettingID"].ToString()) continue;
                    ManagementBaseObject inPar;
                    ManagementBaseObject outPar;
                    string str = null;
                    if (ip != null && submask != null)
                    {
                        inPar = mo.GetMethodParameters("EnableStatic");
                        inPar["IPAddress"] = ip;
                        inPar["SubnetMask"] = submask;
                        outPar = mo.InvokeMethod("EnableStatic", inPar, null);
                        if (outPar != null) str = outPar["returnvalue"].ToString();
                        return (str=="0"||str=="1");
                        //获取操作设置IP的返回值, 可根据返回值去确认IP是否设置成功。 0或1表示成功
                    }
                    if(getway!=null)
                    {
                        inPar = mo.GetMethodParameters("SetGateways");
                        inPar["DefaultIPGateway"] = getway;
                        outPar = mo.InvokeMethod("SetGateways", inPar, null);
                        if (outPar != null) str = outPar["returnvalue"].ToString();
                        return (str == "0" || str == "1");
                    }
                    if (dns == null) continue;
                    inPar = mo.GetMethodParameters("SetDNSServerSearchOrder");
                    inPar["DNSServerSearchOrder"] = dns;
                    outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null);
                    if (outPar != null) str = outPar["returnvalue"].ToString();
                    return (str == "0" || str == "1");
                }
                return false;
            } 
  • 相关阅读:
    什么是内存碎片
    java堆内存模型
    java内存模型
    java垃圾回收过程
    找出给定的一个字符串中最长的不重复子串,不重复子串即一个子串中不出现两个相同的字符
    学习tomcat(八)
    学习Redis(二)
    学习k8s(四)
    学习docker(三)
    学习MySql(一)
  • 原文地址:https://www.cnblogs.com/pengze0902/p/5988847.html
Copyright © 2011-2022 走看看