Диагностика неисправных соединений с помощью опроса трех сетевых служб

Я постоянно ищу новые средства, которые помогли бы упростить работу системного администратора. Иногда нужные инструменты удается найти у независимых поставщиков; иногда мне приходится создавать их самостоятельно. Многие изобретенные мною средства — это сценарии, запускаемые из командной строки. Они не так сложны, но помогают решать насущные задачи. Администратор обязательно должен освоить искусство использования сценариев, так как возможности многих административных инструментов на базе Windows ограничены.

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

  • DHCP-сервер. Этот сервер хранит зарезервированные IP-адреса, назначает динамические IP-адреса и выдает информацию о конфигурации машины. В базе данных DHCP-сервера хранятся имя и MAC-адрес каждого компьютера в сети.
  • DNS. Служба доменных имен обеспечивает преобразование имени FQDN (Fully Qualified Domain Name) в IP-адрес.
  • WINS. WINS-серверы преобразуют имена NetBIOS в IP-адреса. Клиенты Windows регистрируются на серверах WINS, чтобы сообщить свое имя NetBIOS, адрес MAC и регистрационную информацию NetBIOS.

Требуется немало времени, чтобы извлечь из всех этих баз данных сетевую информацию. Я объединил инструменты командной строки и сценарные приемы в единое средство поиска, которое собирает сведения о конкретном компьютере.

Выбор инструментов

