Привет, коллеги! Если вы читаете эти строки, значит, вас, как и меня, манят неизведанные глубины сетей. Возможно, вы системный администратор, управляющий сотнями или тысячами машин, пентестер, ищущий открытые двери в инфраструктуре, или просто любознательный энтузиаст, желающий понять, как устроен этот цифровой мир. В любом случае, рано или поздно перед вами встает задача: быстро и эффективно просканировать большие диапазоны IP-адресов на предмет открытых портов. И тут на сцену выходит наш сегодняшний герой – Masscan.
Забудьте о медленных, методичных сканированиях, которые длятся часами или даже днями. Masscan – это настоящий демон скорости, способный опросить всю сеть IPv4 менее чем за 5 минут (при наличии достаточно широкого канала, конечно)! Звучит интригующе? Еще бы! В этой статье мы с вами, как два товарища по цеху, разберем Masscan по косточкам: от самых основ и базовых команд до практических примеров и даже небольших скриптов. Цель – сделать так, чтобы после прочтения вы могли уверенно пользоваться этим мощным инструментом для своих задач.
Так что наливайте себе любимый напиток, устраивайтесь поудобнее, открывайте терминал – и погнали исследовать мир Masscan вместе!
Оглавление
-
Что такое Masscan и почему он такой быстрый?
Masscan vs Nmap: Когда использовать кого?
Установка Masscan: Готовим наш инструмент
-
Linux (Debian/Ubuntu, RHEL/CentOS/Fedora)
macOS
Windows (через WSL)
Сборка из исходников (для продвинутых)
-
Stateless (асинхронное) сканирование
Контроль скорости (—rate) – Важнейший параметр!
Рандомизация целей
-
Указание целей (IP-адреса, диапазоны, сети, файлы)
Указание портов (-p)
Управление скоростью (—rate)
Выбор сетевого интерфейса (-e)
Указание исходящего IP и порта (—source-ip, —source-port)
Форматы вывода (-oX, -oG, -oJ, -oL)
Другие полезные флаги (—wait, —banners, —exclude, —excludefile)
-
Пример 1: Сканирование одного хоста на несколько портов
Пример 2: Сканирование подсети на стандартные веб-порты
Пример 3: Сканирование большой сети на один порт (SSH)
Пример 4: Сканирование с использованием файла исключений
Пример 5: Сканирование диапазона на ВСЕ порты (Осторожно!)
Пример 6: Сохранение результатов в разных форматах
Пример 7: Попытка сбора баннеров (с оговорками)
-
Bash-скрипт: Сканирование списка целей из файла
Bash-скрипт: Простая обработка вывода (извлечение IP и портов)
Интеграция Masscan и Nmap: Скорость + Глубина
-
Использование файлов конфигурации (—conf)
Пауза и возобновление сканирования (—resume)
Шардинг (разделение) сканирования (—shards)
Решение частых проблем (права, пропуск пакетов)
Что такое Masscan и почему он такой быстрый?
Masscan – это детище Роберта Дэвида Грэма (Robert David Graham), известного эксперта по безопасности. Он позиционируется как «самый быстрый сканер портов в Интернете». И это не просто маркетинговый ход. Ключевое отличие Masscan от традиционных сканеров, таких как Nmap (о котором мы еще поговорим), заключается в его подходе к отправке и приему пакетов.
Представьте себе традиционный сканер (вроде Nmap по умолчанию). Он отправляет пакет (например, SYN-запрос на определенный порт) на целевой хост, а затем *ждёт* ответа (SYN-ACK, RST или таймаут), прежде чем отправить следующий пакет или перейти к следующему хосту. Это называется **stateful** сканированием – сканер отслеживает состояние каждого соединения. Это надежно, позволяет проводить глубокий анализ ответа, но это медленно, особенно при сканировании тысяч или миллионов адресов.
Masscan же использует **stateless** (или асинхронный) подход. Он работает скорее как «огнемёт»:
-
Безудержная отправка: Masscan генерирует и отправляет TCP SYN-пакеты (по умолчанию) на целевые IP и порты с максимально возможной скоростью, которую вы ему зададите (или которую выдержит ваша сеть и система). Он *не ждет* ответа после отправки каждого пакета.
Независимый прием: Параллельно с отправкой, Masscan слушает сетевой интерфейс на предмет входящих пакетов (SYN-ACK от открытых портов или RST от закрытых).
Сопоставление на лету: Когда приходит ответный пакет (например, SYN-ACK), Masscan быстро извлекает из него информацию (IP-адрес источника, порт источника, TCP sequence number) и сопоставляет ее со списком отправленных запросов, чтобы понять, какой именно порт на каком хосте ответил. Для этого он использует специальные техники кодирования информации в исходящих пакетах.
Этот асинхронный подход позволяет Masscan достигать скоростей в миллионы пакетов в секунду. Он не тратит время на ожидание ответа для каждого отдельного зонда. Именно поэтому он способен сканировать огромные адресные пространства за считанные минуты.

