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. 全网最详细的Windows系统里Oracle 11g R2 Client(64bit)的下载与安装(图文详解)

    不多说,直接上干货! 环境: windows10系统(64位) 最好先安装jre或jdk(此软件用来打开oracle自带的可视化操作界面,不装也没关系:可以安装plsql,或者直接用命令行操作) Or ...

  2. Oracle11g 密码延迟认证导致library cache lock的情况分析

    在 Oracle 11g 中,为了提升安全性,Oracle 引入了『密码延迟验证』的新特性.这个特性的作用是,如果用户输入了错误的密码尝试登录,那么随着登录错误次数的增加,每次登录前验证的时间也会增加 ...

  3. ES9新特性

    这篇文章主要介绍ES2018(ES9)的新特性, 以及使用方法 JS是一门跨平台的语言, ES6也就是ECMAScript 2015 花费了5年的时间敲定, 是一次非常大的改版, 之后每年都有一个小版 ...

  4. 如果指针为空,返回ERROR

    if(!p) //是!p而不是p return ERROR;

  5. centos 虚拟机中最小化安装,无法上网的解决方法

    无法上网原因:因为最小化安装以后,centos 默认未开启网卡 解决方法进入 /etc/sysconfig/network-scripts/ifcfg-enp0s3 文件中 进入编辑模式,将 ONBO ...

  6. pandas读取MySql/SqlServer数据 (转)

    在 Anacondas环境中,conda install pymssql ,一直报包冲突,所以采用先在 https://www.lfd.uci.edu/~gohlke/pythonlibs/#nump ...

  7. Linux Centos配置ssh客户端工具putty

      配置ssh客户端工具putty 1.直接点击putty.exe文件 2.配置putty 3.配置putty编码 4.配置putty字体大小 5.配置putty样式 6.保存配置信息 7.配置MTp ...

  8. OpenCV相机标定坐标系详解

    在OpenCV中,可以使用calibrateCamera函数,通过多个视角的2D/3D对应,求解出该相机的内参数和每一个视角的外参数. 使用C++接口时的输入参数如下: objectPoints - ...

  9. MAC上使用Enterprise Architecture,附带安装步骤及破解链接

    绪论 网上找了半天这个主题也没有详细的步骤的昂,所以自己来造轮子了. 还有,百度搜EA破解版不靠谱,大搜狗更给力哦! 一.背景 穷逼只有一台存储空间不大MACAir,分给虚拟机Virtual Box的 ...

  10. 响应json去除参数值为空的参数-springboot配置

    1.添加jackson相关依赖 <!--jackson 开始--><dependency> <groupId>com.fasterxml.jackson.core& ...