А АMonday 26 February 2024

Работа с сетью в командной строке Windows, #2.

Всем привет.

Продолжаем рассматривать сетевые утилиты командной строки Windows, сегодня у нас в фокусе NBTSTAT и мега-утилита netsh.

Утилита NBTSTAT

Команда NBTSTAT позволяет получить статистику протокола NetBIOS over TCP/IP (NetBT), таблицу имен локальных и удаленных компьютеров и содержимое кэш NetBIOS имен. Применение NBTSTAT позволяет принудительно обновить кэш NetBIOS-имен компьютеров и имена, зарегистрированные с помощью серверов Windows Internet Name Service (WINS). 

Синтаксис: 

nbtstat[-aRemoteName] [-AIPAddress] [-c] [-n] [-r] [-R] [-RR] [-s] [-S] [Interval]

Параметры командной строки:

-a RemoteName - отображает таблицу имен удаленного компьютера. NetBIOS-имена соответствуют перечню NetBIOS-приложений, выполняющихся на удаленном компьютере.

-A IPAddress - то же самое, что и в предыдущем случае, но вместо имени удаленного компьютера используется его IP-адрес

. -c - отображает кэш имен NetBIOS и соответствующих им IP-адресов.

-n - отображает таблицу NetBIOS-имен на локальном компьютере. Состояние "Зарегистрирован" означает, что имя зарегистрировано с использованием широковещательного запроса или с помощью сервера WINS.

-r - отображает статистику разрешения NetBIOS-имен. На компьютерах под управлением Windows XP и старше, выдается раздельная статистика о разрешении имен с помощью широковещетельной рассылки и с помощью сервера имен WINS.

-R - очистка кэш NetBIOS-имен и загрузка данных из секции #PRE файла LMHOSTS. 

-RR - очистка кэш NetBIOS - имен на локальном компьютере и их повторная регистрация с использованием сервера WINS. 

-s - отображает статистику NetBIOS - сессий между клиентом и сервером и NetBIOS-имена удаленных узлов.

-S - отображает статистику сессий между клиентом и сервером и IP-адреса удаленных узлов. 

Interval - интервал обновления отображаемых данных в секундах. Для прекращения автоматического обновления используется комбинация клавиш CTRL+C 

/? - отобразить справку по использованию NBTSTAT. 


Примеры использования: nbtstat -n - вывести список зарегистрированных NetBIOS-имен на локальном компьютере.

nbtstat -a SERVER - вывести список зарегистрированных NetBIOS-имен на компьютере SERVER.

nbtstat -A 192.168.1.1 - вывести список зарегистрированных NetBIOS-имен на удаленном компьютере с IP-адресом 192.168.1.1 .

nbtstat -RR - выполнить очистку и перерегистрацию NetBIOS-имен на локальном компьютере.


Утилита NETSH

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

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

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

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

Синтаксис:

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

-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 завершается. 


Пример полученной справки об использовании по команде 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

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


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

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

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

netsh

wlan 

set file open C:\wlanhelp.txt

?

set file close 


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


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

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

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

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

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

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

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

netsh

set file open C:\mynet.sav

dump

quit


Остается только слегка исправить полученный файл сценария C:\mynet.sav - удалить 1-ю строчку с командой dump и последние - с приглашением netsh и (или) командой quit 

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

netsh dump > C:\mynet.sav 

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

netsh interface dump > C:\myinterf.cnf - сохранить настройки сетевых интерфейсов в виде сценария netsh в файле C:\myinterf.cnf

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

netsh exec C:\mynet.sav 

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


Как выполнить переключение между контекстами 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. 


Как найти примеры выполнения сетевых настроек с помощью 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-адрес в командной строке:

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 - значение маски сети.


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

netch - старт NETSH

interface - перейти в контекст настройки сетевых интерфейсов interface

ip - перейти в контекст настройки протокола IP 

set file open C:\setaddr.txt - записывать сессию в файл. Эта команда используется, если нужна справочная информация в виде текстового файла .

set address ? выдать справку по использованию set address

set file close - закрыть файл справки. 

quit - завершить работу с netsh


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

netch - старт NETSH

interface - перейти в контекст настройки сетевых интерфейсов interface

ipv4 - перейти в контекст настройки протокола IP 

set file open C:\setaddr.txt - записывать сессию в файл. Эта команда используется, если нужна справочная информация в виде текстового файла .

set address ? выдать справку по использованию set address

set file close 

quit - завершить работу с netsh


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

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

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

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

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

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

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

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

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

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


Продолжение следует.


No comments:

Post a Comment

А что вы думаете по этому поводу?

Версия на печать

Популярное