вторник, 4 сентября 2012 г.

Настройка параметров сетевого адаптера из командной строки

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

Есть n-ное количество программ, например, NetSetMan, которые позволяют используя графический интерфейс выбирать профили настроек и применять их. Ошибки в таких программах при работе в Windows 7, а также другие причины заставляют отказаться от них в пользу командных файлов. Поэтому опишу несколько типовых командных файлов для смены настроек сетевого адаптера.

Внимание! Следует помнить, что действия по изменению параметров сетевого адаптера должны выполняться от имени пользователя с правами администратора.

Получить список всех сетевых адаптеров

Посмотреть список всех сетевых адаптеров, можно используя команду "netsh interface ip show config":
C:\Windows\System32>netsh interface ip show config

Настройка интерфейса "Беспроводное сетевое соединение"
    DHCP включен:                         Да
    IP-адрес                              192.168.1.105
    Префикс подсети:                      192.168.1.0/24 (маска 255.255.255.0)
    Основной шлюз:                        192.168.1.1
    Метрика шлюза:                        0
    Метрика интерфейса:                   25
    DNS-серверы с настройкой через DHCP:  109.230.128.138
                                          192.168.1.1
    Зарегистрировать с суффиксом:         Только основной
    WINS-серверы с настройкой через DHCP: Нет

Настройка интерфейса "Подключение по локальной сети"
    DHCP включен:                         Да
    IP-адрес                              192.168.1.101
    Префикс подсети:                      192.168.1.0/24 (маска 255.255.255.0)
    Основной шлюз:                        192.168.1.1
    Метрика шлюза:                        0
    Метрика интерфейса:                   20
    DNS-серверы с настройкой через DHCP:  109.230.128.138
                                          192.168.1.1
    Зарегистрировать с суффиксом:         Только основной
    WINS-серверы с настройкой через DHCP: Нет

Я слегка отформатировал вывод, чтобы проще воспринималось. Самое важное в данной команде это то, как называются наши сетевые адаптеры, параметры которых мы хотим изменить. В данном случае мы имеет два адаптера с именами "Беспроводное сетевое соединение" и "Подключение по локальной сети".

Изменить настройки IP-адреса

Команда выглядит следующим образом:
C:\Windows\system32>netsh interface ip set address help