Однако у такой скорости есть и обратная сторона медали, о которой мы поговорим дальше.
Masscan vs Nmap: Когда использовать кого?
Это частый вопрос у новичков. Nmap – это швейцарский нож сетевого сканирования. Он умеет огромное количество вещей: разные типы сканирования (TCP Connect, SYN, UDP, Xmas, FIN и т.д.), определение версий служб, определение ОС, выполнение скриптов NSE для поиска уязвимостей и многое другое. Nmap – это инструмент для *глубокого*, детального исследования одного или нескольких хостов.
Masscan же – это инструмент для *широкого*, но *поверхностного* исследования. Его главная задача – максимально быстро найти *открытые порты* на *большом количестве* хостов. Он не предназначен для определения версий служб (хотя есть экспериментальная опция `—banners`, она ограничена) или запуска сложных скриптов.
Вот краткая таблица сравнения:
Параметр | Masscan | Nmap |
---|---|---|
Основное назначение | Быстрое обнаружение открытых портов на больших сетях | Детальное сканирование хостов, определение служб, ОС, уязвимостей |
Скорость | Очень высокая (миллионы пакетов/сек) | Низкая/Средняя (зависит от типа сканирования и опций) |
Тип сканирования по умолчанию | TCP SYN (Stateless) | TCP SYN (Stateful) для root, TCP Connect для non-root |
Точность | Может пропускать порты при слишком высокой скорости или плохом качестве сети | Высокая (stateful подход надежнее) |
Определение версий/ОС | Ограниченно (--banners ) / Нет | Отлично / Отлично |
Поддержка скриптов | Нет | Обширная (NSE) |
Сложность использования | Проще для базового сканирования портов | Более сложный из-за множества опций |
Идеальный сценарий | Первичная разведка больших сетей (весь интернет, большие корпоративные сети), быстрый поиск конкретного открытого порта | Глубокое сканирование конкретных хостов/подсетей, пентест, аудит безопасности |
Вывод: Masscan и Nmap не взаимозаменяемы, а скорее дополняют друг друга. Часто используется связка: сначала Masscan быстро находит «интересные» хосты с открытыми портами в большой сети, а затем Nmap используется для детального изучения этих конкретных хостов.
Установка Masscan: Готовим наш инструмент
Прежде чем мы начнем сканировать, нам нужно установить Masscan. К счастью, это довольно просто на большинстве популярных систем.
Установка в Linux
В большинстве современных дистрибутивов Linux Masscan доступен в стандартных репозиториях.
Debian / Ubuntu и производные:
sudo apt update
sudo apt install masscan -y
RHEL / CentOS / Fedora:
# Для Fedora
sudo dnf install masscan -y
# Для RHEL/CentOS (может потребоваться репозиторий EPEL)
sudo yum install epel-release -y # Если EPEL еще не установлен
sudo yum install masscan -y
После установки проверьте, что все работает:
masscan --version
Установка в macOS
Самый простой способ установить Masscan на macOS – использовать менеджер пакетов Homebrew.
Если у вас еще нет Homebrew, установите его, следуя инструкциям на официальном сайте. Затем выполните в терминале:
brew install masscan
Проверяем:
masscan --version
Установка в Windows (через WSL)
Нативно под Windows Masscan работает не очень хорошо из-за особенностей сетевого стека и драйверов (особенно с кастомным стеком TCP/IP, который Masscan использует для скорости). Настоятельно рекомендуется использовать Windows Subsystem for Linux (WSL).
1. Установите WSL (рекомендуется WSL 2) и любой дистрибутив Linux (например, Ubuntu) из Microsoft Store. 2. Запустите ваш Linux-дистрибутив в WSL. 3. Выполните команды установки для Linux, как описано выше (например, `sudo apt update && sudo apt install masscan -y` для Ubuntu).
Существуют и скомпилированные `.exe` версии Masscan для Windows (можно найти на странице релизов GitHub или в других местах), но они могут требовать установки специальных драйверов (npcap/winpcap) и часто работают менее стабильно и медленнее, чем под Linux или macOS.
Сборка из исходников (для продвинутых)
Если вы хотите самую свежую версию или Masscan нет в репозиториях вашей системы, вы всегда можете собрать его из исходного кода. Для этого обычно требуется компилятор (gcc или clang) и библиотека для захвата пакетов (`libpcap-dev` или `libpcap-devel`).
1. Установите зависимости: * Debian/Ubuntu: `sudo apt install git gcc make libpcap-dev` * RHEL/CentOS/Fedora: `sudo yum install git gcc make libpcap-devel` 2. Клонируйте репозиторий:
git clone https://github.com/robertdavidgraham/masscan.git
cd masscan
3. Скомпилируйте и установите:
make -j$(nproc) # Используем все ядра для ускорения сборки
sudo make install
После этого исполняемый файл `masscan` должен появиться в `/usr/local/bin` (или другом месте, в зависимости от конфигурации `make install`).
Ключевые концепции Masscan
Чтобы эффективно использовать Masscan, важно понимать несколько ключевых концепций, лежащих в его основе.
Stateless (асинхронное) сканирование
Как мы уже упоминали, это сердце Masscan. Он не поддерживает полное состояние TCP-соединения для каждого зонда. Вместо этого он отправляет SYN-пакеты и просто слушает ответы SYN-ACK.
Плюсы: Невероятная скорость.
Минусы: * Потенциальная потеря пакетов: При очень высоких скоростях сканирования или при перегрузке сети (вашей или целевой) некоторые ответные пакеты могут быть потеряны. Сетевое оборудование (фаерволы, роутеры) или сама операционная система могут отбросить пакеты, если буферы переполнены. Masscan не будет повторно отправлять запрос, если не получил ответа (в отличие от stateful сканеров, которые могут делать ретрансмиты). Это означает, что Masscan может *пропустить* некоторые открытые порты, особенно на нестабильных сетях или при агрессивных скоростях. * Завершение соединения: Masscan по умолчанию отправляет RST-пакет после получения SYN-ACK, чтобы немедленно закрыть полуоткрытое соединение и не оставлять его висеть в системе цели. Это стандартное поведение для SYN-сканирования.
Контроль скорости (—rate) – Важнейший параметр!
Это, пожалуй, самый важный параметр в Masscan. Он определяет, сколько пакетов в секунду будет отправлять сканер.
--rate
Почему это так важно? * Производительность: Слишком низкая скорость сведет на нет главное преимущество Masscan. Слишком высокая скорость может перегрузить ваш собственный сетевой канал, процессор, или, что еще хуже, сетевое оборудование на пути к цели или саму цель. * Точность: Как уже говорилось, слишком высокая скорость увеличивает вероятность потери ответных пакетов и, следовательно, пропуска открытых портов. * Легальность и этика: Сканирование с очень высокой скоростью может быть расценено как DoS-атака (Denial of Service). Это может привести к блокировке вашего IP-адреса, жалобам вашему провайдеру или даже юридическим последствиям, если вы сканируете цели без разрешения. Всегда будьте ответственны и начинайте с низких скоростей!
Какую скорость выбрать? Это зависит от многих факторов:
-
Ваша пропускная способность сети (Upload).
Мощность вашего процессора.
Производительность сетевой карты и ее драйверов.
Характеристики сети, которую вы сканируете.
Наличие и настройки файрволов/IPS на пути.
Рекомендации:
* Начните с малого: Попробуйте --rate 100
или --rate 1000
. Посмотрите на вывод, проверьте загрузку сети и процессора.
* Локальная сеть: В своей локальной сети (если она гигабитная) вы можете попробовать значительно более высокие скорости, например --rate 10000
или даже --rate 100000
, но следите за нагрузкой на коммутаторы и конечные хосты.
* Интернет: При сканировании внешних сетей будьте очень осторожны. Скорость 1000
пакетов/сек – это уже довольно заметно. 10000
– это агрессивно. Скорости выше 100000
могут быстро привести к проблемам. Автор Masscan утверждает, что для сканирования всего интернета нужна скорость около 10 миллионов пакетов/сек, но это требует очень специфической инфраструктуры и разрешений.
* Экспериментируйте: Постепенно увеличивайте скорость и сравнивайте результаты (количество найденных портов) и наблюдайте за стабильностью. Найдите баланс между скоростью и точностью/безопасностью.
По умолчанию Masscan использует скорость 100 пакетов/сек, что довольно консервативно.

