Вывод результатов

Любая утилита безопасности полезна ровно настолько, насколько полезны выдаваемые ею результаты. Различные сложные тесты и алгоритмы имеют мало пользы, если они не представлены в хорошо организованной и удобной для понимания форме. Предоставляя разлиные способы вывода результатов Nmap используется людьми и программным обеспечением, т.к. нет такого формата, который подходил бы всем. Поэтому Nmap предлагает несколько форматов, включая интерактивный режим для чтения людьми и XML для удобного анализа программным обеспечением.

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

Nmap предоставляет пять различных выходных форматов. Формат по умолчанию называется интерактивный вывод,, результаты передаются на стандартный вывод (stdout). Есть также нормальный вывод,, который подобен интерактивному, за исключением того, что в процессе работы выводится меньше информации и предупреждений, т.к. предполагатеся, что эти результаты будут анализироваться после завершения сканирования, а не интерактивно.

XML вывод это один из наиболее важных выходных форматов, т.к. он может быть конвертирован в HTML, лего анализируется программами типа графического пользовательского интерфейса Nmap или может быть экспортирован в базу данных.

Оставшимися двумя форматами являются grepable формат, который содержит большую часть о целевом хосте в одной строке, и sCRiPt KiDDi3 0utPUt для пользователей, которые считают себя |<-r4d.

В то время как интерактивный вывод устанавливается по умолчанию и не имеет связанных с ним опций командой строки, опции остальных четырех форматов вывода имеют похожий синтаксис. В качестве аргумента они принимают имя файла, где должны храниться результаты. Возможно испльзование нескольких форматов, но каждый из них должен быть задан только один раз. Например, вы хотите сохранить результаты предоставляемые форматом нормального вывода для себя, и в то же время сохранить в формате XML результаты того же сканирования для анализа программами. Вы можете сделать это с помощью опции -oX myscan.xml -oN myscan.nmap. Для краткости здесь используются простые имена типа myscan.xml, но рекомендуется использовать более описательные имена. Каждый выбирает имена по своему; я обычно использую длинные имена, содержащие дату сканирования и пару слов описания, и помещаю эти файлы в директории с именем компании, которую я сканирую.

Хотя с помощью этих опций информация сохраняется в файлы, Nmap по-прежнему выводит интерактивную информацию на стандартный вывод. Например, с помощью опции nmap -oX myscan.xml target XML сохраняется в файл myscan.xml, а стандартный вывод заполняется информацией, как если бы опция -oX вообще не была задана. Вы можете изменить это поведение передав в качестве аргумента к одному из форматов вывода символ дефиса. Это деактивирует интерактивный вывод, а на стандартный вывод будет пересылаться информация в заданном вами формате. Поэтому с помощью команды nmap -oX - target на стандартный вывод будет пересылаться только XML. Серьезный ошибки могут выводиться в стандартный поток ошибок, stderr.

В отличии от некоторых аргументов Nmap, пробел между флагом формата файла (например, -oX) и именем файла или дефисом здесь обязателен. Если вы опустите флаги и зададите аргументы типа -oG- или -oXscan.xml, из-за функции обратной совместимости Nmap будут созданы файлы нормального формата с именами G- и Xscan.xml соответственно.

Все эти аргументы поддерживают strftime перобразования в именах файлов. %H, %M, %S, %m, %d, %y и %Y это то же самое что и в strftime. %T то же самое что и %H%M%S, %R то же самое что и %H%M и %D то же самое что и %m%d%y. Знак %, после которого следует любой символ просто даст этот символ (%% даст вам символ процента). Поэтому опция -oX 'scan-%T-%D.xml' будет использовать XML файл в формате scan-144840-121307.xml.

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

Форматы вывода Nmap
-oN <имя_файла> (Нормальный вывод)

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

-oX <имя_файла> (XML вывод)