Использование: set address [name=]<строка>
             [[source=]dhcp|static]
             [[address=]<IPv4-адрес>[/<целое_число>] [[mask=]<IPv4-маска>]
             [[gateway=]<IPv4-адрес>|none [gwmetric=]<целое_число>]
             [[type=]unicast|anycast]
             [[subinterface=]<строка>]
             [[store=]active|persistent]

Параметры:

       Тег            Значение
       name         - имя или индекс интерфейса.
       source       - одно из следующих значений:
                      dhcp: включение DHCP для настройки IP-адресов для
                            указанного интерфейса.
                      static: отключение использования DHCP для настройки
                            IP-адресов для указанного интерфейса. Это
                            значение указывается при настройке адреса или
                            шлюза.
       address      - добавляемый или изменяемый IPv4-адрес, за которым может
                      следовать длина префикса подсети.
       mask         - маска подсети IP для указанного IP-адреса.
       gateway      - одно из следующих значений:
                      <IPv4-адрес>: определенный шлюз по умолчанию для
                                    задаваемого статического IP-адреса.
                      none: шлюзы по умолчанию не задаются.  Этот параметр
                            используется по умолчанию.
       gwmetric     - метрика шлюза по умолчанию. Это поле следует задавать
                      только тогда, когда указан шлюз.
       type         - одно из следующих значений:
                      unicast: адрес задается как адрес одноадресной рассылки.
                               Этот параметр используется по умолчанию.
                      anycast: адрес задается как адрес произвольной рассылки.
       subinterface - LUID подчиненного интерфейса, на котором существует
                      шлюз по умолчанию.  Этот параметр требуется только для
                      интерфейсов с несколькими подчиненными интерфейсами.
       store        - одно из следующих значений:
                      active: параметр действует только до следующей загрузки.
                      persistent: постоянный параметр.  Этот параметр
                            используется по умолчанию.

Примечания: используется для включения или отключения DHCP для настройки
            IP-адресов.  При этом также удаляются любые предыдущие статические
            IP-адреса и шлюзы по умолчанию или могут быть заданы новые
            статические IP-адреса и шлюзы по умолчанию.

Примеры:

       set address name="Local Area Connection" source=dhcp
       set address "Local Area connection" static 10.0.0.9 255.0.0.0 10.0.0.1 1

Из этого описания хорошо видно, как использовать данную команду. Замечу, что все параметры кроме name необязательны и их можно не указывать. В частности это полезно, если вы не хотите задавать шлюз или метрику.

Пример 1. Задать автоматическое получение IP-параметров по протоколу DHCP для адаптера "Подключение по локальной сети":
netsh interface ip set address name="Подключение по локальной сети" source=dhcp
или
netsh interface ip set address "Подключение по локальной сети" dhcp

Пример 2. Задать статические IP-параметры для адаптера "Подключение по локальной сети" IP-адрес 213.108.211.11 с маской подсети 255.255.255.240 и шлюзом 213.108.211.10:
netsh interface ip set address name="Подключение по локальной сети" source=static address=213.108.211.11 mask=255.255.255.240 gateway=213.108.211.10
или
netsh interface ip set address "Подключение по локальной сети" static 213.108.211.11 255.255.255.240 213.108.211.10

Изменить настройки DNS

Команда выглядит следующим образом:
C:\Windows\system32>netsh interface ip set dnsservers help

Применение: set dnsservers [name=]<строка> [source=]dhcp|static
             [[address=]<IP-адрес>|none]
             [[register=]none|primary|both]
             [[validate=]yes|no]

Параметры

      Тег            Значение

      name         - Имя или индекс интерфейса.
      source       - Одно из следующих значений:
                     dhcp: назначает DHCP в качестве источника конфигурации
                           DNS-серверов для определенного интерфейса.
                     static: назначает в качестве источника конфигурации
                           DNS-серверов локальную статическую конфигурацию.
      address      - Одно из следующих значений:
                     <IP-адрес>: IP-адрес DNS-сервера.
                     none: очищает список DNS-серверов.
      register     - Одно из следующих значений:
                     none: отключает динамическую регистрацию DNS.
                     primary: регистрация только с суффиксом основного DNS.
                     both: регистрация как с суффиксом основного DNS,
                           так и с суффиксом, определенным для подключения.

      validate     - Указывает, выполняется ли проверка после настройки
                     параметров DNS-сервера. Значение по умолчанию: yes.


Примечания. Задает в конфигурации DNS-сервера режим DHCP или статический
            режим. Параметр addr будет доступен для конфигурации
            статического списка IP-адресов DNS-серверов для указанного
            интерфейса только при установке источником static. Если значение
            параметра Validate равно yes, то новый DNS-сервер проверяется.

Примеры

      set dnsservers name="Local Area Connection" source=dhcp
      set dnsservers "Local Area Connection" static 10.0.0.1  primary
В сети гуляет подавляющее большинство описаний, где вместо dnsservers указывается dns. Это устаревший параметр, который оставлен для совместимости.

Пример 1. Задать автоматическое получение параметров DNS-сервера по протоколу DHCP для адаптера "Подключение по локальной сети":
netsh interface ip set dnsserver name="Подключение по локальной сети" source=dhcp
или
netsh interface ip set dnsserver "Подключение по локальной сети" dhcp

Пример 2. Задать статические параметры DNS-сервера для адаптера "Подключение по локальной сети", где первый DNS-сервер имеет IP-адрес 213.108.208.2, а второй 213.108.209.2:
netsh interface ip set dnsservers "Подключение по локальной сети" static 213.108.208.2
netsh interface ip add dnsservers "Подключение по локальной сети" 213.108.209.2
Обратите внимание, что команда set dnsservers сбрасывает список DNS-серверов для выбранного сетевого адаптера и устанавливает первый DNS-сервер в указанное значение. Последующие DNS-сервера добавляются через команду add вместо set.

Какие ещё параметры можно изменять

Смотрим на вывод команды
C:\Windows\system32>netsh interface ip set help

Применимы следующие команды:

Команды в этом контексте:
set address    - Задает статический IP-адрес или основной шлюз для интерфейса.
set compartment - Изменяет параметры конфигурации секции.
set dnsservers - Установка режима DNS-сервера и адресов.
set dynamicportrange - Изменяет диапазон портов, используемый для динамического назначения портов.
set global     - Изменяет общие параметры глобальной конфигурации.
set interface  - Изменяет параметры конфигурации интерфейса для IP.
set neighbors  - Задает адрес соседа.
set route      - Изменяет параметры маршрута.
set subinterface - Изменяет параметры конфигурации субинтерфейса.
set winsservers - Установка режима WINS-сервера и адресов.

Поскольку большинство этих параметров (кроме IP-адреса и DNS-сервера) большинству смертных не потребуется, то и описывать я их не стану. Но Вы всегда сможете получить справку по нужным параметрам, используя за образец команды выше.

Командные файлы

Каждый раз вводить команды очень утомительно. Поэтому лучше создать файл с расширением "cmd" (или более устаревший вариант "bat"), где эти команды будут записаны.

Пример 1. Применение сетевых настроек по протоколу DHCP:
netsh interface ip set address "Подключение по локальной сети" dhcp
netsh interface ip set dnsserver "Подключение по локальной сети" dhcp
pause

Пример 2. Применение статических сетевых настроек:
netsh interface ip set address "Подключение по локальной сети" static 213.108.213.117 255.255.255.240 213.108.213.113
netsh interface ip set dnsservers "Подключение по локальной сети" static 213.108.208.2
netsh interface ip add dnsservers "Подключение по локальной сети" 213.108.209.2
pause

Команда pause в конце скрипта не позволяет закрыться окну. Это важно, если Вы допустили ошибки при наборе команды. Когда команды написаны правильно команду "pause" можно удалить.

Внимание! В локализованных версиях Windows имена сетевых адаптеров написаны на русском языке. Символы кириллицы имеют различные кодовые страницы для Windows-приложений (обычно, графических) и приложений в командной строке. Поэтому важно сохранить файл с командами в кодировке CP866. (Стандартный блокнот не позволяет это сделать.)

Как вариант можно изменить названия сетевых адаптеров с использованием букв латинского алфавита, просто переименовав их:


Например, "wifi" или "cable". Тогда проблем с кодировками не будет.

Как было отмечено выше, командные файлы следует запускать под пользователем с правами администратора. Самый простой способ: нажать правой кнопкой на командном файле и выбрать "Запуск от имени администратора".

P.S. Можно также создать файлы для команды netsh с профилями, как описано тут. Но мне кажется это излишним.

3 комментария:

  1. Очень полезная инфа
    помогла для написании программы по смену MAC'а - без ребута или ручного реконнекта адаптера.

    ОтветитьУдалить
  2. Базара ноль, Братик, грамотно всё обосновал! Уважуха!

    ОтветитьУдалить
  3. Статья классная, понравилась. Жаль с ДНС не получается, не удалось загрузить модуль peerdist.dll. Хотя он есть))) Парадокс.

    ОтветитьУдалить