c# 如何对网络信息进行相关设置(ip,dns,网关等)

 更新时间:2021年03月19日 09:56:15   作者:彭泽0902  
这篇文章主要介绍了c# 网络适配器的相关操作,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下

GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!
如果你想靠AI翻身,你先需要一个靠谱的工具!

     网络的相关设置在项目开发中有较多的应用,有时候需要在项目中对网络信息进行相关设置。

     现在提供提供几种相关的辅助方法类。

(1).IP地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// <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).网关地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// <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服务器地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/// <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地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/// <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地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/// <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地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/// <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).子网掩码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/// <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).属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/// <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地址

1
2
3
4
5
6
7
8
9
10
11
/// <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服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/// <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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/// <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地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/// <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地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/// <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地址,如果返回空,表示检查通过,为了方便返回就字符串了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/// <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地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/// <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# 网络适配器操作的资料请关注脚本之家其它相关文章!

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://cloud.tencent.com/developer/article/1013210

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • C#异步委托调用实例分析

    C#异步委托调用实例分析

    这篇文章主要介绍了C#异步委托调用实现方法,实例分析了异步委托调用的定义及使用技巧,需要的朋友可以参考下
    2015-04-04
  • 90分钟实现一门编程语言(极简解释器教程)

    90分钟实现一门编程语言(极简解释器教程)

    本文介绍了如何使用 C# 实现一个简化 Scheme——iScheme 及其解释器,需要的朋友可以参考下
    2016-12-12
  • C#实现自定义windows系统日志的方法

    C#实现自定义windows系统日志的方法

    这篇文章主要介绍了C#实现自定义windows系统日志的方法,涉及C#针对windows系统日志的创建、读写及删除技巧,非常具有实用价值,需要的朋友可以参考下
    2015-08-08
  • 基于c#图像灰度化、灰度反转、二值化的实现方法详解

    基于c#图像灰度化、灰度反转、二值化的实现方法详解

    本篇文章是对c#图像灰度化、灰度反转、二值化的实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • c# 从IE浏览器获取当前页面的内容

    c# 从IE浏览器获取当前页面的内容

    从IE浏览器获取当前页面内容可能有多种方式,今天我所介绍的是其中一种方法。基本原理:当鼠标点击当前IE页面时,获取鼠标的坐标位置,根据鼠标位置获取当前页面的句柄,然后根据句柄,调用win32的东西进而获取页面内容。感兴趣的朋友可以参考下本文
    2021-06-06
  • c# 计算时间间隔的简单方法(推荐)

    c# 计算时间间隔的简单方法(推荐)

    下面小编就为大家带来一篇c# 计算时间间隔的简单方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • C# wpf实现任意控件更多调整大小功能

    C# wpf实现任意控件更多调整大小功能

    这篇文章主要为大家详细介绍了C# wpf实现任意控件更多调整大小功能的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • c#扩展datatable转json示例

    c#扩展datatable转json示例

    这篇文章主要介绍了c#扩展datatable转json示例,需要的朋友可以参考下
    2014-05-05
  • C# Rx的主要接口深入理解

    C# Rx的主要接口深入理解

    这篇文章主要介绍了C# Rx的主要接口深入理解的相关资料,需要的朋友可以参考下
    2017-03-03
  • C# WPF实现动态3D光照效果

    C# WPF实现动态3D光照效果

    这篇文章主要为大家详细介绍了如何利用C# WPF实现动态3D的光照效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-03-03

最新评论