Перенаправляет XML вывод в заданный файл. Nmap включает определение типа документа (DTD), что позволяет XML парсерам использовать XML вывод Nmap. Изначально это предназначалось для программного использования, хотя это также позволяет людям интерпретировать XML вывод Nmap. DTD определяет возможные элементы, а также перечисляет атрибуты и значения, которые они могут принимать. Последняя версия всегда доступна на https://nmap.org/data/nmap.dtd.

XML предоставляет формат, который легко обрабатывается программным обеспечением. Бесплатные XML парсеры, доступны для всех основных языков программирования, включая C/C++, Perl, Python и Java. Люди даже написали привязки для большинства из этих языков для обработки выходных данных Nmap. Примерами являются Nmap::Scanner и Nmap::Parser на Perl CPAN. В большинстве случаев взаимодействия какого-либо приложения и Nmap, XML является предпочитаемым форматом.

XML вывод связывается с XSL таблицей стилей, которая используется для форматирования результатов как HTML. Самым легким способом использования этой возможности является загрузка XML вывода в браузер типа Firefox или IE. По умолчанию это будет работать только на машине, на которой установлена Nmap (или настроенной аналогично) из-за жесткой привязки полного пути файла nmap.xsl. Используйте опции --webxml или --stylesheet для создания XML файлов отображаемых как HTML только на подключенной к интернету машине.

-oS <имя_файла> (ScRipT KIdd|3 oUTpuT)

Script kiddie формат практически такой же как и интерактивный, за тем исключением, что после окончания сканирования он перерабатывается, чтобы больше подходит l33t HaXXorZ, который смотрит свысока на Nmap из-за постоянного использования заглавных букв и правовисания. Лишенные чувства юмора люди должны иметь ввиду, что эта опция высмеивает script kiddies, перед тем как ругать меня за то, что я якобы «помогаю им».

-oG <имя_файла> (grepable вывод)

Это формат обсуждается последним, т.к. он нежелетален для использования. Формат вывода XML намного мощенее, а также особенно удобен для опытных пользователей. XML это стандарт, для которого доступны дюжины отличных парсеров, в то время как grepable вывод всего лишь мое простое изобретение. XML достаточно гибок для поодержания новых функций Nmap по мере их выхода, тогда как мне частенько приходится опускать некоторые возможности grepable вывода из-за недостатка места.

Тем не менее, этот формат вывода все еще довольно популярен. Это простой формат, который просто описывает каждый хост в одну строку и может быть легко обработан стандартными Unix утилитами как grep, awk, cut, sed, diff и Perl. Даже я иногда использую этот формат вывода. Поиск хостов, на которых открыт SSH порт или работает Solaris сводится к простой передаче результатов утилите grep, а затем утилитам типа awk или cut для вывода желаемой информации.

