侧边栏壁纸
  • 累计撰写 83 篇文章
  • 累计创建 11 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

CSharp设置IP

祈安千
2025-12-17 / 0 评论 / 0 点赞 / 8 阅读 / 0 字

Why

  • 主要是用于IP的切换作用。

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

  • 最简单的获取和设置IP
0
博主关闭了所有页面的评论