Сканирование портов с помощью Masscan

NmapBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы научитесь использовать Masscan — высокопроизводительный сканер TCP-портов — для эффективной сетевой разведки. Вы получите практический опыт, установив Masscan из исходного кода, настроив параметры сканирования, выполнив проверку диапазонов частных сетей и проанализировав полученные данные.

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

Установка Masscan из исходного кода

На первом этапе вы скомпилируете и установите Masscan. Masscan — это невероятно быстрый сканер портов, способный просканировать весь интернет за считанные минуты. Мы установим его из исходного кода, чтобы гарантировать использование самой актуальной версии. Необходимые инструменты сборки и библиотеки уже предустановлены в вашей среде.

Для начала убедитесь, что вы находитесь в директории ~/project, которая является рабочим пространством для этой лабораторной работы.

cd ~/project

Затем загрузите исходный код Masscan из официального репозитория на GitHub с помощью git.

git clone https://github.com/robertdavidgraham/masscan --depth 1

Эта команда создаст новую директорию masscan, содержащую исходный код. Перейдите в эту директорию.

cd masscan

Теперь скомпилируйте исходный код с помощью команды make. Эта команда считывает файл Makefile в директории и собирает исполняемый бинарный файл.

make

После завершения компиляции исполняемый файл masscan появится в директории bin. Вы можете проверить успешность сборки, узнав версию программы.

./bin/masscan --version

Вы должны увидеть вывод, похожий на этот:

