Как изменить конфигурацию сетевой карты с ASP.NET?
Я хочу изменить конфигурацию сетевой карты в качестве IP-адреса, подсети, шлюза и DNSs. Все это через ASP.NET 4.0 на языке C#, развернутых в Windows XP с в IIS 5.1. Я с помощью WMI для этой цели, но когда я запускаю код не работает.
В частности, я могу показать IP, подсеть, шлюз и DNS сети. Но я не могу установить значения.
Моя идея состоит в том, чтобы настроить сетевую карту удаленно (как маршрутизатор).
Что я уже пробовал:
Я попытался сделать некоторые вещи похожими на этот пример:
SwitchNetConfig - пользователи ноутбуков, быстро переключающие конфигурацию сети и прокси-сервера в разных местах[^]
Код для вспомогательного класса WMI:
<pre>using System; using System.Collections; using System.Management; using System.Collections.Generic; using System.Linq; using System.Web; namespace NetworkConfig { public class WMI_helper { /// <summary> /// Obtiene las tarjetas de red /// </summary> /// <returns></returns> public static ArrayList GetNICNames() { ArrayList nicNames = new ArrayList(); ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = mc.GetInstances(); foreach(ManagementObject mo in moc) { if ((bool)mo["ipEnabled"]) { nicNames.Add(mo["Caption"]); } } return nicNames; } /// <summary> /// Obtiene la IP de una tarjeta de red específica /// </summary> /// <param name="nicName">Nombre de la tarjeta de red</param> /// <param name="ipAddresses">Direccion IP</param> /// <param name="subnets"></param> /// <param name="gateways"></param> /// <param name="dnses"></param> public static void GetIP(string nicName, out string[] ipAddresses, out string[] subnets, out string[] gateways, out string[] dnses) { ipAddresses = null; subnets = null; gateways = null; dnses = null; ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc) { if ((bool)mo["ipEnabled"]) { if (mo["Caption"].Equals(nicName)) { ipAddresses = (string[]) mo["IPAddress"]; subnets = (string[]) mo["IPSubnet"]; gateways = (string[])mo["DefaultIPGateway"]; dnses = (string[]) mo["DNSServerSearchOrder"]; break; } } } } /// <summary> /// Establece las configuraciones de red para una tarjeta de red especifica. /// </summary> /// <param name="nicName">Nombre de la tarheta de red</param> /// <param name="IPAddresses">Direccion IP</param> /// <param name="subnetMask">Subnet</param> /// <param name="gateway">Gateway</param> /// <param name="DnsSearchOrder">DNS</param> public static void SetIP(string nicName, string IPAddresses, string subnetMask, string gateway, string DnsSearchOrder) { ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc) { if((bool)mo["IPEnabled"]) { if (mo["Caption"].Equals(nicName)) { 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 }; newDNS["DNSServerSearchOrder"] = DnsSearchOrder.Split(','); ManagementBaseObject setIP = mo.InvokeMethod("EnableStatic", newIP, null); ManagementBaseObject setGateways = mo.InvokeMethod("SetGateways", newGate, null); ManagementBaseObject setDNS = mo.InvokeMethod("SetDNSServerSearchOrder", newDNS, null); break; } } } } public static void SetDHCP(string nicName) { ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc) { if (mo["Caption"].Equals(nicName)) { ManagementBaseObject newDNS = mo.GetMethodParameters("SetDNSServerSearchOrder"); newDNS["DNSServerSearchOrder"] = null; ManagementBaseObject enableDHCP = mo.InvokeMethod("EnableDHCP", null, null); ManagementBaseObject setDNS = mo.InvokeMethod("SetDNSServerSearchOrder", newDNS, null); } } } } }
F-ES Sitecore
Опубликуйте код, который у вас сейчас есть, и объясните, что означает "не работает", поскольку это утверждение никому не поможет сузить круг возможных проблем.
[no name]
Администратору вашего сайта может не понравиться, когда вы произвольно начнете изменять его сетевые настройки на своем сервере.
MarioCortess
Сайт не должен быть публичным. Доступ будет осуществляться только из локальной сети с доступом для одного администратора. Контекст заключается в том, что у меня есть встроенный компьютер внутри алюминиевого корпуса с двумя сетевыми картами. Идея состоит в том, чтобы легко настроить его, не открывая корпус каждый раз, когда мне это требовалось. Я не знаю, есть ли для этого другое решение.
Dave Kreskowiak
Итак, что же это за "встроенный" компьютер? Работает ли он также на веб-сервере?
Dave Kreskowiak
ASP.NET приложение? Ничего подобного, что делает его более трудным для себя.
Итак, на какой машине вы делаете это изменение конфигурации? На вашем веб-сервере? На какой-то другой машине? Находятся ли они в доменной среде?
MarioCortess
Это изменение относится к тому же компьютеру, который работает как сервер. У этого компьютера есть две сетевые карты, и я хочу изменить конфигурацию хотя бы одной.
AnvilRanger
Плохая идея с самого начала. Попробуйте изучить использование сценария PowerShell для удаленной настройки сетевой карты.
MarioCortess
Хорошая идея, правда, подумал я. asp.net приложение, потому что мне нужно запустить удаленный код. Но также я ищу другие решения для изменения ip-адреса. Я буду искать о powershell, как вы мне рекомендуете.