Рандомизация целей
В отличие от Nmap, который по умолчанию сканирует хосты последовательно (1.1.1.1, затем 1.1.1.2, и т.д.), Masscan рандомизирует порядок сканирования IP-адресов и портов во всем заданном диапазоне. Это делается для того, чтобы:
-
Избежать концентрации трафика на одной подсети в один момент времени, что может перегрузить локальное оборудование или вызвать срабатывание систем обнаружения вторжений (IPS/IDS), настроенных на обнаружение последовательного сканирования.
Обеспечить более равномерное распределение нагрузки по всему диапазону сканирования.
Эта рандомизация является неотъемлемой частью архитектуры Masscan и не может быть отключена.
Базовый синтаксис и основные команды Masscan
Общий синтаксис команды Masscan выглядит так:
masscan [цели] -p[порты] [опции]
Давайте разберем основные компоненты.
Указание целей (IP-адреса, диапазоны, сети, файлы)
Цели можно задавать несколькими способами:
-
Один IP-адрес:
masscan 192.168.1.1 ...
Список IP-адресов:
masscan 192.168.1.1 10.0.0.5 8.8.8.8 ...
Диапазон IP-адресов:
masscan 192.168.1.1-192.168.1.254 ...
Сеть в CIDR-нотации:
masscan 10.0.0.0/8 ... # Огромный диапазон! Будьте осторожны.
masscan 192.168.1.0/24 ... # Стандартная домашняя/офисная сеть
Случайные адреса (для тестирования интернета):
masscan 0.0.0.0/0 ... # Весь IPv4 диапазон! Требует особой осторожности и разрешений!
Чтение целей из файла (-iL): Полезно, если у вас есть большой список IP-адресов или сетей.
# Содержимое файла targets.txt:
# 192.168.1.1
# 192.168.2.0/24
# 10.10.0.5-10.10.0.10
masscan -iL targets.txt ...
Указание портов (-p)
Порты для сканирования задаются с помощью опции -p
. Обратите внимание, что между -p
и номером порта (или диапазоном) не должно быть пробела.
-
Один порт:
masscan [цели] -p80 ... # Сканировать только порт 80 (HTTP)
Список портов через запятую:
masscan [цели] -p80,443,22 ... # Сканировать порты 80, 443, 22
Диапазон портов через дефис:
masscan [цели] -p1-1024 ... # Сканировать все порты от 1 до 1024
Комбинация списков и диапазонов:
masscan [цели] -p21-23,80,443,8000-8100 ...
Все порты (0-65535):
masscan [цели] -p0-65535 ... # Сканировать все возможные порты
UDP-порты (—udp-ports): Masscan в первую очередь TCP-сканер, но он может сканировать и UDP-порты. Это *значительно* медленнее и менее надежно, так как UDP – протокол без установления соединения, и открытые UDP-порты часто не отвечают, а закрытые могут отвечать ICMP Port Unreachable.
masscan [цели] --udp-ports 53,161 ... # Сканировать UDP порты 53 (DNS) и 161 (SNMP)
Управление скоростью (—rate)
Мы уже обсудили важность этого параметра. Синтаксис прост:
masscan [цели] -p[порты] --rate 1000 # Установить скорость 1000 пакетов/сек
Помните: Начинайте с малого и увеличивайте осторожно!
Выбор сетевого интерфейса (-e или —adapter)
Если на вашем компьютере несколько сетевых интерфейсов (например, Ethernet, Wi-Fi, VPN), Masscan может попытаться угадать, какой использовать. Но лучше указать его явно с помощью опции -e
или --adapter
.
masscan [цели] -p[порты] --rate [скорость] -e eth0 # Использовать интерфейс eth0
masscan [цели] -p[порты] --rate [скорость] --adapter en0 # Использовать интерфейс en0 (часто на macOS)
Вы можете увидеть список доступных интерфейсов командой `ip addr` (Linux) или `ifconfig` (macOS/Linux).
Указание исходящего IP и порта (—source-ip, —source-port)
Иногда вам может потребоваться отправлять пакеты с определенного IP-адреса (если на вашем интерфейсе их несколько) или даже с определенного исходящего порта (хотя Masscan обычно выбирает их динамически).
-
—source-ip
masscan [цели] -p[порты] --rate [скорость] -e eth0 --source-ip 192.168.1.100
—source-port <порт>: Задает статический порт источника. Обычно это не требуется и может даже мешать, так как ограничивает количество одновременных «псевдо-соединений». Используйте с осторожностью.
masscan [цели] -p[порты] --rate [скорость] --source-port 44444
Форматы вывода (-oX, -oG, -oJ, -oL)
По умолчанию Masscan выводит результаты в текстовом формате прямо в консоль. Однако для дальнейшей обработки или сохранения удобнее использовать стандартизированные форматы файлов:
-
-oX <файл.xml>: Вывод в формате XML, совместимом с Nmap. Очень удобно для импорта в другие инструменты или парсинга скриптами.
masscan [цели] -p[порты] --rate [скорость] -oX results.xml
-oG <файл.gnmap>: Вывод в формате Grepable Nmap. Каждая строка содержит информацию об одном хосте или порте, легко обрабатывается утилитами `grep`, `awk`, `cut`.
masscan [цели] -p[порты] --rate [скорость] -oG results.gnmap
-oJ <файл.json>: Вывод в формате JSON. Удобен для парсинга скриптами на Python, JavaScript и т.д.
masscan [цели] -p[порты] --rate [скорость] -oJ results.json
-oL <файл.list>: Простой списочный формат. Каждая строка содержит информацию об одном найденном открытом порте.
masscan [цели] -p[порты] --rate [скорость] -oL results.list
Вы можете использовать несколько форматов вывода одновременно:
masscan 192.168.1.0/24 -p80,443 --rate 1000 -oX scan.xml -oG scan.gnmap
Другие полезные флаги
-
—wait <секунды>: Время ожидания после завершения отправки всех пакетов для сбора оставшихся ответов. По умолчанию 10 секунд. Увеличение этого значения может помочь собрать больше ответов на медленных или загруженных сетях, но замедлит общее время сканирования.
masscan [цели] -p[порты] --rate [скорость] --wait 30 # Ждать 30 секунд после отправки
—banners: Экспериментальная функция для попытки захвата баннеров (информации, которую сервис отправляет при подключении). Masscan устанавливает короткое TCP-соединение после обнаружения открытого порта (SYN-ACK -> ACK), читает первые несколько байт ответа и затем закрывает соединение (RST). Это не так надежно, как определение версий в Nmap, и может не сработать для многих сервисов или быть неполным. Также это замедляет сканирование. Используйте с осторожностью и не полагайтесь на это как на основной метод определения сервисов.
masscan [цели] -p22,80,443 --rate [скорость] --banners -oJ banner_results.json
—exclude masscan 192.168.1.0/24 -p1-1024 --rate 1000 --exclude 192.168.1.1 --exclude 192.168.1.100
—excludefile <файл_исключений>: Читает список IP-адресов, диапазонов или сетей для исключения из файла (формат такой же, как для `-iL`).
# Содержимое exclude.txt:
# 192.168.1.1
# 192.168.1.254
masscan 192.168.1.0/24 -p1-65535 --rate 5000 --excludefile exclude.txt -oL results.list
—open-only (или —open): Показывать только открытые порты (поведение по умолчанию).
—echo: Сохранить текущую конфигурацию в файл (например, `masscan.conf`) и выйти. Полезно для создания базового файла конфигурации.
masscan --echo > my_masscan_config.conf
Это основные параметры, которые вам понадобятся для начала работы. Полный список опций всегда можно посмотреть с помощью команды `masscan —help`.
Практические примеры использования Masscan
Теория – это хорошо, но практика – лучше! Давайте рассмотрим несколько типичных сценариев использования Masscan.
Важно: При выполнении следующих примеров (особенно на внешних сетях) всегда помните об этических соображениях и легальности. Если вы не уверены, сканируйте только те сети и хосты, на сканирование которых у вас есть явное разрешение.
Пример 1: Сканирование одного хоста на несколько популярных портов
Допустим, мы хотим проверить, открыты ли порты SSH (22), HTTP (80) и HTTPS (443) на хосте `192.168.1.1`. Мы находимся в локальной сети, поэтому можем позволить себе умеренную скорость, скажем, 1000 пкт/с.
sudo masscan 192.168.1.1 -p22,80,443 --rate 1000 -e eth0
(Не забывайте `sudo`, так как Masscan требует прав root для отправки сырых пакетов и прослушивания интерфейса в promiscuous mode).
Примерный вывод в консоли:
Starting masscan 1.3.2 (http://bit.ly/masscan) at 2024-09-16 10:30:00 GMT
-- Interfacing eth0...
-- Initializing parser...
-- Initializing fields...
-- Scanning 1 hosts [3 ports/host]
Discovered open port 80/tcp on 192.168.1.1
Discovered open port 443/tcp on 192.168.1.1
rate: 1000.00-kpps, 100.00% done, 0:00:00 remaining, found=2
Пример 2: Сканирование подсети на стандартные веб-порты
Теперь найдем все хосты в сети `192.168.1.0/24`, у которых открыты порты 80 (HTTP), 443 (HTTPS), 8080 (часто альтернативный HTTP) и 8443 (часто альтернативный HTTPS). Сохраним результаты в XML-файл для дальнейшего анализа.
sudo masscan 192.168.1.0/24 -p80,443,8080,8443 --rate 1500 -e eth0 -oX web_scan_results.xml
Masscan начнет сканирование. После завершения (обычно очень быстро для такой задачи) у вас будет файл `web_scan_results.xml` со списком хостов и открытых портов из указанного набора.
Пример 3: Сканирование большой сети на один порт (SSH)
Представим, что нам нужно быстро найти все машины с открытым SSH-портом (22) в большом диапазоне адресов, например, `10.0.0.0/16`. Это 65536 адресов. Здесь скорость Masscan особенно полезна.
Осторожно! Сканирование таких больших диапазонов, особенно если они вам не принадлежат, может быть опасно и незаконно. Этот пример приводится только для демонстрации возможностей Masscan.
Мы будем использовать умеренную скорость (например, 5000 пкт/с) и сохраним результаты в простой список.
sudo masscan 10.0.0.0/16 -p22 --rate 5000 -e eth0 -oL ssh_found.list --wait 20
Мы также добавили `—wait 20`, чтобы дать больше времени на получение ответов из такой большой сети.
Пример 4: Сканирование с использованием файла исключений
Допустим, мы хотим просканировать сеть `192.168.0.0/16` на наличие открытого порта 3389 (RDP), но нам нужно исключить некоторые важные серверы и подсети. Создадим файл `exclude_hosts.txt`:
# exclude_hosts.txt
192.168.1.1 # Наш шлюз
192.168.10.0/24 # Сеть разработки
192.168.100.50 # Важный сервер
Теперь запускаем Masscan:
sudo masscan 192.168.0.0/16 -p3389 --rate 2000 --excludefile exclude_hosts.txt -oG rdp_scan.gnmap
Masscan просканирует весь диапазон `/16`, но пропустит адреса, указанные в `exclude_hosts.txt`.
Пример 5: Сканирование диапазона на ВСЕ порты (Осторожно!)
Иногда требуется проверить абсолютно все TCP-порты (0-65535) на небольшом количестве хостов. Это очень «шумное» сканирование, которое генерирует много трафика и может быть легко обнаружено.
Используйте с большой осторожностью и только при необходимости и наличии разрешений!
sudo masscan 192.168.1.10-192.168.1.20 -p0-65535 --rate 10000 -oJ full_scan.json
Такое сканирование займет больше времени, чем сканирование только нескольких портов, даже с высокой скоростью, просто из-за огромного количества пакетов, которые нужно отправить (11 хостов * 65536 портов = ~720 тыс. пакетов).
Пример 6: Сохранение результатов в разных форматах
Мы хотим просканировать сеть `172.16.0.0/22` на порты 21 (FTP), 22 (SSH), 23 (Telnet) и сохранить результаты сразу в XML и Grepable форматах.
sudo masscan 172.16.0.0/22 -p21-23 --rate 3000 -oX scan_results.xml -oG scan_results.gnmap
После сканирования у вас будут два файла: `scan_results.xml` и `scan_results.gnmap` с одинаковыми результатами, но в разном представлении.
Пример 7: Попытка сбора баннеров (с оговорками)
Попробуем найти веб-серверы в сети `192.168.50.0/24` и захватить их HTTP-баннеры. Используем флаг `—banners` и сохраним в JSON.
sudo masscan 192.168.50.0/24 -p80,8080 --rate 1000 --banners -oJ web_banners.json
Откройте файл `web_banners.json` после сканирования. Вы увидите структуру JSON, где для каждого найденного порта будет поле `banner` (если удалось его получить). Например:
[
{ "ip": "192.168.50.10", "timestamp": "1663326000", "ports": [ {"port": 80, "proto": "tcp", "status": "open", "reason": "syn-ack", "ttl": 64,
"service": {"name": "http", "banner": "HTTP/1.1 200 OK\r\nServer: nginx/1.18.0\r\n..."}} ] }
,
{ "ip": "192.168.50.25", "timestamp": "1663326001", "ports": [ {"port": 8080, "proto": "tcp", "status": "open", "reason": "syn-ack", "ttl": 128,
"service": {"name": "http-proxy", "banner": "HTTP/1.0 403 Forbidden\r\nServer: squid/3.5.27\r\n..."}} ] }
]
Помните: Баннеры, полученные Masscan, могут быть обрезаны или вообще отсутствовать. Для надежного определения версий используйте Nmap (`nmap -sV`).

Скрипты с Masscan: Автоматизация рутины
Masscan отлично подходит для интеграции в скрипты автоматизации. Благодаря простым форматам вывода (особенно `-oL` и `-oG`) и возможности читать цели из файла (`-iL`), его легко встроить в ваши рабочие процессы.
Bash-скрипт: Сканирование списка целей из файла
Допустим, у нас есть файл `networks_to_scan.txt`, содержащий список сетей и IP:
# networks_to_scan.txt
10.1.1.0/24
10.1.2.0/24
172.17.5.10
Мы хотим просканировать все эти цели на наличие RDP (3389) и SMB (445) портов и сохранить результат.
#!/bin/bash
# Файл с целями
TARGET_FILE="networks_to_scan.txt"
# Порты для сканирования
PORTS="3389,445"
# Скорость сканирования
RATE="2500"
# Файл для вывода (Grepable)
OUTPUT_FILE="scan_$(date +%Y%m%d_%H%M%S).gnmap"
# Сетевой интерфейс (измените при необходимости)
INTERFACE="eth0"
# Проверка наличия файла с целями
if [ ! -f "$TARGET_FILE" ]; then
echo "Ошибка: Файл с целями '$TARGET_FILE' не найден!"
exit 1
fi
echo "Начинаем сканирование целей из $TARGET_FILE на порты $PORTS..."
echo "Скорость: $RATE пкт/с. Результаты будут сохранены в $OUTPUT_FILE"
# Запуск Masscan
sudo masscan -iL "$TARGET_FILE" -p"$PORTS" --rate "$RATE" -e "$INTERFACE" -oG "$OUTPUT_FILE" --wait 15
echo "Сканирование завершено. Результаты в файле: $OUTPUT_FILE"
# Дополнительно: показать количество найденных хостов
FOUND_HOSTS=$(grep -c "Status: Open" "$OUTPUT_FILE")
echo "Найдено открытых портов: $FOUND_HOSTS"
exit 0
Сохраните этот код в файл (например, `scan_targets.sh`), сделайте его исполняемым (`chmod +x scan_targets.sh`) и запустите (`./scan_targets.sh`). Скрипт выполнит сканирование и сообщит о результатах.
Bash-скрипт: Простая обработка вывода (извлечение IP и портов)
Часто после сканирования нам нужен просто список IP-адресов и открытых портов. Формат `-oG` идеально для этого подходит. Допустим, у нас есть файл `results.gnmap`:
# Masscan 1.3.2 scan initiated Tue Sep 17 11:00:00 2024
Host: 192.168.1.10 () Status: Up
Host: 192.168.1.15 () Status: Up
Host: 192.168.1.10 () Ports: 80/open/tcp////
Host: 192.168.1.22 () Status: Up
Host: 192.168.1.15 () Ports: 443/open/tcp////
Host: 192.168.1.22 () Ports: 22/open/tcp////
# Masscan done at Tue Sep 17 11:00:05 2024
Мы можем извлечь только строки с открытыми портами и вывести их в формате `IP:PORT` с помощью `grep` и `awk`:
#!/bin/bash
GNMAP_FILE="results.gnmap"
# Проверка наличия файла
if [ ! -f "$GNMAP_FILE" ]; then
echo "Ошибка: Файл '$GNMAP_FILE' не найден!"
exit 1
fi
echo "Извлечение IP:PORT из $GNMAP_FILE..."
# Использовать grep для выбора строк с "Ports:" и "open"
# Использовать awk для форматирования вывода
grep "Ports:" "$GNMAP_FILE" | grep "/open/" | awk '{print $2 ":" $4}' | sed 's|/open/tcp/.*||'
echo "Готово."
exit 0
Запуск этого скрипта (например, `parse_gnmap.sh`) на приведенном выше `results.gnmap` даст следующий вывод:
Извлечение IP:PORT из results.gnmap...
192.168.1.10:80
192.168.1.15:443
192.168.1.22:22
Готово.
Интеграция Masscan и Nmap: Скорость + Глубина
Это классический сценарий использования: Masscan быстро находит хосты с интересующими портами, а затем Nmap детально их исследует.
Сначала запустим Masscan, чтобы найти хосты с открытыми портами 80 и 443 в сети, и сохраним результат в формате `-oL` (простой список):
sudo masscan 192.168.1.0/24 -p80,443 --rate 1500 -oL masscan_web_raw.list
Файл `masscan_web_raw.list` будет выглядеть примерно так:
# Masscan 1.3.2 scan initiated Tue Sep 17 11:15:00 2024
open tcp 80 192.168.1.10 1663327000
open tcp 443 192.168.1.10 1663327001
open tcp 80 192.168.1.55 1663327002
# Masscan done at Tue Sep 17 11:15:05 2024
Теперь нам нужно извлечь уникальные IP-адреса из этого файла и передать их Nmap для сканирования версий (`-sV`) и стандартных скриптов (`-sC`).
#!/bin/bash
MASSCAN_LIST_FILE="masscan_web_raw.list"
NMAP_OUTPUT_XML="nmap_detailed_scan.xml"
NMAP_OUTPUT_NMAP="nmap_detailed_scan.nmap"
# Проверка наличия файла Masscan
if [ ! -f "$MASSCAN_LIST_FILE" ]; then
echo "Ошибка: Файл Masscan '$MASSCAN_LIST_FILE' не найден!"
exit 1
fi
echo "Извлечение уникальных IP из $MASSCAN_LIST_FILE..."
# Извлечь IP (4-е поле), отсортировать уникальные
TARGET_IPS=$(grep "open tcp" "$MASSCAN_LIST_FILE" | awk '{print $4}' | sort -u)
if [ -z "$TARGET_IPS" ]; then
echo "Не найдено открытых портов в файле Masscan. Завершение."
exit 0
fi
echo "Найденные хосты для детального сканирования Nmap:"
echo "$TARGET_IPS"
echo "--------------------------------------------------"
echo "Запуск Nmap для детального сканирования (версии и скрипты)..."
# Передаем список IP в Nmap через xargs или напрямую, если их не слишком много
# Опция -Pn нужна, так как мы уже знаем, что хосты доступны (раз Masscan их нашел)
# Опция -sV для определения версий
# Опция -sC для стандартных скриптов
# Опция -oX и -oN для сохранения результатов Nmap
echo "$TARGET_IPS" | sudo nmap -sV -sC -Pn -iL - -oX "$NMAP_OUTPUT_XML" -oN "$NMAP_OUTPUT_NMAP"
# Альтернативный вариант с xargs (если список IP очень большой):
# echo "$TARGET_IPS" | xargs sudo nmap -sV -sC -Pn -oX "$NMAP_OUTPUT_XML" -oN "$NMAP_OUTPUT_NMAP"
echo "Детальное сканирование Nmap завершено."
echo "Результаты сохранены в $NMAP_OUTPUT_XML и $NMAP_OUTPUT_NMAP"
exit 0
Этот скрипт сначала извлекает IP-адреса, найденные Masscan, а затем использует их как входные данные для Nmap, запуская более глубокое сканирование только на этих «живых» хостах. Это значительно экономит время по сравнению с запуском `nmap -sV -sC` на всей подсети.
Продвинутые фишки и советы
Когда вы освоите основы, можно заглянуть и в некоторые более продвинутые возможности и приемы.
Использование файлов конфигурации (—conf)
Если вы часто используете одни и те же параметры Masscan (например, определенную скорость, интерфейс, порты по умолчанию), удобно сохранить их в файл конфигурации. Masscan ищет файл `masscan.conf` в `/etc/`, `~/.masscan/` и в текущей директории, либо вы можете указать путь к файлу с помощью опции `—conf`.
Пример файла `my_scan.conf`:
# Мой стандартный конфиг для Masscan
rate = 10000.0
adapter = eth0
wait = 15
# Порты по умолчанию (можно переопределить в командной строке)
ports = 21,22,23,25,80,110,135,139,443,445,3389,8080
# Файл исключений по умолчанию
excludefile = /home/user/global_exclude.txt
Теперь вы можете запустить сканирование так:
sudo masscan 10.0.0.0/16 --conf my_scan.conf -oG big_scan.gnmap
# Или если хотите сканировать другие порты, просто укажите их:
sudo masscan 10.0.0.0/16 -p53,161 --conf my_scan.conf -oG dns_snmp_scan.gnmap
Параметры из командной строки имеют приоритет над параметрами в файле конфигурации.
Пауза и возобновление сканирования (—resume)
Для очень долгих сканирований (например, сканирование всего интернета или очень больших диапазонов) Masscan имеет встроенную функцию паузы и возобновления. Если вы прервете Masscan (Ctrl+C), он автоматически сохранит свое состояние в файл `paused.conf` (в текущей директории).
Чтобы возобновить сканирование с того места, где оно было остановлено, просто используйте опцию `—resume`:
sudo masscan --resume paused.conf
Masscan загрузит состояние из файла и продолжит сканирование. Убедитесь, что все остальные параметры (цели, порты, скорость и т.д.) были такими же, как при первоначальном запуске, или используйте тот же файл конфигурации.
Шардинг (разделение) сканирования (—shards)
Если у вас есть несколько машин или несколько сетевых интерфейсов, вы можете разделить задачу сканирования между ними для еще большего ускорения. Опция `—shards` позволяет указать, какую часть (шард) от общего объема работы должна выполнить данная инстанция Masscan.
Например, чтобы разделить сканирование на две части:
На машине/интерфейсе 1:
sudo masscan [цели] -p[порты] --rate [скорость] --shards 1/2 -oG shard1_results.gnmap
На машине/интерфейсе 2:
sudo masscan [цели] -p[порты] --rate [скорость] --shards 2/2 -oG shard2_results.gnmap
Здесь `1/2` означает «первый шард из двух», а `2/2` – «второй шард из двух». Masscan автоматически разделит диапазон целей и портов так, чтобы каждая инстанция сканировала свою уникальную часть. После завершения вам нужно будет объединить файлы результатов (`shard1_results.gnmap` и `shard2_results.gnmap`).
Решение частых проблем
-
Ошибка «permission denied» или «socket: Operation not permitted»: Masscan требует прав root для работы с сырыми сокетами. Запускайте команду через `sudo`.
Низкая скорость или пропуск портов:
* Попробуйте снизить значение `—rate`.
* Убедитесь, что вы явно указали правильный сетевой интерфейс с помощью `-e` или `—adapter`.
* Проверьте загрузку CPU и сети во время сканирования (`top`, `htop`, `iftop`, `nload`). Если они на 100%, ваша система не справляется с заданной скоростью.
* Попробуйте увеличить время ожидания с помощью `—wait`.
* На некоторых системах (особенно виртуальных машинах или с определенными драйверами) производительность сетевого стека может быть ограничена.
Masscan «зависает» или работает очень медленно:
* Возможно, задана слишком высокая скорость для вашего канала или системы. Снизьте `—rate`.
* Проверьте, нет ли проблем с сетью (потери пакетов).
* Убедитесь, что файрвол на вашей машине не блокирует исходящие SYN или входящие SYN-ACK/RST пакеты.
Предупреждения о «transmit timed out»: Это может указывать на то, что операционная система не успевает отправлять пакеты с заданной скоростью. Снизьте `—rate`.
Нет результатов (хотя порты точно открыты):
* Проверьте правильность указания целей и портов.
* Убедитесь, что файрвол на пути не блокирует ваши зонды или ответы на них.
* Попробуйте значительно снизить скорость (`—rate 100`) для теста.
* Убедитесь, что вы используете правильный интерфейс (`-e`).
Этические соображения и легальность
Это чрезвычайно важный раздел. Masscan – очень мощный инструмент, и, как и любой мощный инструмент, его можно использовать как во благо, так и во зло.
-
ВСЕГДА ПОЛУЧАЙТЕ РАЗРЕШЕНИЕ: Никогда не сканируйте сети, системы или IP-адреса, которые вам не принадлежат или на сканирование которых у вас нет явного письменного разрешения от владельца. Несанкционированное сканирование портов во многих юрисдикциях считается незаконным и может повлечь за собой серьезные последствия, включая юридическую ответственность и блокировку вашего IP-адреса.
БУДЬТЕ ОСТОРОЖНЫ СО СКОРОСТЬЮ: Как мы уже много раз говорили, высокая скорость сканирования Masscan может легко перегрузить целевые сети или хосты, что может быть расценено как DoS-атака (Denial of Service), даже если у вас не было такого намерения. Начинайте с низких скоростей и увеличивайте их постепенно и осознанно.
УВАЖАЙТЕ РЕСУРСЫ: Даже если у вас есть разрешение, избегайте чрезмерно агрессивного сканирования, которое может помешать нормальной работе целевых систем или сети.
ЗНАЙТЕ ЗАКОНЫ: Ознакомьтесь с законодательством вашей страны и региона, касающимся компьютерной безопасности и сетевого сканирования. То, что легально в одном месте, может быть незаконно в другом.
ИСПОЛЬЗУЙТЕ ОТВЕТСТВЕННО: Применяйте Masscan для легитимных целей: аудит безопасности собственных сетей, пентестинг с разрешения клиента, исследование сетей (опять же, с разрешения или на специально выделенных для этого платформах).
Помните: незнание закона не освобождает от ответственности. Ваша репутация и даже свобода могут зависеть от того, насколько ответственно вы подходите к использованию таких инструментов.
Цитата в тему
Инструменты сами по себе не хороши и не плохи. Все дело в том, как вы их используете. Молоток можно использовать, чтобы построить дом, а можно – чтобы разбить окно. Ответственность лежит на пользователе.
Неизвестный автор (часто приписывается различным деятелям в сфере технологий и безопасности)
Выводы
Ну что ж, коллеги, мы с вами прошли большой путь! От первого знакомства с Masscan до разбора его ключевых особенностей, синтаксиса, практических примеров и даже скриптов. Давайте подведем итог тому, что мы узнали:
-
Masscan – это король скорости в мире сканеров портов, благодаря своему асинхронному (stateless) подходу. Он идеален для быстрой разведки больших сетей.
Masscan не заменяет Nmap, а дополняет его. Masscan – для ширины (быстро найти открытые порты на множестве хостов), Nmap – для глубины (детальный анализ конкретных хостов).
Параметр
--rate
– ключевой. Управлять скоростью нужно осознанно, балансируя между производительностью, точностью и этическими/легальными соображениями. Начинать всегда стоит с малого.
Мы разобрали основной синтаксис: как указывать цели (IP, сети, файлы), порты (-p
), выбирать интерфейс (-e
), управлять скоростью (--rate
) и сохранять результаты в разных форматах (-oX
, -oG
, -oJ
, -oL
).
Рассмотрели практические примеры для различных сценариев: от сканирования одного хоста до больших сетей, использования исключений и попытки сбора баннеров.
Увидели, как Masscan легко интегрируется в скрипты (Bash) для автоматизации задач, включая популярную связку Masscan + Nmap.
Затронули продвинутые возможности, такие как файлы конфигурации, возобновление сканирования и шардинг.
И, самое главное, подчеркнули важность этичного и легального использования этого мощного инструмента. Сканируйте только то, на что имеете право!
Теперь у вас в руках есть знания и инструмент, способный значительно ускорить вашу работу по анализу и исследованию сетей. Masscan – это не просто сканер, это философия быстрого охвата, которая может быть невероятно полезна при правильном применении.
Надеюсь, эта статья была для вас полезной и понятной. Не бойтесь экспериментировать (в безопасных пределах!), пробовать разные опции и читать официальную документацию (`man masscan` или на GitHub). Чем больше вы практикуетесь, тем увереннее будете владеть этим инструментом.
Удачных вам сканирований и безопасных сетей! Если есть вопросы или дополнения – пишите в комментариях.
Попробуйте ScaniteX бесплатно!
Автоматизированная платформа для сканирования открытых портов и обнаружения активных сервисов в режиме онлайн.
Начните 24ч пробный период (промокод FREE10), чтобы протестировать все функции сканирования для безопасности вашего бизнеса.
Получить бесплатный триал
Комментарии