Masscan version 1.3.9-integration ( https://github.com/robertdavidgraham/masscan )
Compiled on: Aug 29 2025 11:15:09
Compiler: gcc 11.4.0
OS: Linux
CPU: x86 (64 bits)
GIT version: unknown

Наконец, чтобы команда masscan была доступна во всей системе, установите её в стандартное расположение, например в /usr/local/bin. Предоставленный Makefile включает цель install, которая сделает это за вас.

sudo make install

Эта команда копирует бинарный файл masscan в /usr/local/bin/, который находится в системном пути PATH. Теперь вы можете запускать Masscan из любой директории.

Проверьте установку:

masscan --version

Если вы видите номер версии, значит Masscan установлен правильно.

Определение целевого диапазона

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

Мы создадим файл со списком целевых диапазонов. Сначала убедитесь, что вы находитесь в основной директории проекта.

cd ~/project

Теперь воспользуйтесь текстовым редактором nano, чтобы создать файл с именем targets.txt.

nano targets.txt

В редакторе nano добавьте следующие небольшие IP-диапазоны для демонстрации, каждый с новой строки. Эти диапазоны записаны в нотации CIDR (Classless Inter-Domain Routing), которая является компактным способом представления блока IP-адресов.

192.168.1.0/24
172.17.0.0/24
10.0.0.0/24

Чтобы сохранить файл в nano, нажмите Ctrl+O, затем Enter для подтверждения имени файла. Чтобы выйти из nano, нажмите Ctrl+X.

После сохранения файла вы можете проверить его содержимое с помощью команды cat.

cat targets.txt

На экране должны отобразиться три введенных вами диапазона CIDR.

192.168.1.0/24
172.17.0.0/24
10.0.0.0/24

Этот файл послужит входными данными для Masscan, указывая программе, какие сети следует просканировать на следующем этапе. Эти небольшие диапазоны (каждый содержит всего 256 IP-адресов) позволят завершить сканирование очень быстро, обычно менее чем за минуту.

Запуск высокоскоростного сканирования портов

Теперь, когда Masscan установлен и цели определены, вы готовы к сканированию портов. На этом этапе вы выполните демонстрационное сканирование распространенных портов в заданных диапазонах IP-адресов.

Убедитесь, что вы находитесь в директории ~/project, где расположен файл targets.txt.

cd ~/project

Теперь выполните следующую команду masscan. Для этой команды требуется sudo, так как Masscan использует «сырые» сокеты (raw sockets) для отправки пакетов, что требует повышенных привилегий.

sudo masscan -p22,80,443,8080 -iL targets.txt --rate 1000 -oG scan_results.gnmap

Разберем параметры команды:

  • -p22,80,443,8080: Указывает порты для сканирования (SSH, HTTP, HTTPS и альтернативный HTTP). Такой сфокусированный подход ускоряет работу.
  • -iL targets.txt: Предписывает Masscan считывать целевые IP-диапазоны из файла targets.txt.
  • --rate 1000: Устанавливает скорость передачи пакетов на уровне 1000 пакетов в секунду. Это безопасная скорость для лабораторной среды.
  • -oG scan_results.gnmap: Сохраняет результаты в формате «grepable» (удобном для поиска) в файл scan_results.gnmap. Этот формат легко обрабатывать инструментами командной строки.

Во время работы Masscan будет отображать прогресс. Благодаря небольшим диапазонам целей сканирование должно завершиться менее чем за минуту.

Starting masscan 1.3.9-integration (http://bit.ly/14GZzcT) at 2025-08-29 03:20:16 GMT
Initiating SYN Stealth Scan
Scanning 768 hosts [4 ports/host]

По завершении сканирования в вашей директории появится новый файл scan_results.gnmap. Вы можете просмотреть его содержимое с помощью команды cat.

cat scan_results.gnmap

В выводе будут перечислены все хосты с обнаруженными открытыми портами. Поскольку мы сканируем частные диапазоны внутри контейнерной среды, вы можете обнаружить открытые порты в сети Docker bridge. Любые найденные открытые порты будут отображены в формате, похожем на этот:

## Masscan 1.3.9-integration scan initiated Fri Aug 29 03:20:16 2025
## Ports scanned: TCP(4;22-22,80-80,443-443,8080-8080) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Timestamp: 1756437619   Host: 172.17.0.1 ()     Ports: 22/open/tcp//ssh//
## Masscan done at Fri Aug 29 03:20:31 2025

Результаты показывают, что мы просканировали 768 хостов по 4 конкретным портам (22, 80, 443, 8080) и завершили процесс примерно за 15 секунд. В данном примере Masscan обнаружил один открытый порт — SSH (порт 22) на шлюзе Docker bridge по адресу 172.17.0.1. Это демонстрирует способность Masscan быстро находить активные службы в сетевых диапазонах.

Ключевые моменты формата вывода:

  • Временная метка (Timestamp) показывает, когда было сделано каждое обнаружение.
  • Формат Host: IP () Ports: port/status/protocol//service// обеспечивает четкую идентификацию службы.
  • Masscan нашел службу SSH, работающую на мосту Docker, что является типичным результатом для контейнеризированных сред.

Анализ открытых портов

После завершения сканирования следующим шагом является анализ результатов для выявления открытых портов. Файл scan_results.gnmap содержит всю необходимую информацию, но её можно обработать другими инструментами для извлечения наиболее важных данных.

Сначала убедитесь, что вы находитесь в директории ~/project.

cd ~/project

Формат .gnmap специально разработан для удобного парсинга. Чтобы быстро найти все строки, соответствующие открытым портам, можно использовать команду grep.

grep "open" scan_results.gnmap

Эта команда фильтрует файл и выводит только те строки, которые содержат слово "open". Результат будет выглядеть примерно так, перечисляя каждый хост и его открытые порты:

Timestamp: 1756437619   Host: 172.17.0.1 ()     Ports: 22/open/tcp//ssh//

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

grep -oP '\d+/open' scan_results.gnmap | sort | uniq -c

Разберем эту мощную однострочную команду:

  • grep -oP '\d+/open': Извлекает только совпадающие части (-o) строк, соответствующих регулярному выражению Perl (-P), которое ищет цифры, за которыми следует /open.
  • sort: Сортирует список открытых портов по алфавиту, группируя одинаковые порты вместе.
  • uniq -c: Объединяет соседние одинаковые строки и добавляет в начало счетчик (-c) того, сколько раз встретилась каждая строка.

Пример вывода может выглядеть так, указывая на то, что у одного хоста открыт порт 22 (SSH):

      1 22/open

Этот метод очень полезен для получения высокоуровневого обзора сервисов, доступных в сети. В данном случае мы видим, что SSH — единственная служба, обнаруженная при сканировании, что типично для сетей Docker bridge, где шлюз предоставляет доступ по SSH.

Экспорт результатов сканирования

Для составления отчетов или дальнейшей обработки часто требуется экспортировать результаты сканирования в более структурированный формат. На этом этапе вы преобразуете результаты сканирования в файл CSV (значения, разделенные запятыми), который легко импортируется в электронные таблицы.

Убедитесь, что вы находитесь в директории ~/project.

cd ~/project

Мы будем использовать комбинацию grep и sed для парсинга файла .gnmap и создания чистого CSV-файла. sed — это мощный потоковый редактор, который может извлекать и переформатировать данные с помощью регулярных выражений.

Выполните следующую команду для создания scan_results.csv.

grep "open" scan_results.gnmap | sed 's/.*Host: \([^ ]*\) .*Ports: \([0-9]*\)\/open\/\([^/]*\).*/\1,\2,\3/' > scan_results.csv

Вот как работает эта команда:

  • grep "open" scan_results.gnmap: Сначала фильтрует строки с открытыми портами.
  • sed 's/.*Host: \([^ ]*\) .*Ports: \([0-9]*\)\/open\/\([^/]*\).*/\1,\2,\3/': Использует регулярное выражение для извлечения IP-адреса, номера порта и протокола из формата вывода Masscan и форматирует их через запятую.
  • > scan_results.csv: Перенаправляет итоговый вывод в новый файл с именем scan_results.csv.

Теперь вы можете просмотреть созданный CSV-файл.

cat scan_results.csv

Вывод будет представлять собой чистый список хостов и их открытых портов, разделенных запятыми.

172.17.0.1,22,tcp

Такой структурированный формат идеально подходит для обмена данными с коллегами, импорта в базы данных или использования в качестве входных данных для других инструментов безопасности. Формат CSV наглядно показывает IP-адрес, номер порта и протокол.

Резюме

В ходе этой лабораторной работы вы успешно освоили основы использования Masscan для высокоскоростного сетевого сканирования. Вы отработали весь рабочий процесс: от установки инструмента из исходного кода до анализа и экспорта результатов.

Вы получили практический опыт в следующих областях:

  • Компиляция и установка программного обеспечения из исходного кода в Linux.
  • Определение целей сканирования с использованием нотации CIDR.
  • Выполнение сканирования портов с заданными параметрами портов, скорости и формата вывода.
  • Анализ результатов сканирования с помощью инструментов командной строки, таких как grep, sort и uniq.
  • Экспорт данных в структурированный формат CSV для отчетности.

Эти навыки закладывают прочный фундамент для проведения сетевой разведки быстрым, эффективным и ответственным способом.