使用System.Management(WMI)修改IP地址的一些问题

问题描述 投票:0回答:0
  1. 我想知道“ManagementObject”返回值的含义,比如'2147947410'。
  2. 除了通过 WMI 之外,C# 是否有任何其他选项来修改 IP 地址?
  3. 如何防止 windows 在检测到 IP 冲突时将 IP 地址更改为 169.254.XXX?

  1. 在运行代码之前,我将一个网络的IP地址修改为192.168.1.66(不是我的目标网络)。 [Fig.1]
  2. 然后运行代码,它不会抛出任何异常,outPar["returnValue"]返回值2147947410,但是如果我打开目标网络的opions,IP地址是空的! [Fig.2]
  3. 而且,如果在 CMD 中输入“ipconfig”,我会看到目标网络的 IP 是 169.254.XXX。我知道这意味着“ip 冲突”。 [Fig.2]
  4. 下面是代码。
static void Main(string[] args)
        {
            // Run Code in Admin mode.
            ManagementBaseObject inPar = null;
            ManagementBaseObject outPar = null;
            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                if (!(bool)mo["IPEnabled"])
                    continue;
                string[] addresses = (string[])mo["IPAddress"];              
                Console.WriteLine("开始修改");
                try
                {
                    //设置ip地址和子网掩码 
                    inPar = mo.GetMethodParameters("EnableStatic");
                    inPar["IPAddress"] = new string[] { "192.168.1.66" };
                    inPar["SubnetMask"] = new string[] { "255.255.255.0" };
                    outPar = mo.InvokeMethod("EnableStatic", inPar, null); 
                    Console.WriteLine(outPar["returnValue"]);
                    //设置网关地址 
                    inPar = mo.GetMethodParameters("SetGateways");
                    inPar["DefaultIPGateway"] = new string[] { "0.0.0.0" };
                    outPar = mo.InvokeMethod("SetGateways", inPar, null);
                }
                catch (Exception e)
                {
                    throw e;
                }
                //设置DNS 
                inPar = mo.GetMethodParameters("SetDNSServerSearchOrder");
                inPar["DNSServerSearchOrder"] = new string[] { "0.0.0.0" };
                outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null);
                break;
            }
            Console.ReadLine();
        }
c# windows wmi
© www.soinside.com 2019 - 2024. All rights reserved.