Утилита сетевой оболочки NETSH (NETwork SHell) — наиболее полное и функциональное стандартное средство управления сетью с использованием командной строки в среде Windows XP и старше. Набор внутренних команд сетевой оболочки пополняется с появлением новых версий операционной системы, что необходимо учитывать при работе в локальной сети с различными ОС. Так, например, команда уровня wlan ( netsh wlan — управление беспроводной сетью) может использоваться на компьютерах под управлением Windows Vista и старше и отсутствует в Widows XP. Синтаксис используемых команд и параметров также может различаться в разных операционных системах семейства Windows.

При запуске NETSH.EXE без параметров на экран выводится приглашение к вводу внутренних команд оболочки. Набор команд представляет собой многоуровневую структуру, позволяющую выполнять необходимые действия в выбранном контексте. При вводе знака вопроса ? можно получить краткую справку по доступному перечню команд на данном уровне. Ввод команды данного уровня со знаком вопроса вызовет отображение справки по ее использованию. Аналогичную справку можно получить, введя определенную команду и, после перехода на уровень ее выполнения, ввести знак вопроса. При необходимости, можно выполнить нужное действие без использования интерактивного режима, указав в качестве параметров командной строки последовательный набор внутренних команд NETSH и необходимых параметров. Например:

C:\ netsh advfirewall show global 

Последовательно выполняется команда первого уровня advfirewall, в ее контексте, команда следующего уровня show с параметром global

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

1. Описание команды NETSH.

1.1. Синтаксис:

C:\ NETSH.EXE [-a AliasFile] [-c Context] [-r RemoteMachine] [-u [DomainName\]UserName] [-p Password | *] [Command | -f ScriptFile]

1.2. Параметры:

  • -a AliasFile — не завершать работу а перейти к приглашению ввода команд после выполнения AliasFile. AliasFile — имя текстового файла, в котором содержатся одна или несколько команд netsh .
  • -c Context — изменить контекст (уровень) команд netsh.
  • -r RemoteMachine — выполнять команды netsh на удаленном компьютере. В качестве RemoteMachine может использоваться имя или IP-адрес.
  • [-u DomainName\]UserName — имя пользователя для подключения к удаленному компьютеру. Если не задано, то используется текущее имя пользователя.
  • -p Password пароль для подключения к удаленному компьютеру.
  • Command — команда оболочки netsh , которую необходимо выполнить.
  • -f ScriptFile — аналогично ключу -a, но после выполнения команд файла сценария Scriptfile, работа netsh завершается.

Пример полученной справки об использовании по команде

C:\ netsh ? 

или вводе знака вопроса на приглашение при запуске netsh без параметров в среде ОС Windows 7:

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

Команды в этом контексте:
? - Отображение списка команд.
add - Добавление элемента конфигурации в список элементов.
advfirewall - Изменения в контексте 'netsh advfirewall'.
branchcache - Изменения в контексте 'netsh branchcache'.
bridge - Изменения в контексте 'netsh bridge'.
delete - Удаление элемента конфигурации из списка элементов.
dhcpclient - Изменения в контексте 'netsh dhcpclient'.
dnsclient - Изменения в контексте 'netsh dnsclient'.
dump - Отображение сценария конфигурации.
exec - Запуск файла сценария.
firewall - Изменения в контексте 'netsh firewall'.
help - Отображение списка команд.
http - Изменения в контексте 'netsh http'.
interface - Изменения в контексте 'netsh interface'.
ipsec - Изменения в контексте 'netsh ipsec'.
lan - Изменения в контексте 'netsh lan'.
mbn - Изменения в контексте 'netsh mbn'.
namespace - Изменения в контексте 'netsh namespace'.
nap - Изменения в контексте 'netsh nap'.
netio - Изменения в контексте 'netsh netio'.
p2p - Изменения в контексте 'netsh p2p'.
ras - Изменения в контексте 'netsh ras'.
rpc - Изменения в контексте 'netsh rpc'.
set - Обновление параметров конфигурации.
show - Отображение информации.
trace - Изменения в контексте 'netsh trace'.
wcn - Изменения в контексте 'netsh wcn'.
wfp - Изменения в контексте 'netsh wfp'.
winhttp - Изменения в контексте 'netsh winhttp'.
winsock - Изменения в контексте 'netsh winsock'.
wlan - Изменения в контексте 'netsh wlan'.

