在网上找到了一段代码。。
能改了。但看不太懂,为了学以自用,想请一高人解释一下。
using System;
using System.Collections;
using System.Text;
using System.Management;
using System.Text.RegularExpressions;namespace Kingthy.Windows.IPChanger.Providers
{
/// <summary>
/// IPProvider 的摘要说明。
/// </summary>
public class IPProvider
{
public IPProvider()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 设置DNS
/// </summary>
/// <param name="dns"></param>
public static void SetDNS(string[] dns)
{
SetIPAddress(null, null, null, dns);
}
/// <summary>
/// 设置网关
/// </summary>
/// <param name="getway"></param>
public static void SetGetWay(string getway)
{
SetIPAddress(null, null, new string[] { getway }, null);
}
/// <summary>
/// 设置网关
/// </summary>
/// <param name="getway"></param>
public static void SetGetWay(string[] getway)
{
SetIPAddress(null, null, getway, null);
}
/// <summary>
/// 设置IP地址和掩码
/// </summary>
/// <param name="ip"></param>
/// <param name="submask"></param>
public static void SetIPAddress(string ip, string submask)
{
SetIPAddress(new string[] { ip }, new string[] { submask }, null, null);
}
/// <summary>
/// 设置IP地址,掩码和网关
/// </summary>
/// <param name="ip"></param>
/// <param name="submask"></param>
/// <param name="getway"></param>
public static void SetIPAddress(string ip, string submask, string getway)
{
SetIPAddress(new string[] { ip }, new string[] { submask }, new string[] { getway }, null);
}
/// <summary>
/// 设置IP地址,掩码,网关和DNS
/// </summary>
/// <param name="ip"></param>
/// <param name="submask"></param>
/// <param name="getway"></param>
/// <param name="dns"></param>
public static void SetIPAddress(string[] ip, string[] submask, string[] getway, string[] dns)
{
ManagementClass wmi = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = wmi.GetInstances();//这一段看不懂
ManagementBaseObject inPar = null; //这里看不懂
ManagementBaseObject outPar = null;//这一段看不懂
foreach (ManagementObject mo in moc)
{
//如果没有启用IP设置的网络设备则跳过
if (!(bool) mo["IPEnabled"])
continue; //设置IP地址和掩码
if (ip != null && submask != null)
{
inPar = mo.GetMethodParameters("EnableStatic");
inPar["IPAddress"] = ip;
inPar["SubnetMask"] = submask;
outPar = mo.InvokeMethod("EnableStatic", inPar, null);//这一段看不懂
} //设置网关地址
if (getway != null)
{
inPar = mo.GetMethodParameters("SetGateways");//这一段看不懂
inPar["DefaultIPGateway"] = getway;//这一段看不懂
outPar = mo.InvokeMethod("SetGateways", inPar, null);//这一段看不懂
} //设置DNS地址
if (dns != null)
{
inPar = mo.GetMethodParameters("SetDNSServerSearchOrder");//这一段看不懂
inPar["DNSServerSearchOrder"] = dns;//这一段看不懂
outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null);//这一段看不懂
}
}
} /// <summary>
/// 启用DHCP服务器
/// </summary>
public static void EnableDHCP()
{
ManagementClass wmi = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = wmi.GetInstances();
foreach (ManagementObject mo in moc)
{
//如果没有启用IP设置的网络设备则跳过
if (!(bool) mo["IPEnabled"])
continue; //重置DNS为空
mo.InvokeMethod("SetDNSServerSearchOrder", null);
//开启DHCP
mo.InvokeMethod("EnableDHCP", null);
}
} /// <summary>
/// 判断是否IP地址格式
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public static bool IsIPAddress(string ip)
{
string[] arr = ip.Split('.');
if (arr.Length != 4)
return false; string pattern = @"\d{1,3}";
for (int i = 0; i < arr.Length; i++)
{
string d = arr[i];
if (i == 0 && d == "0")
return false;
if (!Regex.IsMatch(d, pattern))
return false; if (d != "0")
{
d = d.TrimStart('0');
if (d == "")
return false; if (int.Parse(d) > 255)
return false;
}
} return true;
}
}
}
能改了。但看不太懂,为了学以自用,想请一高人解释一下。
using System;
using System.Collections;
using System.Text;
using System.Management;
using System.Text.RegularExpressions;namespace Kingthy.Windows.IPChanger.Providers
{
/// <summary>
/// IPProvider 的摘要说明。
/// </summary>
public class IPProvider
{
public IPProvider()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 设置DNS
/// </summary>
/// <param name="dns"></param>
public static void SetDNS(string[] dns)
{
SetIPAddress(null, null, null, dns);
}
/// <summary>
/// 设置网关
/// </summary>
/// <param name="getway"></param>
public static void SetGetWay(string getway)
{
SetIPAddress(null, null, new string[] { getway }, null);
}
/// <summary>
/// 设置网关
/// </summary>
/// <param name="getway"></param>
public static void SetGetWay(string[] getway)
{
SetIPAddress(null, null, getway, null);
}
/// <summary>
/// 设置IP地址和掩码
/// </summary>
/// <param name="ip"></param>
/// <param name="submask"></param>
public static void SetIPAddress(string ip, string submask)
{
SetIPAddress(new string[] { ip }, new string[] { submask }, null, null);
}
/// <summary>
/// 设置IP地址,掩码和网关
/// </summary>
/// <param name="ip"></param>
/// <param name="submask"></param>
/// <param name="getway"></param>
public static void SetIPAddress(string ip, string submask, string getway)
{
SetIPAddress(new string[] { ip }, new string[] { submask }, new string[] { getway }, null);
}
/// <summary>
/// 设置IP地址,掩码,网关和DNS
/// </summary>
/// <param name="ip"></param>
/// <param name="submask"></param>
/// <param name="getway"></param>
/// <param name="dns"></param>
public static void SetIPAddress(string[] ip, string[] submask, string[] getway, string[] dns)
{
ManagementClass wmi = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = wmi.GetInstances();//这一段看不懂
ManagementBaseObject inPar = null; //这里看不懂
ManagementBaseObject outPar = null;//这一段看不懂
foreach (ManagementObject mo in moc)
{
//如果没有启用IP设置的网络设备则跳过
if (!(bool) mo["IPEnabled"])
continue; //设置IP地址和掩码
if (ip != null && submask != null)
{
inPar = mo.GetMethodParameters("EnableStatic");
inPar["IPAddress"] = ip;
inPar["SubnetMask"] = submask;
outPar = mo.InvokeMethod("EnableStatic", inPar, null);//这一段看不懂
} //设置网关地址
if (getway != null)
{
inPar = mo.GetMethodParameters("SetGateways");//这一段看不懂
inPar["DefaultIPGateway"] = getway;//这一段看不懂
outPar = mo.InvokeMethod("SetGateways", inPar, null);//这一段看不懂
} //设置DNS地址
if (dns != null)
{
inPar = mo.GetMethodParameters("SetDNSServerSearchOrder");//这一段看不懂
inPar["DNSServerSearchOrder"] = dns;//这一段看不懂
outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null);//这一段看不懂
}
}
} /// <summary>
/// 启用DHCP服务器
/// </summary>
public static void EnableDHCP()
{
ManagementClass wmi = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = wmi.GetInstances();
foreach (ManagementObject mo in moc)
{
//如果没有启用IP设置的网络设备则跳过
if (!(bool) mo["IPEnabled"])
continue; //重置DNS为空
mo.InvokeMethod("SetDNSServerSearchOrder", null);
//开启DHCP
mo.InvokeMethod("EnableDHCP", null);
}
} /// <summary>
/// 判断是否IP地址格式
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public static bool IsIPAddress(string ip)
{
string[] arr = ip.Split('.');
if (arr.Length != 4)
return false; string pattern = @"\d{1,3}";
for (int i = 0; i < arr.Length; i++)
{
string d = arr[i];
if (i == 0 && d == "0")
return false;
if (!Regex.IsMatch(d, pattern))
return false; if (d != "0")
{
d = d.TrimStart('0');
if (d == "")
return false; if (int.Parse(d) > 255)
return false;
}
} return true;
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货