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#默认以管理员身份运行程序

原文地址:https://www.cnblogs.com/ksufer/p/8901842.html

时间: 2024-11-12 17:12:19

C#设置本地网络(DNS、网关、子网掩码、IP)的相关文章

CentOS 网络设置修改 指定IP地址 DNS 网关(转)

CentOS 网络设置修改 指定IP地址 DNS 网关(实测 笔记) 环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Centos-6.5-x86_64 路由器网关:192.168.1.1 步骤: 1.查看网络MAC地址 [[email protected] ~]# cat /etc/udev/rules.d/70-persistent-net.rules 显示如下信息 # PCI device 0x15ad:0x07b0 (vmxnet3) SUBSY

Ubuntu 16.04修改MAC地址以及网络常用设置(IP/DNS/网关)

1.先停止桌面版自带的NetworkManager,这东西很难用,且有些设置需要重启. sudo systemctl stop NetworkManager.service sudo systemctl disable NetworkManager.service 2.设置MAC地址在帮助文档中应该找这个关键字:hardware address,设置有两种方式,临时和永久. 临时,直接使用命令行方式,重启后失效 sudo ifconfig eth0 down sudo ifconfig eth0

[转载]CentOS 修改IP地址, DNS, 网关

一.CentOS 修改IP地址 修改对应网卡的IP地址的配置文件 # vi /etc/sysconfig/network-scripts/ifcfg-eth0   电信 # vi /etc/sysconfig/network-scripts/ifcfg-eth0:1 网通 修改以下内容DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0BOOTPROTO=static #设置网卡获得ip地址的方式,可能的选项为static,dhcp或bootp,分别对应

CentOS 修改IP地址, DNS, 网关

一.CentOS 修改IP地址 修改对应网卡的IP地址的配置文件 # vi /etc/sysconfig/network-scripts/ifcfg-eth0   电信 # vi /etc/sysconfig/network-scripts/ifcfg-eth0:1 网通 # vi /etc/sysconfig/network-scripts/ifcfg-ens33 centos7 默认ens33 修改以下内容DEVICE=ens33 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它

openvpn实现分流,指定IP走VPN,其它走本地网络

最近研究了Openvpn好久.现在写一点心得出来. 客户需求:看香港某几个网站使用openvpn翻墙过去,其它所有访问不能用翻墙,要走本地. 系统环境: Centos x64位 6.8, 使用在线yum安装 一.服务器端配置 详细配置参考其它配置文档 [[email protected] openvpn]# rpm -qa | grep openvpn openvpn-2.3.11-1.el6.x86_64 生成ta.key文件,用于tls-auth认证. # openvpn --genkey

linux 双网关双IP设置

server:CentOS5.8 ip:172.16.8.11 Gateway:172.16.8.1 ip:10.120.6.78 Gateway:10.120.6.1 网卡配置: eth0 point: [[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 # Intel Corporation 82576 Gigabit Network Connection DEVICE=eth0 BOOTPROTO=non

Linux网络配置之二ip、ss、网络相关配置文件

本文续网络基础与Linux网络配置之一 ifconfig.route.netstat命令详解 ip命令 作用ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,例如ifconfig.route等,使用权限为超级用户.几乎所有的Linux发行版本都支持该命令. 格式ip [ OPTIONS ] OBJECT { COMMAND | help }   OBJECT := { link | addr | route | netns  } 注:OBJECT可简写,

让本地网络与微软windows azure互通

导读:混合云可以说是未来的一个趋势,混合云的一个基本的要求就是本地网络要与公有云能够互通,这样就可以把公有云看作一个分支网络,实现统一的管理.这里我们就来看看怎样让本地网络与微软的windows azure互通,为了方便大家测试,我们只要求: l 当然要有一个windows azure测试账户 l 本地有一台能够上网的windows server 2012 R2服务器(虽然微软官方要求本地网络要有一个VPN设备直接放在公网,但我们这里让你没有这样的条件也可以,当然生产环境还是要遵从微软建议,这里

linux 笔记--网络配置ifconfig及ip

MAC:Media  Access  Contro 同轴线传输信号 线路仲裁:在某一时刻哪一个注解能使用这个传输介质 CSMA/CD:载波测听多路访问,冲突检测 (Ethernet 以太网 )  中继器:放大电压,电子在传输过程中会发生碰撞,电压下降  网桥:把同轴线上的主机分为两部分,减少信号冲突,不同部分的主机都可以发送信号  交换机:其实多口网桥就是一个交换机,能够把同轴的主机分成很多个部分,既能互相通信,又能不同主机同时通信  子网掩码:根据ip地址计算网络地址  IPV4:点分十进制,