ProKiLL
@ProKiLL
Системный администратор

Как сменить ip адрес сетевой карты через C#?

Добрый день!
Пишу программу, которая при определенных условиях должна будет сменить ip, основной шлюз и DNS, не перезагружая компьютер.
b27e00a41faa4a41b3db8638c9e50762.png
Нашел решение изменение данных настроек через реестр, но необходим перезапуск ПК.
Подскажите как сменить настройки не выключая ПК...
  • Вопрос задан
  • 3257 просмотров
Пригласить эксперта
Ответы на вопрос 2
AlexXYZ
@AlexXYZ
O Keep Clear O
Менял так (в публичных свойствах задавал требуемые параметры, потом вызывал set):

(прокрутка вправо-влево shift-колёсико)
using System.Management;

        private class StaticIP : IConfigurationIP
        {
            // mac-адрес адаптера, которому присваиваются настройки:
            public String macAddress;
            public string[] IPAddress;
            public string[] IPSubnet;
            public string[] DefaultIPGateway;
            public string[] DNSServerSearchOrder;
            public UInt16[] GatewayCostMetric;
            public int proxyStatus;

            /// <summary>
            /// Установить конфигурацию сетевого адаптера, используя имеющиеся в классе настройки.
            /// В принципе было бы корректно освобождать IP-адрес перед установкой статического адреса. см. msdn.microsoft.com/en-us/library/aa393047(v=vs.85).aspx
            /// (ReleaseDHCPLease)
            /// </summary>
            void IConfigurationIP.set()
            {
                ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection objMOC = objMC.GetInstances();

                foreach (ManagementObject objMO in objMOC)
                {
                    if ((bool)objMO["IPEnabled"])
                    {
                        try
                        {
                            // Параметры objMO: http://msdn.microsoft.com/en-us/library/aa394217%28v=vs.85%29.aspx
                            // Найти сетевую карту с mac-адресом, для которой предназначена эта настройка:
                            string _macAddress = (string)objMO["MACAddress"];
                            if (_macAddress.Equals(this.macAddress))
                            {
                                // http://www.java2s.com/Tutorial/CSharp/0580__Network/GetIPaddressfromWin32NetworkAdapterConfiguration.htm

                                        // http://msdn.microsoft.com/en-us/library/aa394217%28v=vs.85%29.aspx
                                        ManagementBaseObject EnableStatic = objMO.GetMethodParameters("EnableStatic");
                                        ManagementBaseObject EnableStatic_ret;
                                        EnableStatic["IPAddress"] = this.IPAddress;
                                        EnableStatic["SubnetMask"] = this.IPSubnet;
                                        EnableStatic_ret = objMO.InvokeMethod("EnableStatic", EnableStatic, null);

                                        ManagementBaseObject DNSServerSearchOrder = objMO.GetMethodParameters("SetDNSServerSearchOrder");
                                        ManagementBaseObject DNSServerSearchOrder_ret;
                                        DNSServerSearchOrder["DNSServerSearchOrder"] = this.DNSServerSearchOrder;
                                        DNSServerSearchOrder_ret = objMO.InvokeMethod("SetDNSServerSearchOrder", DNSServerSearchOrder, null);

                                        ManagementBaseObject SetGateways = objMO.GetMethodParameters("SetGateways");
                                        ManagementBaseObject SetGateways_ret;
                                        SetGateways["DefaultIPGateway"] = this.DefaultIPGateway;
                                        SetGateways["GatewayCostMetric"] = this.GatewayCostMetric;
                                        SetGateways_ret = objMO.InvokeMethod("SetGateways", SetGateways, null);

                                        RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
                                        registry.SetValue("ProxyEnable", this.proxyStatus);
                                        //proxyStatus = (int)registry.GetValue("ProxyEnable");

                                        Console.WriteLine(" set {0} to {1} finished", this.macAddress, this.IPAddress[0]);
                                        return;
                            }
                        }
                        catch (Exception)
                        {
                            throw;
                        }
                    }
                }
            }
        }
Ответ написан
Комментировать
A1ejandro
@A1ejandro
youtube блогер, ИТ-специалист
Не важно из какого ЯП можно вызвать комадну операционной системы:
ipconfig /release
ipconfig /renew

это при условии что сетевой интерфейс один, если их несколько то нужно еще указать какой...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы