MarioCortess Ответов: 1

Как изменить конфигурацию сетевой карты с 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, как вы мне рекомендуете.

1 Ответов

Рейтинг:
4

Dave Kreskowiak

Вы должны запустить свой веб-сайт под другой учетной записью, специально настроенной для запуска сайта, и иметь достаточно прав администратора для внесения изменений в конфигурацию сети.

Значение по умолчанию ASP.NET учетная запись не имеет прав на внесение этих изменений.

Кроме того, не имеет значения, какое приложение использует WMI для изменения конфигурации сети. Это точно такой же код для любого приложения.


MarioCortess

Спасибо, Дэйв. Я решил эту проблему. Все дело было в разрешениях. Я изменил asp.net учетная запись в группе администраторов.

Dave Kreskowiak

- сарказм ... Да, это совсем не опасно.

Есть причина, по которой я сказал настроить учетную запись пользователя, у которой есть разрешения на это. Предоставление значения по умолчанию ASP.NET права администратора учетной записи на коробку примерно так же опасны, как дать ядерную кнопку группе шимпанзе.

Вы даете учетной записи веб-сервера только те разрешения, которые ей необходимы для выполнения своей работы. Что-то большее, чем это, и вы позволяете враждебному коду полные права администратора для всей вашей машины.