using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management;
using System.Net.NetworkInformation;
using System.Text.RegularExpressions; namespace ZL.Shell业务.NetSetting
{
public class DHCPSetting
{
public string IpAddress { get; set; } //IP地址
public string SubMask { get; set; } //子网掩码
public string NetWay { get; set; } //网关
public string DNSAddress { get; set; } //DNS public static DHCPSetting _instance = null; private DHCPSetting() { } static DHCPSetting()
{
if (_instance == null)
{
_instance = new DHCPSetting();
}
}
public static DHCPSetting Instance
{
get
{
return _instance;
}
} /// <summary>
/// 获取网络信息
/// </summary>
public void GetDHCPAddress()
{
ManagementClass manger = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection manColl = manger.GetInstances();
foreach (ManagementObject item in manColl)
{
if (Convert.ToBoolean(item["ipEnabled"]) == true)
{
IpAddress = (item["IPAddress"] as string[])[];
SubMask = (item["IPSubnet"] as string[])[];
NetWay = (item["DefaultIPGateway"] as string[])[];
break;
}
} NetworkInterface[] network = NetworkInterface.GetAllNetworkInterfaces();
foreach (var item in network)
{
IPAddressCollection dns = item.GetIPProperties().DnsAddresses;
if (dns.Count > )
{
DNSAddress = dns[].ToString();
}
}
} /// <summary>
/// 设置网络信息
/// </summary>
/// <param name="ip"></param>
/// <param name="submask"></param>
/// <param name="getway"></param>
/// <param name="dns"></param>
public void SetDHCPAddress(string ip, string submask, string getway, string dns)
{
ManagementClass manger = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection manColl = manger.GetInstances();
ManagementBaseObject inPar = null;
ManagementBaseObject outPar = null;
foreach (ManagementObject item in manColl)
{
//如果没有启用IP设置的网络设备则跳过
if (!(bool)item["IPEnabled"])
{
continue;
}
//设置IP地址和掩码
if (ip != null && submask != null)
{
inPar = item.GetMethodParameters("EnableStatic");
inPar["IPAddress"] = new string[] { ip};
inPar["SubnetMask"] = new string[] { submask};
outPar = item.InvokeMethod("EnableStatic", inPar, null);
}
//设置网关地址
if (getway != null)
{
inPar = item.GetMethodParameters("SetGateways");
inPar["DefaultIPGateway"] = new string[] { getway };
outPar = item.InvokeMethod("SetGateways", inPar, null);
}
//设置DNS地址
if (dns != null)
{
inPar = item.GetMethodParameters("SetDNSServerSearchOrder");
inPar["DNSServerSearchOrder"] = new string[] { dns };
outPar = item.InvokeMethod("SetDNSServerSearchOrder", inPar, null);
} }
} /// <summary>
/// 启用DHCP服务器
/// </summary>
public void StartDHCP()
{
ManagementClass manger = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection manColl = manger.GetInstances();
foreach (ManagementObject item in manColl)
{
//如果没有启用IP设置的网络设备则跳过
if (!(bool)item["IPEnabled"])
continue;
//重置DNS为空
item.InvokeMethod("SetDNSServerSearchOrder", null);
//开启DHCP
item.InvokeMethod("EnableDHCP", null);
break;
}
} /// <summary>
/// 判断输入格式是否正确
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public bool IsDHCPAddress(string ip)
{
string[] arr = ip.Split('.');
if (arr.Length != )
{
return false;
}
//正则判断是否由1-3位数组成
foreach (var item in arr)
{
if (!Regex.IsMatch(item, @"\d{1,3}") || item == "" || int.Parse(item) > )
{
return false;
}
}
return true;
}
}
}

上面的网络设置SetDHCPAddress()方法有些bug,一时找不到原因,下面用启动cmd.exe程序来更改网络配置

        public void SetDHCPAddress(string ip, string submask, string getway, string dns,bool getself)
{
//string output = string.Empty;
Process pro = new Process();
pro.StartInfo.FileName = "cmd.exe";
pro.StartInfo.UseShellExecute = false; //不使用系统外壳驱动程序
pro.StartInfo.RedirectStandardInput = true;//可以重定向输入
pro.StartInfo.RedirectStandardOutput = true;
pro.StartInfo.RedirectStandardError = true;
pro.StartInfo.CreateNoWindow = true; //不创建创窗口
pro.Start();
//不自动获取
if (!getself)
{
pro.StandardInput.WriteLine($"netsh interface ip set address \"本地连接\" static {ip} {submask} {getway} 1");
pro.StandardInput.WriteLine($"netsh interface ip set dns \"本地连接\" source=static addr={dns}");
//output = pro.StandardOutput.ReadToEnd();
}
else
{
//自动获取
pro.StandardInput.WriteLine($"netsh interface ip set address name=\"本地连接\" source=dhcp");
pro.StandardInput.WriteLine($"netsh interface ip set dns name=\"本地连接\" source=dhcp");
}
System.Threading.Thread.Sleep();
pro.Close(); //第二种只启动一条命令的
//ProcessStartInfo procInfo = new ProcessStartInfo();
//procInfo.FileName = "cmd.exe";
//procInfo.Arguments = $"/netsh interface ip set address \"本地连接\" static {ip} {submask} {getway} 1 "; //procInfo.CreateNoWindow = true;
//Process prox = new Process();
//prox= Process.Start(procInfo);
//prox.WaitForExit();
//if (pro.ExitCode==0)
//{
// message = "修改成功";
//}
//else if (pro.ExitCode==-1)
//{
// message = "出现问题,修改失败";
//}
}

