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. 03C++语言对C的增强——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符

    1.“实用性”增强 C语言中的变量都必须在作用域开始的位置定义,C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义. 2.C++对c语言register的增强 register关键字 ...

  2. eclipse 视图打不开解决方法

    遇到一个eclipse问题,查看方法调用者,或打开调用层次窗口失败,这时要查看一个方法的调用者只好通过全局搜索的方式.网上搜索报错关键词没找到答案,看了一下全局设置也没有想过的选项. 后想到一个ecl ...

  3. Java之SimpleDateFormat日期格式转换(Date 和 String 类型之间的转换)

    SimpleDateFormat : 可以选择任何用户定义的日期-时间格式的模式    "yyyy-MM-dd HH:mm:ss:SSS"1.格式化:Date -->Stri ...

  4. 自建mail服务器之二:hmailserver

    具体参考: http://blog.xuite.net/sendohshih/blog/41958216-3%E5%88%86%E9%90%98%E8%BC%95%E9%AC%86%E6%93%81% ...

  5. 单节点 Elasticsearch 出现 unassigned shards 原因及解决办法

    根本原因: 是因为集群存在没有启用的副本分片,我们先来看一下官网给出的副本分片的介绍: 副本分片的主要目的就是为了故障转移,正如在 集群内的原理 中讨论的:如果持有主分片的节点挂掉了,一个副本分片就会 ...

  6. LOJ 2587 「APIO2018」铁人两项——圆方树

    题目:https://loj.ac/problem/2587 先写了 47 分暴力. 对于 n<=50 的部分, n3 枚举三个点,把图的圆方树建出来,合法条件是 c 是 s -> f 路 ...

  7. .NET设计模式 第二部分 创建型模式(3)—建造者模式(Builder Pattern)

    建造者模式(Builder Pattern) ——.NET设计模式系列之四 Terrylee,2005年12月17日 概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对 ...

  8. 基于spring的placeholder思路处理配置信息敏感信息加密解密的实践

    基于Spring的placeholder处理思路,实现系统配置信息敏感信息的加密解密处理. 我们的处理方案,是基于类org.springframework.beans.factory.config.P ...

  9. idea下的调试配置

    react和ts的整合 https://github.com/Microsoft/TypeScript-React-Starter vue的 https://github.com/ducksoupde ...

  10. python的Socket网络编程

    计算机网络: 多台独立的计算机用网络通信设备连接起来的网络.实现资源共享和数据传递.比如,我们之前的学过的知识可以将D盘的一个文件传到C盘,但如果你想从你的电脑传一个文件到我的电脑上目前是做不到的; ...