Доступны следующие дочерние контексты:
advfirewall branchcache bridge dhcpclient dnsclient firewall http interface ipsec lan mbn namespace nap netio p2p ras rpc trace wcn wfp winhttp winsock wlan

Чтобы получить справку по команде, введите эту команду, затем пробел и "?"

2. Примеры практического использования NETSH.

2.1. Как получить справку в виде текстового файла для выбранного контекста NETSH.

Для примера, нужно получить справку в контексте работы с конфигурацией беспроводной сети wlan . Последовательно выполняем команды

C:\ netsh
netsh> wlan
netsh> set file open C:\wlanhelp.txt
netsh> ?
netsh> set file close

В данном примере, команда set file open C:\wlanhelp.txt устанавливает режим вывода консольных сообщений в файл с именем C:\wlanhelp.txt. После установки данного режима, все, что вводится с клавиатуры и отображается на экране, будет записано в указанный текстовый файл. Таким образом, можно создавать файлы журналов отдельных сессий использования netsh . Вместо параметра open можно использовать append и имя уже существующего файла журнала. В таком режиме данные будут записываться в конец существующего текстового файла.

2.2. Как сохранить и восстановить сетевую конфигурацию.

Команда dump создает сценарий, который содержит текущую конфигурацию. Если данные сценария сохранить в текстовый файл, то при необходимости, его можно будет использовать для восстановления измененных параметров с помощью команды загрузки и выполнения скриптов exec.

Для сохранения используется команда:

netsh> dump Имя файла сценария

Для восстановления настроек из файла сценария используется команда:

netsh> exec Имя файла сценария

В некоторых версиях netsh команда dump с указанием имени файла почему-то не работает. Однако, для сохранения конфигурации можно воспользоваться способом, описанным выше — использовать запись в файл командой с set file open C:\mynet.sav:

C:\ netsh
netsh> set file open C:\mynet.sav
netsh> dump
netsh> quit

Второй способ — использовать netsh с перенаправлением вывода команды dump в файл:

C:\ netsh dump > C:\mynet.sav

Для сохранения отдельного контекста конфигурации можно воспользоваться командой dump на соответствующем уровне. Сохранить настройки сетевых интерфейсов в виде сценария netsh в файле C:\myinterf.cnf:

C:\ netsh interface dump > C:\myinterf.cnf

Для восстановления сетевой конфигурации можно воспользоваться:

C:\ netsh exec C:\mynet.sav

Обычно, после восстановления сетевых настроек из файла сценария , требуется перезапуск некоторых сетевых служб, а желательнее — выполнить перезагрузку Windows.

2.3. Как выполнить переключение между контекстами netsh.

Иногда требуется выполнить некоторые команды на одном уровне, перейти на другой, и снова вернуться на предыдущий. Для выполнения таких переходов используются команды pushd и popd . Принцип переключения между контекстами основан на обработке очереди в соответствии с правилом «первым вошел — последним вышел» или first-in-last-out (FILO) stack. Команда pushd запоминает текущий уровень (контекст) в стеке, а команда popd извлекает его из стека.

Например:

netsh> - приглашение первого уровня команды nesh
pushd - введена команда запоминания контекста в стек
netsh> - приглашении netsh не меняется, контекст прежний.
interface ipv4 - переход на уровень interface и уровень ipv4
netsh interface ipv4> - соответственно, изменилась строка приглашения, отображая текущий контекст выполнения команды netsh
set address local static 192.168.1.9 255.255.255.0 192.168.1.1 1 - команда, меняющая настройки IP протокола.
netsh interface ip> - контекст выполнения команды, отображаемый в приглашении не изменяется.
popd - команда извлечения из стека запомненного контекста.
netsh > - строка приглашения изменилась, отображая текущий контекст выполнения команды netsh .

Без использования команд pushd и popd практически невозможно полноценное использование сценариев netsh.

2.4. Как найти примеры выполнения сетевых настроек с помощью netsh.

Кроме сохранения и восстановления настроек использование команды dump позволяет получить примеры в виде сценария, соответствующего текущей конфигурации. Например, дамп секции interface дает пример выполнения команд netsh в контексте настроек сетевых интерфейсов.

Пример сценария :

#========================
# Конфигурация интерфейса
#========================
pushd interface
reset all
popd
# Конец конфигурации интерфейса
. . .

# -----------------------------------------
# Настройка IP-интерфейсов
# -----------------------------------------
pushd interface ip
# Интерфейс настройки IP для "Подключение по локальной сети"