Опрос баз данных сетевых служб можно выполнить с использованием трех программ: Dhcpcmd для DHCP, Winscl для WINS и Nslookup для DNS. Первые две утилиты, Dhcpcmd и Winscl, входят в состав пакета Windows NT 4.0 Resource Kit Support Tools (http://www.microsoft.com/ ntserver/ nts/ downloads/ recommended/ ntkit/ default.asp), а Winscl можно получить вместе с компакт-диском Microsoft Windows 2000 Resource Kit. Nslookup — утилита из состава Windows 2000 и NT.

Мой сценарий, netlookup.bat (см. Листинг 1), разделен на три части, в каждой из которых один из перечисленных инструментов используется для поиска в одной из баз данных сетевых служб. Затем сценарий записывает полученные результаты в текстовый файл, который можно увидеть на экране. При запуске сценария из командной строки следует в качестве первого параметра указать имя целевого компьютера. Например, чтобы получить сведения о машине с именем Niser, нужно ввести команду

Netlookup niser

Чтобы netlookup.bat обнаружил необходимые инструменты, их следует скопировать в один каталог или указать в системном пути. Кроме того, каждой утилите требуются соответствующие права для доступа к каждой базе данных.

В разделе A Листинга 1 определены переменные для временных файлов сценария: dhcpdump хранит результаты запроса DHCP, lookupresults — данные, собранные в ходе выполнения сценария, а winsclinput — входной файл WINS.

Использование Dhcpcmd для опроса DHCP

Утилита Dhcpcmd, вызываемая в разделе B, запрашивает определенную область на конкретном DHCP-сервере, чтобы получить из базы данных информацию о выделении IP-адресов. Типовой синтаксис таков:

Dhcpcmd DHCPServerIPAddress
 command [параметры команды]

Параметры команды могут быть различными — от создания подсетей до резервирования IP-адресов. По команде Enumclients DHCP-сервер запрашивает в базе данных информацию о выделенных IP-адресах. Netlookup использует DHCP-сервер с IP-адресом 10.0.1.5 и подсетью 10.0.1.0. Параметр команды -h отображает MAC-адрес для каждого компьютера наряду с информацией о выделении IP-адресов. Enumclients возвращает номер записи базы данных, выделенный IP-адрес и NetBIOS-имя компьютера. Запрос извлекает все IP-адреса, присвоенные в подсети, поэтому сценарий перенаправляет вывод Dhcpcmd в переменную %dhcpdump%, из которой Netlookup впоследствии выбирает информацию о компьютере Niser. В разделе C сценарий использует утилиту Findstr, удобный инструмент поиска текстовых соответствий, для поиска строки Niser в файле dhcpdump.txt. Параметр -i указывает утилите Findstr, что регистр символов следует игнорировать, а параметр %1 представляет параметр Niser, определенный при вызове Netlookup. Результаты выводятся на экран в следующем формате:

10.0.1.15 NISER a1b2c3d4e5f6

Если нужно выполнить поиск в нескольких областях или DHCP-серверах, то в Netlookup следует ввести дополнительные строки. Переменные, определенные Netlookup, указывают путь к текстовым файлам в каталоге, заданном системной переменной %temp%, поэтому о местонахождении каталога Temp можно не беспокоиться. В Windows 2000 переменной %temp% по умолчанию присваивается значение %userprofile%Local Settings; в NT эта переменная обычно указывает на C:Temp.

Опрос WINS с использованием Winscl

Затем сценарий выполняет поиск в базе данных WINS. Winscl — превосходный инструмент для поиска информации в WINS и отличная альтернатива графическому интерфейсу для доступа к базе данных, работа с которым отнимает много времени. При запуске из командной строки Winscl требует от пользователя ввести ряд параметров. Сценарий Netlookup вводит параметры вместо пользователя, выбирая их из файла ответов, встроенного в исходный текст в разделе D. Раздел D сценария выводит на экран заголовок файла lookupresults и направляет текст в файл Winscl. Затем Netlookup передает параметр 1, указывая утилите Winscl, что используется протокол TCP/IP (неименованные каналы) и объявляет имя NetBIOS опрашиваемого WINS-сервера. Затем Netlookup вводит параметры QN (чтобы Winscl запросила имена), %1, сообщая имя компьютера, которое следует отыскать, и 0, показывая, что не нужно запрашивать конкретные регистрационные данные NetBIOS. И, наконец, Netlookup использует команду EX, чтобы завершить работу программы.

Как и в случае с результатами Dhcpcmd, Netlookup обращается к Findstr, чтобы отобрать только нужную информацию. В разделе E сценарий вызывает Winscl и Findstr. Утилиты разделены символом |, который указывает, что следует запустить Winscl, а потом выполнить некоторые действия с результатами. Информация, которую необходимо отфильтровать из результатов Winscl, содержится в двух различных строках, поэтому Findstr сравнивает две последовательности символов. Два ключа /c в команде Findstr сравнивают указанные программистом текстовые строки (в данном случае Name= и «Address is»). Сценарий перенаправляет результаты в файл lookupresults.txt и присоединяет их к результатам запроса DHCP. Следует обратить внимание, что для присоединения результатов к существующему тексту файла используются два символа «больше чем» (>). После выполнения команды содержимое файла lookupresults.txt будет иметь следующий вид:

Name=(NISER ) Address is (10.0.1.15)

Со временем DNS вытеснит WINS, но, пока этого не произошло, важно знать и уметь использовать WINS.

Выполнение запросов DNS с помощью Nslookup

Провести поиск в базе данных DNS проще, чем в двух других базах. Чтобы получить из DNS имя компьютера, указанное при вызове Netlookup, используется утилита Nslookup. В разделе F сценарий вызывает Nslookup и добавляет результаты в файл lookupresults.txt.

Тестирование и результаты

После того как Netlookup соберет служебную информацию, сценарий направляет удаленному компьютеру запрос, чтобы убедиться в доступности IP-адреса (если пользователь указывает в командной строке необязательный параметр -p). Исходный текст для дополнительного тестирования с помощью ping приведен в разделе G.

После того как завершены опросы DHCP, WINS и DNS, строка сценария с меткой H выводит результаты на экран. Чтение результатов можно облегчить, вставив оператор Echo перед разделом сценария, опрашивающим каждую базу данных. Последние строки сценария удаляют файлы Netlookup.

Если не удается установить связь с каким-либо компьютером в сети, требуется быстро выяснить причину неисправности. Существуют различные инструменты командной строки для опроса DHCP, WINS и DNS. Объединив их с помощью такого сценария, как Netlookup, администратор может без труда получить всю необходимую информацию.

ПОЛ НАЙСЕР — старший системный администратор финансовой компании из Чикаго. Специализируется на проектировании, развертывании и автоматизации информационных систем. С ним можно связаться по адресу: paul@niser.com.