Grepable вывод состоит из комментариев (линий начинающихся с #) и строк описывающих цели. Каждая строка включает комбинацию из 6 помеченных полей, разделенных знаками табуляции и оканчивающихся двоеточием. Поля следующие: Хост, Порты, Протоколы, Ignored State, ОС, Seq Index, IP ID и Статус.

Наиболее важным из этих полей обычно является Порты, где дается описание каждого интересного порта. Это поле представляет собой разделенный запятыми список портов. Каждый элемент этого списка описывает один интересный порт и состоит из семи подполей, разделенных знаком косой черты (/). Подполя следующие: Номер порта, Состояние, Протокол, Владелец, Служба, SunRPC информация и Информация о версии.

Как и в случае с XML выводом, это руководство не позволяет полностью описать формат. Более подробное описание этого формата доступно с https://nmap.org/book/output-formats-grepable-output.html.

-oA <базовое_имя_файла> (Использовать все форматы вывода)

Для удобства вы можете задать опцию -oA <базовове_имя_файла>, чтобы сохранить результаты сканирования в обычном, XML и grepable форматах сразу. Они будут содержаться в файлах <базовове_имя_файла>.nmap, <базовове_имя_файла>.xml и <базовове_имя_файла>.gnmap соответственно. Как и с большинством программ вы можете предварять имя файла путем к директории, например, ~/nmaplogs/foocorp/ для Unix или c:\hacking\sco для Windows.

-v (Увеличить уровень вербальности)

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

Большинство изменений касаются только интерактивного режима; некоторые также нормального и script kiddie режимов. Остальные форматы вывода предназначены для обработки машинами, поэтому вся необходимая информация выдается Nmap по умолчанию. Тем не менее существуют несколько изменений в других режимах, когда размер выходной информации может быть существенно сокращен путем отбрасывания некоторых деталей. Например, линия комментариев в grepable формате, предоставляющая список всех просканированных портов, выводится только в вербальном режиме, т.к. список может быть довольно длинный.

-d [уровень] (Увеличить или установить уровень отладки)

Когда даже вербальный режим не предоставляет вам достаточную информацию, вы можете использовать отладку! Отладка активируется опцией командной строки (-d), и уровень отладочной информации может быть увеличен путем задания этой опции несколько раз. В качестве альтернативы, вы можете передать уровень отладки как аргумент опции -d. Например, опцией -d9 устанавливается девятый уровень. Это наивысший уровень, который будет предоставлять тысячи строк, до тех пор пока вы не запустите очень простое сканирование небольшого количества целей.

Отладка полезна, если вы предполагаете, что в Nmap есть баг, или если вы просто озадачены тем, что делает Nmap и почему. Т.к. эта функция по большому счету предназначена для разработчиков, то выходная информация не всегда понятна. Вы можете получить что-то типа: Timeout vals: srtt: -1 rttvar: -1 to: 1000000 delta 14987 ==> srtt: 14987 rttvar: 14987 to: 100000. Если вы не понимаете, что это означает, вы можете проигнорировать эту информацию, посмотреть в исходному коде или попросить помощи у разработчиков (nmap-dev). Некоторые линии довольно понятны, но сообщения становятся более неясными с увеличением уровня отладки.

--packet-trace (Отслеживание принятых и переданных пакетов и данных)

Указывает Nmap выводить краткую информацию о каждом принятом и отправленном пакете. Обычно используется для отладки, но также может быть полезна новичкам для понимания того, что же действительно делает Nmap. Чтобы избежать вывода тысяч строк, вы можете ограничить количество портов для сканирования, например опцией -p20-30. Если вас интересует только то, что происходит при процессе определения версии, то вместо этой опции используйте --version-trace.

--open (Показывать только открытые (или возможно открытые) порты)

Иногда вас интересуют только порты, к которым вы фактически можете подключиться (а именно открытые), и вам не нужны результаты о закрытых, фильтруемых и закрытых|фильтруемых портах. Обработка выходной информации может быть легко произведена с помощью таких утилит как grep, awk и Perl, но по многочисленным просьбам эта функция была добавлена в Nmap. Задайте опцию --open, чтобы видеть информацию только об открытых, открытых|фильтруемых и не фильтруемых портах. Эти три типа портов расцениваются как обычно, что означает, что открытые|фильтруемые и нефильтруемые порты могут быть приняты во внимание, если их набралось большое количество.

--iflist (Вывести список интерфейсов и роутеров)

Выводит список интерфейсов и системных роутеров, обнаруженных Nmap. Это полезно для отладки проблем с роутерами и неправильного описания устройств (когда, например, Nmap рассматривает PPP соединение как ethernet).

--log-errors (Записывать ошибки/предупреждения в выходной файл нормального режима)

Обычно предупреждения и ошибки выводятся Nmap только на экран (интерактивный вывод), и не сохраняются в файлах нормального режима вывода (заданных опцией -oN). Если вы хотите записывать эти сообщения в заданные вами файлы, то используйте эту. Это может быть полезно, если вы не просматриваете интерактивный вывод или хотите сохранить все ошибки во время отладки какой-либо проблемы. Сообщения об ошибках и предупреждениях по-прежнему будут выводится в интерактивном режиме. Это не будет работать для большинства ошибок, вызванных неправильным заданием аргументов командой строки, т.к. Nmap может не успеть проинициализировать выходные файлы этих команд. В дополнении ко всему, некоторые предупреждения и ошибки Nmap используют другую систему, которая еще не поддерживает данную опцию.

Альтернативой опции --log-errors может служить перенаправление интерактивного вывода (включая стандартный поток ошибок) в файл. Большинство командных оболочек Unix легко справится с этим, но это может быть проблематично на Windows.

--append-output (Добавлять в конец, а не перезаписывать выходные файлы)

Когда вы передаете в качестве аргумента какому-либо флагу формата вывода (например, -oX или -oN) имя файла, то по умолчанию этот файл перезаписывается. Если вы хотите оставить текущее содержание файла, а новые результаты добавлять в конец, используйте опцию --append-output. В результате все указанные файлы вывода не будут перезаписываться, а новое содержимое будем добавляться в конец. Существуют некоторые сложности с XML выводом (-oX), т.к. результирующий файл в этом случае обычно не сможет быть правильно проанализирован программами, пока не вы подправите его вручную.

--resume <имя_файла> (Продолжить прерванное сканирование)

Некоторые всесторонние варианты сканирования Nmap могут занимать очень продолжительное время - порядка нескольких дней. И они не всегда работают до завершения. Различные ограничения могут не позволить Nmap сканировать в течении рабочих часов, сеть может перестать работать, машина, на которой запущена Nmap может быть перезагружена, или сама Nmap может вылететь. Администратор, использующий Nmap, может отменить сканирование по каким-то другим причинам, просто нажав ctrl-C. Запуск целого сканирования с самого начала может быть нежелателен. К счастью, если были сохранены логи нормального (-oN) или grepable формата (-oG), пользователь может продолжить сканирование с того места, на котором оно было остановлено. Просто задайте опцию --resume и передайте в качестве аргумента имя выходного файла обычного или grepable формата. Никакие другие опции использовать не разрешается, т.к. Nmap будет продолжать сканирование с заданными ранее опциями. Просто запустите Nmap командой nmap --resume<имя_лог_файла>. Nmap будет добавлять новые результаты к выходным файлам, определенным при предыдущем запуске. Выходные файлы формата XML не поддерживаются функцией возобновления работы, т.к. комбинирование результатов двух сканирований в один правильный XML файл является сложной задачей.

--stylesheet <путь или URL> (Устанавливает XSL таблицу стилей для преобразования XML вывода)

Nmap использует XSL таблицу стилей nmap.xsl для просмотра или перевода XML вывода в HTML. XML вывод включает директиву xml-stylesheet, которая указывает на файл nmap.xml, туда, где он был размещен Nmap при установке (или на текущую рабочую директорию в Windows). Просто загрузите XML вывод Nmap в любой современный веб браузер, и он самостоятельно найдет файл nmap.xsl для отображения результатов. Если вы хотите использовать другой файл таблицы стилей, то передайте имя этого файла в качестве аргумента опции --stylesheet. Вы должны использовать полный путь к файлу или URL. Один из примеров: --stylesheet https://nmap.org/data/nmap.xsl. Эта опция указывает браузеру загружать последнюю версию таблицы стилей с Nmap.Org. Опция --webxml делает то же самое, но без лишнего набора на клавиатуре и запоминания. Загрузка XSL с Nmap.Org облегчает просмотр результатов на машине, на которой не установленна Nmap (и поэтому нет файла nmap.xsl). Поэтому URL часто бывает более полезен, но локальный файл nmap.xsl используется по умолчанию из соображений приватности.

--webxml (Загружает таблицу стилей с Nmap.Org)

Эта опция является просто псевдонимом --stylesheet https://nmap.org/data/nmap.xsl.

--no-stylesheet (Убрать объявление XSL таблицы стилей из XML)

Задайте эту опцию, чтобы не ассоциировать какую-либо XSL таблицу стилей с XML выводом. В этом случае директива xml-stylesheet опускается.