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. .NET本质论 实例

    对象和值的比较 CLR的类型系统(其实就是通用类型系统(CTS),它定义了如何在运行库中声明,使用和管理类型,同时也是运行库支持跨语言集成的一个重要组成部分)将对应简单值的类型同对应传统"对 ...

  2. 不用修改 hosts 本地开发(续篇)

    上一篇说过不修改 hosts 在 Chrome 中可以使用 *.localhost 进行绑定域名开发. 但只能用于 Chrome 中,今天找了一个还有一些好心人提供了域名指向 127.0.0.1 . ...

  3. “更新时间”字段的:ON UPDATE CURRENT_TIMESTAMP 含义

    "更新时间"字段的:ON UPDATE CURRENT_TIMESTAMP 含义: 表示在数据库数据有更新的时候UPDATE_TIME的时间会自动更新(如果数据库数据值没有变化的话 ...

  4. python string/list转换

    python的read.write方法的操作对象都是string.输入.输出和逻辑业务上很多时候都要用到string.list互转. 1.简单用法 import stringstr = 'abcde' ...

  5. Nginx + Tomcat搭建集群

    一.Tomcat集群带来的好处 1.提高服务的性能,并发能力,以及高可用性 2.提供项目架构的横向扩展能力 二.Tomcat集群实现原理 通过Nginx负载均衡进行请求转发 三.Nginx + Tom ...

  6. Mysql 通信协议抓包分析

    mysql在传输层使用的TCP协议.一个TCP payload可能有多个mysql packet.如下图所示. TCP head TCP payload (mysql packet1, mysql p ...

  7. Flume连接oracle实时推送数据到kafka

    版本号: RedHat6.5   JDK1.8    flume-1.6.0   kafka_2.11-0.8.2.1 flume安装 RedHat6.5安装单机flume1.6:RedHat6.5安 ...

  8. 回顾<Video Timing Controller v6.1>

    回顾<Video Timing Controller v6.1> VTC总体架构图: 对于最基本的功能:视频时序产生

  9. js switch 函数类型 序列化 转义

    switch(name){ case '1': age = 123; break; case '2': age = 456; break; default : age = 777; } 函数 func ...

  10. c# 几种常见的弹框方法

    1.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('第一行'); ...