本地IP,掩码,网关,DNS设置
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设置的更多相关文章
- ip 子网掩码 网关 DNS
这一篇文章也很好: 原文引用于: http://www.cnblogs.com/jiqing9006/p/3365939.html 内外网ip: IP地址: IPv4地址分为A.B.C.D.E五类, ...
- IP地址/掩码/网关/DNS的设置与工作原理(转)
现在互联网飞速发展,工作中生活中上不了网的计算机是不可想象的,而电脑系统网络设置中的IP地址.子网掩码.默认网关及DNS服务器,怎么理解,它们是如何工作的,下面做个简单介绍. 通常的上网方式,是打开I ...
- (笔记)Linux下C语言实现静态IP地址,掩码,网关的设置
#include <sys/ioctl.h> #include <sys/types.h> #include <sys/socket.h> #include < ...
- C# WMI通过网络连接名称获取IP掩码网关
/// <summary> /// 读取IP,掩码,网关地址 /// </summary> /// <param name="netConnectorName& ...
- 控制器网关/dns设置
如果控制器ping内网可以,但是ping不同外网,十有八九是因为网关的问题,可以使用route命令设置网关,如设置为192.168.31.1(不是192.168.31.0),route add def ...
- 转 -- Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)
原文转自:http://www.cnblogs.com/lanxuezaipiao/p/3613497.html#undefined 虚拟机里设置上网方式为NAT最方便,因为无需手动设置即可上网,但是 ...
- CentOS 设置网络(修改IP&修改网关&修改DNS)--update.14.08.15
自己电脑上装的虚拟机用桥接方式连接物理机,虚拟机重启后ip会发生变化,非常阻碍Xshell的连接和hosts指定的dns. 通过修改IP为static模式,保持IP不变. ============== ...
- Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)
虚拟机里设置上网方式为NAT最方便,因为无需手动设置即可上网,但是NAT的上网方式默认是DHCP动态分配IP的,这意味着你每次重启虚拟机都 有不一样的IP地址,这对一般用户没任何问题.但是如果你的机子 ...
- c#修改本地连接工具 ip地址,dns,网关,子网掩码
//Form1类后台 #region 加载配置文件中的信息 /// <summary> /// 加载配置文件中的信息 /// </s ...
- Linux系列:Fedora虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)
首先声明:该方法在Fedora 17和18版本下有效,其它版本也许可行也许有所差异. 1. 虚拟机相关配置 如果不是虚拟机系统,则这步不需要,若是相关配置详细信息请看“Linux系列:Ubuntu虚 ...
随机推荐
- 05C++引用
1.变量名 变量名实质上是一段连续存储空间的别名,是一个标号(门牌号): 通过变量来申请并命名内存空间: 通过变量的名字可以使用内存空间. 2.引用的概念 变量名,本身是一段内存的引用,即别名(ali ...
- 围棋术语 & 中英文 。
https://senseis.xmp.net/?ChineseGoTerms 一字 二字 三字 四字 一字 长(nobi,solid extension),是指仅靠着自己的棋盘上已有棋子继续向前延伸 ...
- 枚举 Java Enumeration接口
Enumation 定义了一些方法,通过这些方法可以枚举对象集合中的元素 如: boolean hasMoreElements() 测试此枚举是否包含更多的元素 object nextElement( ...
- 人才需求之Java程序员与AI程序员
据100offer报告显示:2018年Java人才市场「高开低走」的动荡局势.整体求职难度变大,且全年波动更剧烈,淡旺季区别明显.企业发出的Java面邀总数几个季度连续下跌,Q4 甚至比去年同期下降了 ...
- C# string 转 bool
bool _b = Convert.ToBoolean("False"); "_b => false" // // 摘要: // 将逻辑值的指定字 ...
- create a simple COM object
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAArsAAAGYCAIAAADN0b3QAAAgAElEQVR4nO29749c1b2nW/4Lzh8wUr
- jQuery的ready()事件与js中的onload事件的区别
出处:http://blog.csdn.net/yuanmei1986/article/details/50781453
- 简单的user-based协同过滤算法示例代码
#构造一份打分数据集1 users = {"小明": {"中国合伙人": 5.0, "太平轮": 3.0, "荒野猎人" ...
- show master status, show slave status中的Executed_Gtid_Set
slave 如果server是slave节点,在server上执行show master staus与show slave status显示的Executed_Gtid_Set是一样的. slave也 ...
- elasticsearch _script 脚本排序
具体脚本语法请自行搜索“Groovy”语法. { "from" : 0, "size" : 5, "query" : { "boo ...