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

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

(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[].Address.ToString() == "0.0.0.0" ? "" : Getwaryes[].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[].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[].ToString()))
{
dnsMain = DnsAddresses[].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[].ToString()))
{
dnsBackup = DnsAddresses[].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 <= ) return null;
switch (IpAddresses.Count)
{
case :
return IpAddresses[];
case :
return IpAddresses[];
}
return IpAddresses[];
}

(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==""||str=="");
//获取操作设置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 == "" || str == "");
}
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 == "" || str == "");
}
return false;
}

C#的网络适配器操作的更多相关文章

  1. Windows 10 创建虚拟网卡

    想把虚拟机桥接到我的电脑,但我连的是无线网电脑没查网线,所以就创建个虚拟网卡吧. 1.win + x 打开设备管理器 2.网络适配器  + 操作 + 添加过时硬件  3.下一步  4.选-->安 ...

  2. Linux常用命令操作

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  3. 006. C#使用WMI操作远程计算机

    1. 使用WMI CIM studio 查看\root\CIMV2 所有可使用的表/字段(类/属性) , 点击下载 WMI CIM studio 2. 安装完成后打开VMI CIM studio

  4. linux 操作

    正在运行的内核和系统信息 # uname -a # 获取内核版本(和BSD版本) # lsb_release -a # 显示任何 LSB 发行版版本信息 # cat /etc/SuSE-release ...

  5. Linux系统操作指令汇总

    1.系统配置 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIO ...

  6. Linux 学习记录 一(安装、基本文件操作).

         Linux distributions主要分为两大系统,一种是RPM方式安装软件的系统,包括Red Hat,Fedora,SuSE等都是这类:一种则是使用Debian的dpkg方式安装软件的 ...

  7. ssh远程登录操作 和ssh信任

    ssh 可以参考上一篇telnet的文章 1.安装openssh-server     sudo dpkg -i openssh-client_1%3a5.5p1-4ubuntu6_i386.deb ...

  8. redis基础操作~~数据备份与恢复、数据安全、性能测试、客户端连接、分区

    数据备份与恢复 数据备份redis save 命令用于创建当前数据库的备份. redis 127.0.0.1:6379> SAVE OK 该命令将在 redis 安装目录中创建dump.rdb文 ...

  9. Deviceiocontrol操作异常时,关于getlasterror的错误代码解析

    [0]-操作成功完成. [1]-功能错误. [2]-系统找不到指定的文件. [3]-系统找不到指定的路径. [4]-系统无法打开文件. [5]-拒绝访问. [6]-句柄无效. [7]-存储控制块被损坏 ...

随机推荐

  1. iPhone Safari下iframe不显示滚动条无法滚动的解决方法

    在iframe外层包一层div,添加如下样式:style="-webkit-overflow-scrolling:touch;overflow:auto;" @media only ...

  2. laravel中TokenMismatchException异常处理

    在使用post或者put等方法请求时,有时会报TokenMismatchException in VerifyCsrfToken.php line 67错误.原因是laravel默认开启了防CSRF. ...

  3. FMX保存JPG格式的Stream

    刚刚看以前的笔记,估计这个用的人很少 var surf:TBitmapSurface; astream:TmemoryStream; begin surf:=TbitmapSurface.Create ...

  4. 基于 Jenkins 快速搭建持续集成环境

      什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火 ...

  5. .NET面试题系列[15] - LINQ:性能

    .NET面试题系列目录 当你使用LINQ to SQL时,请使用工具(比如LINQPad)查看系统生成的SQL语句,这会帮你发现问题可能发生在何处. 提升性能的小技巧 避免遍历整个序列 当我们仅需要一 ...

  6. [.net 面向对象程序设计进阶] (27) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git

    [.net 面向对象程序设计进阶] (26) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git 本篇导读: 接上两篇,继续Git之旅 分布式版本控制系统 ...

  7. android内部培训视频_第一节

    声明:本视频为公司内部做android培训时录制的,无任何商业目的.同时鉴于水平有限,可能不符合您的需求,放在这里的目的是提供给公司同事下载,作为培训的一个记录,也作为一个系列教程的自我督促完成的理由 ...

  8. 【PRINCE2是什么】PRINCE2认证之七大原则(3)

    我们先来回顾一下,PRINCE2七大原则分别是持续的业务验证,经验学习,角色与责任,按阶段管理,例外管理,关注产品,剪裁. 第三个原则:明确定义的角色和职责. 项目离不开人员,错误的人来了,合适的人没 ...

  9. yar框架使用笔记

    Yar是什么 Yar是并行的RPC框架(Concurrent RPC framework),Laruence开发. 安装 下载地址:http://pecl.php.net/package/yar wi ...

  10. Ajax_01之概述、响应

    1.URL.URI和URN URL:Unified Resource Locator:统一资源定位符: URI:Unified Resource Identifier:统一资源识别符: URN:Uni ...