Я подготовил собственный инструмент для автоматической подачи входных данных из текстового файла утилитам командной строки. Это простой однострочный сценарий, который с небольшими изменениями работает в Windows, Linux и Mac OS X.

Принцип действия

Предположим, подготовлен отчет брандмауэра о наиболее частых местах назначения в исходящих запросах. К сожалению, брандмауэр не выполняет преобразование IP-адреса в имя и просто выдает список IP-адресов и число соединений для каждого адреса, как показано в Таблице 1.

Таблица 1. Самые частые места назначения по IP-адресу
Место назначения Число соединений
66.102.7.99 861.58
216.239.63.83 606.29
66.94.230.34 307.04
207.68.183.35 296.35
17.112.152.32 295.08
66.102.7.104 223.58
66.102.7.147 202.72

Отчет выглядит гораздо интереснее (и более полезен), если преобразовать IP-адреса в имена доменов. Тогда можно с первого взгляда определить, какие пользователи посещают портал, организуют потоковую пересылку музыки, обращаются к Web-почте или выполняют иные действия в Internet.

С помощью нескольких широко распространенных инструментов командной строки, таких как Whois, dig и NBTStat компании Microsoft, можно преобразовать IP-адреса в имена владельцев, DNS и Windows NetBIOS, соответственно. Whois легко применить к единственному адресу. Например, команда

whois 66.102.7.99

покажет, кому принадлежит данный IP-адрес. Преобразование занимает несколько секунд, а затем нужно прокрутить вывод, чтобы найти нужные данные. Можно подготовить цикл для автоматического считывания списка объектов, такого как отчет об адресах, полученный из брандмауэра, из текстового файла и обработки каждого объекта командой Whois. Первый шаг - скопировать IP-адреса в текстовый редактор, по одному в строке

66.102.7.99
216.239.63.83
66.94.230.34
207.68.183.35
17.112.152.32
66.102.7.104
66.102.7.147

и сохранить записи в текстовом файле с таким именем, как data.txt.

Следующий шаг - подготовить короткий сценарий, который читает файл, выполняет команду над каждым элементом файла и обрабатывает вывод, чтобы представить его в более понятном виде. Многие системные администраторы используют Linux и Mac OS X наряду с Windows, но к счастью, этот полезный сценарий легко переносить между платформами. В данной статье сначала рассмотрена версия Bourne-Again Shell (BASH), а затем тот же сценарий в оболочке Windows.

Версия для Linux и Mac OS X

BASH - стандартная оболочка командной строки для Linux и Mac OS X. Приведенный ниже сценарий перебирает содержимое файла data.txt и выполняет преобразование Whois над каждым IP-адресом в файле:

for ip in $(cat data.txt); do
whois $ip | echo "$ip $(grep
'OrgName')"; done

Этот сценарий представляет собой простой цикл, состоящий из трех этапов, разделенных точками с запятой. На первом этапе организуется цикл for ... in, определяется переменная ip, которая представляет IP-адрес, и переменная для источника данных. Переменная для объектов, которые предстоит использовать, заполняется командой cat. В частности, $(cat data.txt) использует вывод команды cat data.txt - в данном случае, список IP-адресов -- как переменную. Cat просто пересылает содержимое текстового файла в вывод. В сущности, for ip in $(cat data.txt) означает: "Извлечь каждый элемент файла data.txt и сохранить его в переменной ip для немедленной обработки ядром сценария".

Вторая часть цикла, содержащая оператор do, обеспечивает базовую функциональность сценария - именно в ней происходят главные действия. Этот раздел можно изменить для работы с разными инструментами. Bash-оператор do применяет команду whois к переменной $ip.

Функциональность тестового сценария расширена с использованием символа канала (|), чтобы перенаправить вывод команды whois в команду echo и переформатировать вывод. В нашем примере распечатывается IP-адрес, а следом за ним - строка вывода whois, содержащая строку OrgName. Команду echo можно удалить, и сценарий будет работать, но при этом для каждого IP-адреса будет отображаться весь длинный вывод whois.

Команда grep инкапсулирована с переменной $(grep ... ), что позволяет вложить команды в другие команды. В противном случае команда echo просто выведет слово grep на экран, вместо того, чтобы выполнить команду grep. Последняя часть сценария, ключевое слово done, завершает цикл.

Результаты обработки сценарием файла data.txt показаны на Экране 1.

Экран 1. Выполнение команды whois в сценарии Bash.

Использование другого инструмента

Whois - превосходное средство для поиска владельца IP-адреса, но что делать, если нужно выполнить обратное преобразование DNS? Чтобы примениить другую команду, в данном случае dig, в сценарий достаточно внести лишь небольшие изменения:

for ip in $(cat data.txt); do
dig -x $ip | grep -v ';' ;
done

Главное изменение в сценарии - команда, которую предстоит выполнить. В этом случае команда dig запускается в режиме обратного преобразования с параметром -x, IP-адресом $ip, а результат пересылается в grep для печати только строк без точки с запятой (-v ';'). Таким образом вывод удобнее читать.

Настройка для Windows

Windows поддерживает разнообразные языки сценариев, такие как JScript и VBScript, но для простой обработки списка элементов вполне достаточно возможностей командной оболочки Windows. Сценарий Windows похож на приведенные выше сценарии BASH по структуре, но отличается синтаксисом. В данной версии сценария для Windows используется инструмент NBTStat для поиска имен NetBIOS компьютеров по IP-адресу:

echo off & (for /F %i in
(data.txt) do echo %i
& nbtstat -a %i | find
"<00> UNIQUE") & echo on

Чтобы расчистить вывод, сначала блокируется вывод команд в пакетном файле с помощью команды echo off. В BASH для разделения команд нужна точка с запятой, а в командной оболочке Windows используется амперсанд (&), чтобы связать вместе несколько команд.

Синтаксис цикла for ... in оболочки Windows отличается от цикла BASH. Параметр /F применяется, чтобы оператор выполнил поиск файла. Для определения и ссылки на переменные используется знак процента и единственный символ (например, %i).

Оператор do выводит IP-адрес, отображая переменную %i, а затем показывает только вывод команды nbtstat, который содержит строки с <00> UNIQUE. На Экране 2 показан вывод сценария в системе Windows: имена NetBIOS для короткого списка IP-адресов.

Экран 2. Команда NBTStat в сценарии командной оболочки Windows.

Простое, но полезное средство

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

Джефф Феллинг (jeff@blackstatic.com) - редактор рассылки Windows IT Security и вице-президент по информационной безопасности компании aQuantive. Он автор книги "IT Administrator's Top 10 Introductory Scripts for Windows" (издательство Charles River Media).