c# 如何对网络信息进行相关设置(ip,dns,网关等)
- 作者: 亖呉?盀
- 来源: 51数据库
- 2021-08-31
网络的相关设置在项目开发中有较多的应用,有时候需要在项目中对网络信息进行相关设置。
现在提供提供几种相关的辅助方法类。
(1).ip地址
/// <summary>
/// ip地址
/// </summary>
public string ipaddress
{
get
{
string ipaddress;
var address = getaddress();
if (address == null)
{
ipaddress = string.empty;
}
else
{
ipaddress = address.address.tostring();
}
return ipaddress;
}
set { if (value == null) throw new argumentnullexception(nameof(value)); }
}
(2).网关地址
/// <summary>
/// 网关地址
/// </summary>
public string getway
{
get
{
string getway;
if (getwaryes != null && getwaryes.count > 0)
{
getway = getwaryes[0].address.tostring() == "0.0.0.0" ? "" : getwaryes[0].address.tostring();
}
else
{
getway =string.empty;
}
return getway;
}
set { if (value == null) throw new argumentnullexception(nameof(value)); }
}
(3). dhcp服务器地址
/// <summary>
/// dhcp服务器地址
/// </summary>
public string dhcpserver
{
get
{
string dhcpserver;
if (dhcpserveraddresses != null && dhcpserveraddresses.count > 0)
{
dhcpserver = dhcpserveraddresses[0].tostring();
}
else
{
dhcpserver = string.empty;
}
return dhcpserver;
}
set { if (value == null) throw new argumentnullexception(nameof(value)); }
}
(4).mac地址
/// <summary>
/// mac地址
/// </summary>
public string macaddres
{
get
{
string macaddress;
if (macaddress == null)
macaddress = string.empty;
else if (macaddress.tostring().length == 12)
{
macaddress = macaddress.tostring().insert(4, "-").insert(9, "-");
}
else
{
macaddress = macaddress.tostring();
}
return macaddress;
}
set { if (value == null) throw new argumentnullexception(nameof(value)); }
}
(5). 主dns地址
/// <summary>
/// 主dns地址
/// </summary>
public string dnsmain
{
get
{
var dnsmain =string.empty;
if (dnsaddresses.count > 0)
{
if (isipaddress(dnsaddresses[0].tostring()))
{
dnsmain = dnsaddresses[0].tostring();
}
}
else
{
dnsmain =string.empty;
}
return dnsmain;
}
set { if (value == null) throw new argumentnullexception(nameof(value)); }
}
(6).备用dns地址
/// <summary>
/// 备用dns地址
/// </summary>
public string dnsbackup
{
get
{
var dnsbackup = string.empty;
if (dnsaddresses.count > 1)
{
if (isipaddress(dnsaddresses[1].tostring()))
{
dnsbackup = dnsaddresses[1].tostring();
}
}
else
{
dnsbackup = string.empty;
}
return dnsbackup;
}
set { if (value == null) throw new argumentnullexception(nameof(value)); }
}
(7).子网掩码
/// <summary>
/// 子网掩码
/// </summary>
public string mask
{
get
{
string mask;
var address = getaddress();
if (address == null)
{
mask = "";
}
else
{
if (address.ipv4mask != null)
{
mask = address.ipv4mask.tostring();
}
else
{
mask = "255.255.255.0";
}
}
return mask;
}
set { if (value == null) throw new argumentnullexception(nameof(value)); }
}
(8).属性
/// <summary>
/// dns集合
/// </summary>
public ipaddresscollection dnsaddresses { get; set; }
/// <summary>
/// 网关地址集合
/// </summary>
public gatewayipaddressinformationcollection getwaryes { get; set; }
/// <summary>
/// ip地址集合
/// </summary>
public unicastipaddressinformationcollection ipaddresses { get; set; }
/// <summary>
/// dhcp地址集合
/// </summary>
public ipaddresscollection dhcpserveraddresses { get; set; }
/// <summary>
/// 网卡mac地址
/// </summary>
public physicaladdress macaddress { get; set; }
/// <summary>
/// 是否启用dhcp服务
/// </summary>
public bool isdhcpenabled { get; set; }
/// <summary>
/// 描述信息
/// </summary>
public string description { get; set; }
/// <summary>
/// 网络接口类型
/// </summary>
/// <returns></returns>
public string networkinterfacetype { get; set; }
/// <summary>
/// 速度
/// </summary>
public string speed { get; set; }
(9).是否是ip地址
/// <summary>
/// 是否是ip地址
/// </summary>
/// <param name="ipaddress"></param>
/// <returns></returns>
public bool isipaddress(string ipaddress)
{
const string regexstr = @"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$";
var regex = system.text.regularexpressions.regex.match(ipaddress, regexstr);
return regex.success;
}
(10).启用dhcp服务
/// <summary>
/// 启用dhcp服务
/// </summary>
public bool enabledhcp()
{
var wmi = new managementclass("win32_networkadapterconfiguration");
var moc = wmi.getinstances();
foreach (var o in moc)
{
var mo = (managementobject) o;
if (!(bool)mo["ipenabled"])
continue;
if (mo["settingid"].tostring() != networkinterfaceid) continue;
mo.invokemethod("setdnsserversearchorder", null);
mo.invokemethod("enabledhcp", null);
}
//查询现适配器接口信息
var networkadapter = new networkadapterutil().getneworkadapterbynetworkinterfaceid(networkinterfaceid);
return networkadapter != null && networkadapter.isdhcpenabled;
}
(11).设置ip地址,子网掩码,网关,dns
/// <summary>
/// 设置ip地址,子网掩码,网关,dns,
/// </summary>
public bool setipaddresssubmaskdnsgetway(string ipaddress, string submask, string getway, string dnsmain, string dnsbackup)
{
string[] dnsarray;
if (string.isnullorempty(dnsbackup))
{
dnsarray = new[] { dnsmain };
}
else
{
dnsarray = new[] { dnsmain, dnsbackup };
}
return setipaddress(new[] { ipaddress }, new[] { submask }, new[] { getway }, dnsarray);
}
/// <summary>
/// 设置ip地址和子网掩码
/// </summary>
public bool setipaddressandsubmask(string ipaddress, string submask)
{
return setipaddress(new[] { ipaddress }, new[] { submask }, null, null);
}
/// <summary>
/// 设置ip网关
/// </summary>
public bool setgetwayaddress(string getway)
{
return setipaddress(null, null, new[] { getway }, null);
}
(12).设置主,备份dns地址
/// <summary>
/// 设置主,备份dns地址
/// </summary>
public bool setdnsaddress(string dnsmain, string dnsbackup)
{
string[] dnsarray;
if (string.isnullorempty(dnsbackup))
{
dnsarray = new[] { dnsmain };
}
else
{
dnsarray = new[] { dnsmain, dnsbackup };
}
return setipaddress(null, null, null, dnsarray);
}
(13).得到ipv4地址
/// <summary>
/// 得到ipv4地址
/// </summary>
/// <returns></returns>
private unicastipaddressinformation getaddress()
{
if (ipaddresses == null || ipaddresses.count <= 0) return null;
switch (ipaddresses.count)
{
case 3:
return ipaddresses[2];
case 2:
return ipaddresses[1];
}
return ipaddresses[0];
}
(14).检查设置ip地址,如果返回空,表示检查通过,为了方便返回就字符串了
/// <summary>
/// 检查设置ip地址,如果返回空,表示检查通过,为了方便返回就字符串了,没用枚举了
/// </summary>
/// <param name="ipaddress"></param>
/// <param name="submask"></param>
/// <param name="getway"></param>
/// <param name="dnsmain"></param>
/// <param name="dnsbackup"></param>
/// <returns></returns>
public string isipaddress(string ipaddress, string submask, string getway, string dnsmain, string dnsbackup)
{
if (!string.isnullorempty(ipaddress))
{
if (!isipaddress(ipaddress)) return "ip地址格式不对";
}
if (!string.isnullorempty(submask))
{
if (!isipaddress(submask)) return "子网掩码格式不对";
}
if (!string.isnullorempty(getway))
{
if (!isipaddress(getway)) return "网关地址格式不对";
}
if (!string.isnullorempty(dnsmain))
{
if (!isipaddress(dnsmain)) return "主dns地址格式不对";
}
if (string.isnullorempty(dnsbackup)) return "";
return !isipaddress(dnsbackup) ? "备用dns地址格式不对" : "";
}
(15).设置ip地址
/// <summary>
/// 设置ip地址
/// </summary>
/// <param name="ip"></param>
/// <param name="submask"></param>
/// <param name="getway"></param>
/// <param name="dns"></param>
private bool setipaddress(ienumerable ip, ienumerable submask, ienumerable getway, ienumerable dns)
{
var wmi = new managementclass("win32_networkadapterconfiguration");
var moc = wmi.getinstances();
foreach (var o in moc)
{
var mo = (managementobject) o;
if (!(bool)mo["ipenabled"])
continue;
if (networkinterfaceid != mo["settingid"].tostring()) continue;
managementbaseobject inpar;
managementbaseobject outpar;
string str = null;
if (ip != null && submask != null)
{
inpar = mo.getmethodparameters("enablestatic");
inpar["ipaddress"] = ip;
inpar["subnetmask"] = submask;
outpar = mo.invokemethod("enablestatic", inpar, null);
if (outpar != null) str = outpar["returnvalue"].tostring();
return (str=="0"||str=="1");
//获取操作设置ip的返回值, 可根据返回值去确认ip是否设置成功。 0或1表示成功
}
if(getway!=null)
{
inpar = mo.getmethodparameters("setgateways");
inpar["defaultipgateway"] = getway;
outpar = mo.invokemethod("setgateways", inpar, null);
if (outpar != null) str = outpar["returnvalue"].tostring();
return (str == "0" || str == "1");
}
if (dns == null) continue;
inpar = mo.getmethodparameters("setdnsserversearchorder");
inpar["dnsserversearchorder"] = dns;
outpar = mo.invokemethod("setdnsserversearchorder", inpar, null);
if (outpar != null) str = outpar["returnvalue"].tostring();
return (str == "0" || str == "1");
}
return false;
}
以上就是c# 网络适配器的相关操作的详细内容,更多关于c# 网络适配器操作的资料请关注其它相关文章!
推荐阅读
