Введение
При проведении тестирования на проникновение или оценке сетевой безопасности выполнение сканирования — это лишь половина дела. Правильное документирование и сохранение результатов сканирования критически важны для составления отчетов, отслеживания прогресса и передачи данных в другие инструменты безопасности.
Выбор формата вывода определяет, что вы сможете сделать с результатами дальше. Формат, удобный для чтения человеком, лучше всего подходит для быстрого просмотра. Структурированный вывод идеален для автоматизации. В профессиональных рабочих процессах обычно сохраняют оба варианта.
Nmap, стандарт индустрии для сетевого сканирования, предоставляет несколько форматов вывода для различных нужд. Три наиболее распространенных формата — это Normal (удобный для чтения), Grepable (предназначенный для парсинга через командную строку) и XML (структурированные данные для импорта в другое ПО).
В этой лабораторной работе вы научитесь генерировать эти три формата вывода и использовать базовые инструменты командной строки Linux для обработки результатов и извлечения ценной информации.
Вывод в формате Normal (-oN)
На этом этапе вы узнаете, как сохранять результаты сканирования Nmap в формате Normal. Формат Normal — это, по сути, прямая копия того, что вы видите на экране терминала при запуске сканирования Nmap. Он легко читается и идеально подходит для быстрого просмотра результатов или обмена ими с коллегами в текстовом документе.
Этот формат оптимизирован для людей, а не для автоматизированных конвейеров. Это правильный выбор, если конечным потребителем является аналитик, читающий отчет о сканировании.
Чтобы сохранить результаты сканирования в формате Normal, используйте флаг -oN, за которым следует имя создаваемого файла. Мы просканируем наш локальный компьютер (127.0.0.1), чтобы обнаружить открытые порты и сохранить вывод.
Выполните следующую команду в терминале, чтобы запустить сканирование и сохранить его в файл normal_scan.txt:
nmap -p 22,8080 -oN normal_scan.txt 127.0.0.1
После завершения сканирования вы можете просмотреть содержимое файла с помощью команды cat. Она отобразит точно такой же вывод, который был выведен на экран во время сканирования.
cat normal_scan.txt
Вы должны увидеть вывод, похожий на этот, с указанием открытых портов и связанных с ними служб:
## Nmap 7.80 scan initiated Sat Mar 7 16:07:07 2026 as: nmap -p 22,8080 -oN normal_scan.txt 127.0.0.1
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000057s latency).
PORT STATE SERVICE
22/tcp open ssh
8080/tcp open http-proxy
## Nmap done at Sat Mar 7 16:07:07 2026 -- 1 IP address (1 host up) scanned in 0.02 seconds
Вывод в формате Grepable (-oG)
На этом этапе вы изучите формат вывода Grepable. Хотя формат Normal отлично подходит для человеческого глаза, его сложно обрабатывать программно, так как информация распределена по нескольким строкам. Формат Grepable решает эту проблему, помещая всю информацию об одном хосте в одну длинную строку.
Такое «сплющивание» данных делает парсинг через командную строку практичным. Это классический пример адаптации вывода для последующих инструментов, а не для удобства чтения.
Этот формат специально разработан для использования с инструментами командной строки Linux, такими как grep, awk и cut. Для генерации вывода в формате Grepable используйте флаг -oG.
Выполните следующую команду, чтобы запустить то же сканирование, но на этот раз сохранить результаты в формате Grepable в файл grepable_scan.txt:
nmap -p 22,8080 -oG grepable_scan.txt 127.0.0.1
Теперь просмотрите содержимое созданного файла:
cat grepable_scan.txt
Вывод будет сильно отличаться от формата Normal. Обратите внимание, как информация о хосте и все его открытые порты сжаты в одну строку:
## Nmap 7.80 scan initiated Sat Mar 7 16:07:20 2026 as: nmap -p 22,8080 -oG grepable_scan.txt 127.0.0.1
Host: 127.0.0.1 (localhost) Status: Up
Host: 127.0.0.1 (localhost) Ports: 22/open/tcp//ssh///, 8080/open/tcp//http-proxy///
## Nmap done at Sat Mar 7 16:07:20 2026 -- 1 IP address (1 host up) scanned in 0.02 seconds
Такая структура позволяет невероятно легко искать определенные ключевые слова, например "open", и извлекать соответствующие IP-адреса, что вы и будете практиковать на следующем этапе.
Вывод в формате XML (-oX)
На этом этапе вы узнаете, как генерировать вывод в формате XML. XML (eXtensible Markup Language) — это высокоструктурированный формат, который широко поддерживается множеством различных программных приложений.
Машиночитаемый структурированный вывод становится все более важным по мере масштабирования проверок. Как только результаты сканирования необходимо передавать в другие инструменты, ситуативный парсинг текста становится хрупким и затратным в обслуживании.
В контексте тестирования на проникновение XML является предпочтительным форматом, когда вам нужно импортировать результаты сканирования Nmap в другие инструменты безопасности, такие как Metasploit Framework, сканеры уязвимостей или пользовательские скрипты для создания отчетов. Чтобы создать файл вывода XML, используйте флаг -oX.
Выполните следующую команду, чтобы выполнить сканирование и сохранить результаты в файл xml_scan.xml:
nmap -p 22,8080 -oX xml_scan.xml 127.0.0.1
Вы можете изучить содержимое XML-файла с помощью команды cat:
cat xml_scan.xml
Вывод будет представлять собой большой блок структурированных XML-тегов. Хотя человеку читать его не очень удобно, он идеально отформатирован для машинного парсинга:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nmaprun>
<?xml-stylesheet href="file:///usr/bin/../share/nmap/nmap.xsl" type="text/xsl"?>
<!-- Nmap 7.80 scan initiated Sat Mar 7 16:07:30 2026 as: nmap -p 22,8080 -oX xml_scan.xml 127.0.0.1 -->
<nmaprun scanner="nmap" args="nmap -p 22,8080 -oX xml_scan.xml 127.0.0.1" start="1772870850" startstr="Sat Mar 7 16:07:30 2026" version="7.80" xmloutputversion="1.04">
...
<host starttime="1772870850" endtime="1772870850"><status state="up" reason="conn-refused" reason_ttl="0"/>
<address addr="127.0.0.1" addrtype="ipv4"/>
<hostnames>
<hostname name="localhost" type="PTR"/>
</hostnames>
<ports><port protocol="tcp" portid="22"><state state="open" reason="syn-ack" reason_ttl="0"/><service name="ssh" method="table" conf="3"/></port>
...
Парсинг вывода Grepable с помощью Awk
На этом заключительном этапе вы примените формат Grepable на практике. Распространенный сценарий при тестировании на проникновение — сканирование большой сети, поиск хостов с определенными открытыми портами, а затем извлечение только IP-адресов этих хостов для передачи в другой инструмент (например, для подбора паролей или эксплуатации уязвимостей).
Мы будем использовать два мощных инструмента обработки текста в Linux: grep и awk. Команда grep фильтрует строки, содержащие определенное слово, а awk может извлекать конкретные столбцы из этих строк.
Сначала давайте посмотрим, как можно отфильтровать наш файл Grepable, чтобы отобразить только строки, содержащие слово "open":
grep "open" grepable_scan.txt
Эта команда выводит строку, содержащую хост и его открытые порты.
Host: 127.0.0.1 (localhost) Ports: 22/open/tcp//ssh///, 8080/open/tcp//http-proxy///
Теперь мы хотим извлечь только IP-адрес. В формате Grepable IP-адрес всегда является вторым «словом» (или столбцом) в строке. Мы можем передать (|) вывод grep в awk и указать ему вывести второй столбец ($2).
Выполните следующую команду, чтобы извлечь IP-адрес и сохранить его в новый файл open_hosts.txt:
grep "open" grepable_scan.txt | awk '{print $2}' > open_hosts.txt
Давайте проверим содержимое нашего нового файла:
cat open_hosts.txt
Вы должны увидеть только IP-адрес:
127.0.0.1
Освоив эту простую комбинацию команд, вы сможете быстро анализировать огромные файлы сканирования и извлекать именно те цели, которые вам нужны для следующего этапа вашей оценки.
Резюме
В этой лабораторной работе вы узнали, как эффективно документировать и управлять результатами сканирования Nmap, используя различные форматы вывода. Вы изучили формат Normal (-oN) для чтения человеком, формат Grepable (-oG) для парсинга через командную строку и формат XML (-oX) для интеграции с другими инструментами. Наконец, вы попрактиковались в использовании утилит обработки текста Linux, таких как grep и awk, для извлечения конкретной информации о целях из файлов Grepable. Эти навыки необходимы для организации данных и оптимизации рабочих процессов при проведении оценок безопасности.