本地IP,掩码,网关,DNS设置的更多相关文章

  1. ip 子网掩码 网关 DNS

    这一篇文章也很好: 原文引用于:  http://www.cnblogs.com/jiqing9006/p/3365939.html 内外网ip: IP地址: IPv4地址分为A.B.C.D.E五类, ...

  2. IP地址/掩码/网关/DNS的设置与工作原理(转)

    现在互联网飞速发展,工作中生活中上不了网的计算机是不可想象的,而电脑系统网络设置中的IP地址.子网掩码.默认网关及DNS服务器,怎么理解,它们是如何工作的,下面做个简单介绍. 通常的上网方式,是打开I ...

  3. (笔记)Linux下C语言实现静态IP地址,掩码,网关的设置

    #include <sys/ioctl.h> #include <sys/types.h> #include <sys/socket.h> #include < ...

  4. C# WMI通过网络连接名称获取IP掩码网关

    /// <summary> /// 读取IP,掩码,网关地址 /// </summary> /// <param name="netConnectorName& ...

  5. 控制器网关/dns设置

    如果控制器ping内网可以,但是ping不同外网,十有八九是因为网关的问题,可以使用route命令设置网关,如设置为192.168.31.1(不是192.168.31.0),route add def ...

  6. 转 -- Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)

    原文转自:http://www.cnblogs.com/lanxuezaipiao/p/3613497.html#undefined 虚拟机里设置上网方式为NAT最方便,因为无需手动设置即可上网,但是 ...

  7. CentOS 设置网络(修改IP&修改网关&修改DNS)--update.14.08.15

    自己电脑上装的虚拟机用桥接方式连接物理机,虚拟机重启后ip会发生变化,非常阻碍Xshell的连接和hosts指定的dns. 通过修改IP为static模式,保持IP不变. ============== ...

  8. Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)

    虚拟机里设置上网方式为NAT最方便,因为无需手动设置即可上网,但是NAT的上网方式默认是DHCP动态分配IP的,这意味着你每次重启虚拟机都 有不一样的IP地址,这对一般用户没任何问题.但是如果你的机子 ...

  9. c#修改本地连接工具 ip地址,dns,网关,子网掩码

    //Form1类后台     #region 加载配置文件中的信息        /// <summary>        /// 加载配置文件中的信息        /// </s ...

  10. Linux系列:Fedora虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)

    首先声明:该方法在Fedora 17和18版本下有效,其它版本也许可行也许有所差异. 1.  虚拟机相关配置 如果不是虚拟机系统,则这步不需要,若是相关配置详细信息请看“Linux系列:Ubuntu虚 ...

随机推荐

  1. 普林斯顿数学指南(第二卷) (Timothy Gowers 著)

    第IV部分 数学的各个分支 IV.1 代数数 IV.2 解析数论 IV.3 计算数论 IV.4 代数几何 IV.5 算术几何 IV.6 代数拓扑 IV.7 微分拓扑 IV.8 模空间 IV.9 表示理 ...

  2. Git-git rebase详解

    git合并代码方式主要有两种方式,分别为:1.merge处理,这是大家比较能理解的方式.2.rebase处理,中文此处翻译为衍合过程. git rebase操作讲解例子: cd /usr/local/ ...

  3. centos7 svn服务器的搭建

    centos7下svn的安装与配置   1.环境 centos7 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata svn ...

  4. ArrayBlcokingQueue,LinkedBlockingQueue与Disruptor三种队列对比与分析

    一.基本介绍 ArrayBlcokingQueue,LinkedBlockingQueue是jdk中内置的阻塞队列,网上对它们的分析已经很多,主要有以下几点: 1.底层实现机制不同,ArrayBlco ...

  5. Thinkphp 3.1. 3 ueditor 1.4.3 添加水印

    1.引入Ueditor  <!-- 实例化编辑器 --> <script type="text/javascript"> window.UEDITOR_HO ...

  6. gitlab ssh clone问题解决

    公司搭建的gitlab,通过http协议可以clone: [sisi@pre-srv24 gitlab]$ git clone http://gitlab.test.mycompany.com/dev ...

  7. what's the difference between grouping and facet in lucene 3.5

    I  found in lucene 3.5 contrib folder two plugins: one is grouping, the other is facet. In my option ...

  8. git撤销本地所有未提交的更改

    1. git clean -df2. git reset --hard第一个命令只删除所有untracked的文件,如果文件已经被tracked, 修改过的文件不会被回退.而第二个命令把tracked ...

  9. 小程序支持打开APP

    根据微信的官方文档,小程序支持打开APP,专门研究了下这个API有什么,官方文档地址如下 https://mp.weixin.qq.com/debug/wxadoc/dev/component/but ...

  10. openssl命令实例

    基本知识 1,证书标准 X.509 X.509 - 这是一种证书标准,主要定义了证书中应该包含哪些内容.其详情可以参考RFC5280,SSL使用的就是这种证书标准. X.509的证书文件,一般以.cr ...