set address name=" Подключение по локальной сети " source=static addr=192.168.0.1 mask=255.255.255.0
set dns name="Подключение по локальной сети" source=static addr=192.168.0.2 mask=255.255.255.0
set wins name=" Подключение по локальной сети " source=static addr=192.168.0.9

Строки сценария, начинающиеся с символа #, являются комментариями. Команды pushd и popd позволяют определить контекст исполнения других команд netsh. Команды настроек конфигурации плюс справочная информация самой netsh позволяют довольно легко получить командную строку для выполнения отдельных сетевых настроек. Например сменить IP-адрес в командной строке:

C:\ netsh interface ip set address name="Подключение по локальной сети" source=static addr=192.168.0.58 mask=255.255.255.0
  • name — имя сетевого подключения
  • source — static — статический IP-адрес. Возможно значение DHCP, если адрес назначается автоматически сервером DHCP.
  • addr — значение IP-адреса
  • mask — значение маски сети.

2.5. Для получения сведений о дополнительных возможностях конфигурирования сетевых интерфейсов можно перейти на соответствующий контекст выполнения netsh, и выполнить интересующую команду с параметром ? .

Например:

netsh - старт NETSH
interface - перейти в контекст настройки сетевых интерфейсов interface
ip - перейти в контекст настройки протокола IP
set file open C:\setaddr.txt - записывать сессию в файл. Эта команда используется, если нужна справочная информация в виде текстового файла .
set address ? - выдать справку по использованию set address
set file close - закрыть файл справки.
quit - завершить работу с netsh

Для Windows Windows 7 и старше, синтаксис будет немного отличаться, уровню ip будет соответствовать уровень ipv4 или ipv6:

netch - старт NETSH
interface - перейти в контекст настройки сетевых интерфейсов interface
ipv4 - перейти в контекст настройки протокола IP v4
ipv6- перейти в контекст настройки протокола IP v6
set file open C:\setaddr.txt - записывать сессию в файл. Эта команда используется, если нужна справочная информация в виде текстового файла .
set address ? - выдать справку по использованию set address
set file close
quit - завершить работу с netsh

2.6. Пример синтаксиса для смены адреса DNS-сервера в настройках сетевого подключения «Подключение по локальной сети 2» на адрес публичного DNS-сервера Google в среде Windows 7:

C:\ netsh interface ipv4 set dnsservers name="Подключение по локальной сети 2" static 8.8.8.8 primary

2.7. Из информации файла справки следует, что возможно использование параметров командной строки netsh без указания ключевых слов. Команда с ключевыми словами:

C:\ netsh interface ipv4 set address name="Подключение по локальной сети" source=static addr=192.168.0.58 mask=255.255.255.0 gateway=192.168.0.1 gwmetric=1

Аналогично, без указания ключевых слов:

C:\ netsh interface ipv4 set address name="Подключение по локальной сети" static 192.168.0.58 255.255.255.0 192.168.0.1 1

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

C:\ netsh interface ipv4 set address name="Подключение по локальной сети" gateway=192.168.0.1 gwmetric=1

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

C:\ netsh interface ipv4 set address name="Подключение по локальной сети" source=static addr=192.168.0.58 mask=255.255.255.0 gateway=192.168.0.1 gwmetric=1

2.9. Результат применения команды netsh в некоторых случаях зависит от сетевой конфигурации системы. Например, для ”проброса портов” используется команда:

C:\ netsh interface portproxy

Она позволяет реализовать перенаправление соединения на другой порт или узел.

Напимер:

C:\ netsh interface portproxy add v4tov4 listenport=22 listenaddress=192.168.1.8 connectaddress=192.168.1.240 connectport=22 TCP

Команда создает правило, означающее, что подключение к узлу 192.168.1.8 по протоколу TCP на порт 22, будет перенаправлено на узел 192.168.1.240 TCP порт 22.

2.10. Правила для проксирования портов можно посмотреть с помощью команды:

C:\ netsh interface portproxy show all

Результат выполнения команды будет выглядеть следующим образом:

Прослушивать ipv4:                 Подключиться к ipv4:
Адрес                 Порт         Адрес             Порт

192.168.1.8           22           192.168.1.240     22

Правило присутствует, однако, перенаправление портов не будет работать, если на компьютере не запущена ”Вспомогательная служба IP” ( iphlpsvc ). Естественно, утилита netsh работоспособность службы не проверяет, поскольку это не входит в ее функционал. Это должен сделать сам пользователь, если обнаружилось, что на компьютере правила перенаправления портов не выполняются.