C# 更改应用程序使用的ip地址(应用程序层)

C# 更改应用程序使用的ip地址(应用程序层),c#,wmi,web-controls,C#,Wmi,Web Controls,我们有一个绑定到nic的20个ip的windows服务器。目前,我们正在通过(自动)偶尔更改IP来成功执行(web)请求(request.ServicePoint.BindIPEndPointDelegate=new BindIPEndPoint(connectionInfo.BindIPEndPointCallback);)。几天后,我们决定使用一个测试环境,在这个环境中,我们使用.NET的WebBrowser控件来发出web请求。 这里问题开始了,因为我们不能提供一个类似端点的解决方案来更改

我们有一个绑定到nic的20个ip的windows服务器。目前,我们正在通过(自动)偶尔更改IP来成功执行(web)请求(
request.ServicePoint.BindIPEndPointDelegate=new BindIPEndPoint(connectionInfo.BindIPEndPointCallback);
)。几天后,我们决定使用一个测试环境,在这个环境中,我们使用.NET的WebBrowser控件来发出web请求。 这里问题开始了,因为我们不能提供一个类似端点的解决方案来更改webcontrol使用的ip。这就是为什么我们决定更改IP程序的原因。但是,每当我们通过WMI更改IP时,我们都会被标识为一个IP地址(始终)

这是wmi代码:

public static void setIP(string IpAddresses, string SubnetMask, string Gateway)
    {
        ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection moc = mc.GetInstances();

        foreach (ManagementObject mo in moc)
        {
            if ((bool)mo["IPEnabled"]==true)
            {
                ManagementBaseObject newIP = mo.GetMethodParameters("EnableStatic");
                ManagementBaseObject newGate = mo.GetMethodParameters("SetGateways");
                ManagementBaseObject newDNS = mo.GetMethodParameters("SetDNSServerSearchOrder");

                newGate["DefaultIPGateway"] = new string[] { Gateway };
                newGate["GatewayCostMetric"] = new int[] { 1 };

                newIP["IPAddress"] = IpAddresses.Split(',');
                newIP["SubnetMask"] = new string[] { SubnetMask };

                ManagementBaseObject setIP = mo.InvokeMethod("EnableStatic", newIP, null);
                ManagementBaseObject setGateways = mo.InvokeMethod("SetGateways", newGate, null);
            }
        }
    }
服务器运行在虚拟机软件上,但我认为这不是问题所在。
我们做错了什么?

不太确定,但您将多个ip地址传递给EnableStatic,但仅传递一个子网掩码,这可能会导致问题。 尝试为每个ip地址传递子网掩码,即将newIP[“子网掩码”]的分配更改为:


确保IpAddresses参数中没有空格

我想我的问题不清楚。我已经将所有ip绑定到NIC,我只想自己决定将哪个ip用于此应用程序。
 newIP["SubnetMask"] = Enumerable.Repeat(SubnetMask, newIP["IPAddress"].Length).ToArray();