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

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

Добрый день!
Пишу программу, которая при определенных условиях должна будет сменить ip, основной шлюз и DNS, не перезагружая компьютер.
b27e00a41faa4a41b3db8638c9e50762.png
Нашел решение изменение данных настроек через реестр, но необходим перезапуск ПК.
Подскажите как сменить настройки не выключая ПК...
  • Вопрос задан
  • 3374 просмотра
Пригласить эксперта
Ответы на вопрос 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

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

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

Похожие вопросы