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

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

///<summary>///网络适配器标识符,如:{274F9DD5-3650-4D59-B61E-710B6AF5AB36}///</summary>publicstringNetworkInterfaceId{get;set;}///<summary>///IP地址///</summary>publicstringIpAddress{get{stringipAddress;varaddress=GetAddress();if(address==null){ipAddress=string.Empty;}else{ipAddress=address.Address.ToString();}returnipAddress;}set{if(value==null)thrownewArgumentNullException(nameof(value));}}///<summary>///网关地址///</summary>publicstringGetway{get{stringgetway;if(Getwaryes!=null&&Getwaryes.Count>0){getway=Getwaryes[0].Address.ToString()=="0.0.0.0"?"":Getwaryes[0].Address.ToString();}else{getway=string.Empty;}returngetway;}set{if(value==null)thrownewArgumentNullException(nameof(value));}}///<summary>///DHCP服务器地址///</summary>publicstringDhcpServer{get{stringdhcpServer;if(DhcpServerAddresses!=null&&DhcpServerAddresses.Count>0){dhcpServer=DhcpServerAddresses[0].ToString();}else{dhcpServer=string.Empty;}returndhcpServer;}set{if(value==null)thrownewArgumentNullException(nameof(value));}}///<summary>///MAC地址///</summary>publicstringMacAddres{get{stringmacAddress;if(MacAddress==null)macAddress=string.Empty;elseif(MacAddress.ToString().Length==12){macAddress=MacAddress.ToString().Insert(4,"-").Insert(9,"-");}else{macAddress=MacAddress.ToString();}returnmacAddress;}set{if(value==null)thrownewArgumentNullException(nameof(value));}}///<summary>///主DNS地址///</summary>publicstringDnsMain{get{vardnsMain=string.Empty;if(DnsAddresses.Count>0){if(IsIPAddress(DnsAddresses[0].ToString())){dnsMain=DnsAddresses[0].ToString();}}else{dnsMain=string.Empty;}returndnsMain;}set{if(value==null)thrownewArgumentNullException(nameof(value));}}///<summary>///备用DNS地址///</summary>publicstringDnsBackup{get{vardnsBackup=string.Empty;if(DnsAddresses.Count>1){if(IsIPAddress(DnsAddresses[1].ToString())){dnsBackup=DnsAddresses[1].ToString();}}else{dnsBackup=string.Empty;}returndnsBackup;}set{if(value==null)thrownewArgumentNullException(nameof(value));}}///<summary>///子网掩码///</summary>publicstringMask{get{stringmask;varaddress=GetAddress();if(address==null){mask="";}else{if(address.IPv4Mask!=null){mask=address.IPv4Mask.ToString();}else{mask="255.255.255.0";}}returnmask;}set{if(value==null)thrownewArgumentNullException(nameof(value));}}///<summary>///DNS集合///</summary>publicIPAddressCollectionDnsAddresses{get;set;}///<summary>///网关地址集合///</summary>publicGatewayIPAddressInformationCollectionGetwaryes{get;set;}///<summary>///IP地址集合///</summary>publicUnicastIPAddressInformationCollectionIpAddresses{get;set;}///<summary>///DHCP地址集合///</summary>publicIPAddressCollectionDhcpServerAddresses{get;set;}///<summary>///网卡MAC地址///</summary>publicPhysicalAddressMacAddress{get;set;}///<summary>///是否启用DHCP服务///</summary>publicboolIsDhcpEnabled{get;set;}///<summary>///描述信息///</summary>publicstringDescription{get;set;}///<summary>///网络接口类型///</summary>///<returns></returns>publicstringNetworkInterfaceType{get;set;}///<summary>///速度///</summary>publicstringSpeed{get;set;}///<summary>///是否是IP地址///</summary>///<paramname="ipAddress"></param>///<returns></returns>publicboolIsIPAddress(stringipAddress){conststringregexStr=@"^(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])$";varregex=System.Text.RegularExpressions.Regex.Match(ipAddress,regexStr);returnregex.Success;}///<summary>///启用DHCP服务///</summary>publicboolEnableDhcp(){varwmi=newManagementClass("Win32_NetworkAdapterConfiguration");varmoc=wmi.GetInstances();foreach(varoinmoc){varmo=(ManagementObject)o;if(!(bool)mo["IPEnabled"])continue;if(mo["SettingID"].ToString()!=NetworkInterfaceId)continue;mo.InvokeMethod("SetDNSServerSearchOrder",null);mo.InvokeMethod("EnableDHCP",null);}//查询现适配器接口信息varnetworkAdapter=newNetworkAdapterUtil().GetNeworkAdapterByNetworkInterfaceId(NetworkInterfaceId);returnnetworkAdapter!=null&&networkAdapter.IsDhcpEnabled;}///<summary>///设置IP地址,子网掩码,网关,DNS,///</summary>publicboolSetIpAddressSubMaskDnsGetway(stringipAddress,stringsubMask,stringgetWay,stringdnsMain,stringdnsBackup){string[]dnsArray;if(string.IsNullOrEmpty(dnsBackup)){dnsArray=new[]{dnsMain};}else{dnsArray=new[]{dnsMain,dnsBackup};}returnSetIpAddress(new[]{ipAddress},new[]{subMask},new[]{getWay},dnsArray);}///<summary>///设置IP地址和子网掩码///</summary>publicboolSetIpAddressAndSubMask(stringipAddress,stringsubMask){returnSetIpAddress(new[]{ipAddress},new[]{subMask},null,null);}///<summary>///设置IP网关///</summary>publicboolSetGetWayAddress(stringgetWay){returnSetIpAddress(null,null,new[]{getWay},null);}///<summary>///设置主,备份DNS地址///</summary>publicboolSetDnsAddress(stringdnsMain,stringdnsBackup){string[]dnsArray;if(string.IsNullOrEmpty(dnsBackup)){dnsArray=new[]{dnsMain};}else{dnsArray=new[]{dnsMain,dnsBackup};}returnSetIpAddress(null,null,null,dnsArray);}///<summary>///得到IPV4地址///</summary>///<returns></returns>privateUnicastIPAddressInformationGetAddress(){if(IpAddresses==null||IpAddresses.Count<=0)returnnull;switch(IpAddresses.Count){case3:returnIpAddresses[2];case2:returnIpAddresses[1];}returnIpAddresses[0];}///<summary>///检查设置IP地址,如果返回空,表示检查通过,为了方便返回就字符串了,没用枚举了///</summary>///<paramname="ipAddress"></param>///<paramname="subMask"></param>///<paramname="getWay"></param>///<paramname="dnsMain"></param>///<paramname="dnsBackup"></param>///<returns></returns>publicstringIsIPAddress(stringipAddress,stringsubMask,stringgetWay,stringdnsMain,stringdnsBackup){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地址格式不对":"";}///<summary>///设置IP地址///</summary>///<paramname="ip"></param>///<paramname="submask"></param>///<paramname="getway"></param>///<paramname="dns"></param>privateboolSetIpAddress(IEnumerableip,IEnumerablesubmask,IEnumerablegetway,IEnumerabledns){varwmi=newManagementClass("Win32_NetworkAdapterConfiguration");varmoc=wmi.GetInstances();foreach(varoinmoc){varmo=(ManagementObject)o;if(!(bool)mo["IPEnabled"])continue;if(NetworkInterfaceId!=mo["SettingID"].ToString())continue;ManagementBaseObjectinPar;ManagementBaseObjectoutPar;stringstr=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");}returnfalse;}