Why
How
- 需要安装包
System.Management
- 以下是简单代码
public partial class IPInfo
{
/// <summary>
/// 是否自动获取IP
/// </summary>
private bool AutoSetIP = false;
/// <summary>
/// 是否手动设置IP
/// </summary>
private bool ManualSetIP = false;
/// <summary>
/// IP地址
/// </summary>
private string? IPAddress;
/// <summary>
/// 子网掩码
/// </summary>
private string? SubnetMask;
/// <summary>
/// 首选DNS
/// </summary>
private string? FirstDNS;
/// <summary>
/// 备用DNS
/// </summary>
private string? SpareDNS;
/// <summary>
/// 默认网关
/// </summary>
private string? DefaultGateway;
}
/// <summary>
/// 获取IP
/// </summary>
/// <param name="ipInfos"></param>
/// <returns></returns>
private bool GetIPV4GeneralSettingsMsg(out List<IPInfo> ipInfos)
{
ipInfos = new List<IPInfo>();
try
{
ManagementClass managementClass = new ManagementClass("Win32_NetWorkAdapterConfiguration");
ManagementObjectCollection managementObjectCollection = managementClass.GetInstances();
foreach (ManagementObject managementObject in managementObjectCollection)
{
if (Convert.ToBoolean(managementObject["IPEnabled"]))
{
var info = new IPInfo();
info.AutoSetIP = Convert.ToBoolean(managementObject["DHCPEnabled"]);
info.ManualSetIP = !Convert.ToBoolean(managementObject["DHCPEnabled"]);
string[] ipaddresses = (string[])managementObject["IPAddress"];
string[] subnets = (string[])managementObject["IPSubnet"];
string[] gateways = (string[])managementObject["DefaultIPGateway"];
string[] dnsSetting = (string[])managementObject["DNSServerSearchOrder"];
info.IPAddress = ipaddresses[0];
info.SubnetMask = subnets[0];
if (gateways != null)
{
//info.SubnetMask = gateways[0];
info.DefaultGateway = gateways[0];
}
if (dnsSetting != null)
{
if (dnsSetting.Length > 0)
{
info.FirstDNS = dnsSetting[0];
}
if (dnsSetting.Length > 1)
{
info.SpareDNS = dnsSetting[1];
}
}
ipInfos.Add(info);
}
}
return true;
}
catch (Exception)
{
return false;
throw;
}
}
/// <summary>
/// 设置IP
/// </summary>
/// <param name="ipInfo"></param>
/// <returns></returns>
public static bool SetIPV4GeneralSettingsMsg(IPInfo ipInfo)
{
if (ipInfo == null)
{
return false;
}
try
{
ManagementClass managementClass = new ManagementClass("Win32_NetWorkAdapterConfiguration");
ManagementObjectCollection managementObjectCollection = managementClass.GetInstances();
foreach (ManagementObject managementObject in managementObjectCollection)
{
if (Convert.ToBoolean(managementObject["IPEnabled"]))
{
ManagementBaseObject newIP = managementObject.GetMethodParameters("EnableStatic");
ManagementBaseObject newGateway = managementObject.GetMethodParameters("SetGateways");
ManagementBaseObject newDNS = managementObject.GetMethodParameters("SetDNSServerSearchOrder");
//目标IP地址:
newIP["IPAddress"] = new string[] { ipInfo.IPAddress.Trim() };
//子网掩码:
newIP["SubnetMask"] = new string[] { ipInfo.SubnetMask.Trim() };
//默认网关:
if (!string.IsNullOrWhiteSpace(ipInfo.DefaultGateway))
newGateway["DefaultIPGateway"] = new string[] { ipInfo.DefaultGateway.Trim() };
newGateway["GatewayCostMetric"] = new int[] { 1 };
// 将要修改的目标 首选DNS服务器
// 将要修改的目标 备用DNS服务器
if (!string.IsNullOrWhiteSpace(ipInfo.SpareDNS))
newDNS["DNSServerSearchOrder"] = new string[] { ipInfo.FirstDNS.Trim(), ipInfo.SpareDNS.Trim() };
// 修改网络设置
try
{
if (ipInfo.AutoSetIP)
{
managementObject.InvokeMethod("EnableStatic", null);
//重置DNS为空
managementObject.InvokeMethod("SetDNSServerSearchOrder", null);
//开启DHCP
managementObject.InvokeMethod("EnableDHCP", null);
//MessageBox.Show("自动获取IP成功!");
}
else
{
ManagementBaseObject setIP = managementObject.InvokeMethod("EnableStatic", newIP, null);
ManagementBaseObject setGateways = managementObject.InvokeMethod("SetGateways", newGateway, null);
ManagementBaseObject setDNS = managementObject.InvokeMethod("SetDNSServerSearchOrder", newDNS, null);
//MessageBox.Show("手动设置IP成功");
}
}
catch (Exception ex)
{
return false;
//MessageBox.Show(ex.Message, "设置IP时出现异常");
}
break;
}
}
return true;
}
catch (Exception)
{
return false;
throw;
}
}
Tips