C# 更改应用程序使用的ip地址(应用程序层)
我们有一个绑定到nic的20个ip的windows服务器。目前,我们正在通过(自动)偶尔更改IP来成功执行(web)请求(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请求。 这里问题开始了,因为我们不能提供一个类似端点的解决方案来更改
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();