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;
        } 
时间: 2024-11-06 05:58:17

C#的网络适配器操作的相关文章

Centos7+LVS+Keepalived实现Exchange2016高可用性

说到Exchange的话题,相信管理员都很敏感,为什么这么说呢,因为作为一个Exchange管理员的话,Exchange的服务运行状态是一个管理员最关心的问题,只要提高Exchange高可用性,管理员的工作相对比较轻松一点,如果Exchange不做高可用的话,只要其中一个服务有问题就会导致所有相关用户服务不可用,当然说到这,我们再说说Exchange2016的高可用性配置介绍,我们前面文章中也有介绍到,Exchange2016已经将角色集中到了一个Mailbox功能上,只要发布一个Mailbox

怎样在睡眠模式下保持Xshell连接

不知道大家是不是也遇到过这样的情况,当我们使用Xshell创建会话连接远程主机后,会话窗口显示正常运行,一旦停止电脑操作,一段时间后所有的会话会自动关闭并且会回到本地xshell. 一般出现会话断开连接的原因主要是:你的电脑进入了睡眠状态,可能存在缺乏电力供应你的网络接口卡(NIC)所以网络会断开,因此没有网络连接,xshell会话就会断开. 最新Xshell 5中文版获取地址:http://wm.makeding.com/iclk/?zoneid=18724 解决方法: 操作一:首先从自己的计

虚拟机与ubuntu系统的安装与基础操作

1.虚拟机的下载: 常见的虚拟机软件有:VMware  VirtuaIBOX  Virtual PC  等. 这里主要介绍VMware ,VMware目前已经有很多个版本,可以根据个人情况进行选择.安装完成后打开选择个人或家庭免费使用. 2.ubuntu iso包下载: linux各发行版本下载地址 <-这个是个人推荐的一个linux各发行版本的下载地址. 本次使用的是Ubuntu Kylin 16.04 TLS 操作. 3.虚拟机创建虚拟系统: a.打开虚拟机软件,出现如图界面.(不同版本间可

高级电脑操作就是拒绝不确定性--window运行命令大全

记得很久之前看人家在命令行里对电脑进行操作,觉得好厉害的样子.其实,类似的操作是因为,他们使用了一种对他们而言更加快捷(相对熟悉来说)的方法来执行操作.而对于高手,都是拒绝不确定性的.也就是编程中的不二性--我的一个语句说什么就是执行什么,不由得你有歧义的理解.比如在命令行中打开个程序,你去寻找一个快捷图标,还不确定那个图标有没改变位置,需要去寻找.而不管你在哪个机子上,只要你记得对应打开该程序的命令行命令,就可以闭着眼睛直接操作了.这像极了五笔的盲打跟在自己机子上用拼音智能输入法"盲打&quo

Redis-基本操作分区

Redis 分区 分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集. 分区的优势    通过利用多台计算机内存的和值,允许我们构造更大的数据库.    通过多核和多台计算机,允许我们扩展计算能力:通过多台计算机和网络适配器,允许我们扩展网络带宽. 分区的不足 redis的一些特性在分区方面表现的不是很好:    涉及多个key的操作通常是不被支持的.举例来说,当两个set映射到不同的redis实例上时,你就不能对这两个set执行交集操作.    涉及多个key的r

常用linux操作啊里云linux操作大全说明比较详细仅供学习

很多人对linux无从下手,觉得很难,其实他跟我们平常时的操作系统一样,只要你记住命令就行了.相对来说操作起来也非常简单,如果放PHP网站他是性能最好的一种服务器.你不能不会这种技术,可能说是一种必要性要会的一种技术. 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hd

no buffer space available、由于系统缓冲空间不足或队列已满,不能执行套接字上的操作

netstat -nat | find " " /c   查看连接数才2千多,怎么就报下面的错了 报以下错:(IE打开网站也打不开) no buffer space available(curl 报错). 由于系统缓冲空间不足或队列已满,不能执行套接字上的操作. 超出本地计算机网络适配器卡的名称限制 重启workstation服务.修改MaxUserPort值.修改TcpTimedWaitDelay值这些都不启作用 https://support.microsoft.com/zh-cn

RHEL7CentOS7 (精简操作指令)

RHEL7 CentOS7 检查查看精简指令: //////////////////////////检查查看精简指令://///////////////////////////// ///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// Centos查看系统硬件信息 分类: LINUX [[em

ftserver容错服务器操作手册

FTServer服务器简介 Stratus FTServer 系列服务器,是一种具有 99.999+%连续运行时间的标准容错服务器.该系列服务 器使用 Intel 公司 Xeon 处理器,融合了 Stratus 公司三十多年生产容错计算机的技术和经验,消除了 集群系统的复杂操作和高成本负担,为Windows 环境提供了前所未有的高可靠性连续运行保障. FTServer 服务器拥有无与伦比的性价比,专门用于各种需要高可靠性处理能力和远程管理的业务.例如 服务器整合.企业资讯传送.小型数据库应用.企