Masscan

Reconnaissance ★ Рекомендуемый v1.3.2 · 31.01.2021 не обновлялся >2 лет

Самый быстрый сканер портов в мире — способен сканировать весь интернет менее чем за 6 минут. Работает на собственном асинхронном TCP/IP стеке, не зависит от системных сокетов. Возможности: - Скорость до 10 миллионов пакетов в секунду - Совместим с синтаксисом Nmap по флагам и форматам вывода - Поддержка диапазонов IP, CIDR, исключений - Форматы вывода: list, binary, XML, grepable, JSON - Banner grabbing для базовых служб - Работает на Linux, macOS, Windows

v1.3.2
31.01.2021 current
Добавлен 19.06.2026 · Обновлён 19.06.2026 · Reconnaissance
Установка
# Ubuntu/Debian:
sudo apt install masscan

# Сборка из исходников:
git clone https://github.com/robertdavidgraham/masscan
cd masscan && make

# macOS:
brew install masscan

# Примеры:
# Сканировать диапазон по порту 80:
sudo masscan 192.168.1.0/24 -p80

# Быстрое сканирование популярных портов:
sudo masscan 10.0.0.0/8 -p80,443,22,8080 --rate=10000

# Сохранить результат в JSON:
sudo masscan 192.168.0.0/16 -p1-65535 -oJ output.json
переведено ИИ

unittests

MASSCAN: Массовый IP-сканер портов

Это сканер портов для масштаба Интернета. Он может сканировать весь Интернет менее чем за 5 минут, отправляя 10 миллионов пакетов в секунду, с одной машины.

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

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

ПРИМЕЧАНИЕ: masscan использует собственный стек TCP/IP. Что-либо, кроме простого сканирования портов, может конфликтовать с локальным стеком TCP/IP. Это означает, что вам нужно либо использовать параметр --src-ip для запуска с другого IP-адреса, либо использовать --src-port для настройки исходных портов, используемых masscan, а затем также настроить внутренний файрвол (такой как pf или iptables), чтобы он блокировал эти порты от остальной операционной системы.

Этот инструмент бесплатен, но вы можете внести пожертвование на его развитие: Bitcoin-кошелек: 1MASSCANaHUiyTtR3bJ2sLGuMw5kDBaj4T

Сборка

На Debian/Ubuntu процесс примерно следующий. У него нет никаких зависимостей, кроме компилятора C (такого как gcc или clang).

sudo apt-get --assume-yes install git make gcc
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make

Это поместит программу в подкаталог masscan/bin. Для установки (в Linux) выполните:

make install

Исходный код состоит из множества небольших файлов, поэтому сборка проходит гораздо быстрее с использованием многопоточного режима. Это требует более 2 ГБ на Raspberry Pi (и ломается), поэтому вы можете использовать меньшее число потоков, например -j4, а не все возможные.

make -j

Хоть Linux и является основной целевой платформой, код хорошо работает во многих других системах (Windows, macOS и т.д.). Вот дополнительная информация о сборке:

  • Windows с Visual Studio: используйте проект VS10
  • Windows с MinGW: просто введите make
  • Windows с cygwin: не будет работать
  • Mac OS X с XCode: используйте проект XCode4
  • Mac OS X с командной строкой: просто введите make
  • FreeBSD: введите gmake
  • другие: попробуйте просто скомпилировать все файлы вместе, cc src/*.c -o bin/masscan

В macOS, x86 бинарные файлы, похоже, работают так же быстро под эмуляцией ARM.

Использование

Использование аналогично nmap. Чтобы сканировать сеть на наличие определенных портов:

# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112

Это будет: * сканировать подсеть 10.x.x.x и подсети 2603:3001:2d00:da00::x * сканировать порт 80 и диапазон 8000 до 8100, или всего 102 порта, на обеих подсетях * выводить результат в <stdout>, который можно перенаправить в файл

Чтобы увидеть полный список опций, используйте функцию --echo. Она выводит текущую конфигурацию и завершает работу. Этот вывод можно использовать как входные данные обратно для программы:

# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112 --echo > xxx.conf
# masscan -c xxx.conf --rate 1000

Проверка баннеров

Masscan может делать больше, чем просто обнаруживать, открыты ли порты. Он также может устанавливать TCP-соединение и взаимодействовать с приложением на этом порте для получения простой информации о "баннере".

Masscan поддерживает проверку баннеров для следующих протоколов: * FTP * HTTP * IMAP4 * memcached * POP3 * SMTP * SSH * SSL * SMBv1 * SMBv2 * Telnet * RDP * VNC

Проблема заключается в том, что masscan содержит собственный стек TCP/IP, отдельный от системы, в которой он запущен. Когда локальная система получает SYN-ACK от целевого узла, она отвечает пакетом RST, который убивает соединение до того, как masscan успевает получить баннер.

Простейший способ предотвратить это -- назначить masscan отдельный IP-адрес. Это будет выглядеть как один из следующих примеров:

# masscan 10.0.0.0/8 -p80 --banners --source-ip 192.168.1.200
  # masscan 2a00:1450:4007:810::/112 -p80 --banners --source-ip 2603:3001:2d00:da00:91d7:b54:b498:859d

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

В некоторых случаях, например с WiFi, это невозможно. В таких случаях вы можете блокировать порт, который использует masscan. Это предотвратит просмотр пакета локальным стеком TCP/IP, но masscan по-прежнему будет его видеть, поскольку он обходит локальный стек. Для Linux это будет выглядеть так:

# iptables -A INPUT -p tcp --dport 61000 -j DROP
# masscan 10.0.0.0/8 -p80 --banners --source-port 61000

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

/proc/sys/net/ipv4/ip_local_port_range

В последней версии Kali Linux (2018-август) этот диапазон — от 32768 до 60999, поэтому вам следует выбирать порты либо ниже 32768, либо 61000 и выше.

Правило iptables действует только до следующей перезагрузки. Вам нужно найти способ сохранить конфигурацию в зависимости от вашего дистрибутива, например, с помощью iptables-save и/или iptables-persistent.

В Mac OS X и BSD есть аналогичные шаги. Чтобы узнать диапазоны, которых следует избегать, используйте команду, подобную следующей:

# sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last

В FreeBSD и более старых версиях MacOS используйте команду ipfw:

# sudo ipfw add 1 deny tcp from any to any 40000 in
# masscan 10.0.0.0/8 -p80 --banners --source-port 40000

В более новых версиях MacOS и OpenBSD используйте утилиту фильтрации пакетов pf. Отредактируйте файл /etc/pf.conf, чтобы добавить строку, подобную следующей:

block in proto tcp from any to any port 40000:40015

Затем, чтобы включить файрвол, выполните команду:

# pfctl -E

Если файрвол уже запущен, перезагрузите систему или перезагрузите правила с помощью следующей команды:

# pfctl -f /etc/pf.conf

Windows не отвечает пакетами RST, поэтому ни один из этих методов не требуется. Тем не менее, masscan по-прежнему лучше всего работает со своим собственным IP-адресом, поэтому вы должны запускать его таким способом, когда это возможно, даже если это не абсолютно необходимо.

То же самое необходимо для других проверок, например, проверки --heartbleed, которая является просто формой проверки баннеров.

Как просканировать всю Интернет-сеть

Хотя программа полезна для небольших внутренних сетей, она действительно разработана с расчётом на всю Интернет-сеть. Команда может выглядеть примерно так:

# masscan 0.0.0.0/0 -p0-65535

Сканирование всей Интернет-сети — плохая идея. Во-первых, некоторые части Интернет-сети плохо реагируют на сканирование. Во-вторых, некоторые сайты отслеживают сканирования и добавляют вас в чёрный список, из-за чего вы окажетесь за файрволом и потеряете доступ к полезным ресурсам Интернет-сети. Поэтому вам нужно исключить множество диапазонов. Чтобы занести диапазоны в чёрный список или исключить их, используйте следующий синтаксис:

# masscan 0.0.0.0/0 -p0-65535 --excludefile exclude.txt

Эта команда просто выводит результаты в командную строку. Скорее всего, вы захотите сохранить их в файл. Поэтому используйте что-то вроде:

# masscan 0.0.0.0/0 -p0-65535 -oX scan.xml

Это сохранит результаты в XML-файл, что позволит легко выгрузить их в базу данных или обработать иным образом.

Однако это будет выполняться на стандартной скорости 100 пакетов в секунду, и сканирование всей Интернет-сети займёт вечность. Нужно ускорить процесс следующим образом:

# masscan 0.0.0.0/0 -p0-65535 --max-rate 100000

Это увеличивает скорость до 100 000 пакетов в секунду, что позволит просканировать всю Интернет-сеть (за вычетом исключённых диапазонов) примерно за 10 часов на один порт (или за 655 360 часов, если сканировать все порты).

Стоит обратить внимание на то, что все эти опции командной строки совместимы с nmap. Кроме того, для вас автоматически устанавливаются «невидимые» опции, совместимые с nmap: -sS -Pn -n --randomize-hosts --send-eth. Аналогичным образом формат XML-файла вдохновлён nmap. Разумеется, существует множество различий, поскольку асинхронная природа программы приводит к принципиально другому подходу к решению задачи.

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

# My Scan
rate =  100000.00
output-format = xml
output-status = all
output-filename = scan.xml
ports = 0-65535
range = 0.0.0.0-255.255.255.255
excludefile = exclude.txt

Чтобы использовать этот файл конфигурации, укажите опцию -c:

# masscan -c myscan.conf

Это также упрощает повторение сканирования.

По умолчанию masscan загружает файл конфигурации /etc/masscan/masscan.conf. Любые последующие параметры конфигурации перезаписывают значения из этого файла конфигурации по умолчанию. Именно туда я помещаю свой параметр «excludefile», чтобы никогда о нём не забывать — он просто работает автоматически.

Получение результатов

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

  1. xml: просто используйте параметр -oX <имя_файла>. Или используйте параметры --output-format xml и --output-filename <имя_файла>.

  2. binary (двоичный): это собственный формат masscan. Он создаёт значительно меньшие файлы, чтобы при сканировании Интернет-сети не закончилось место на диске. Однако такие файлы необходимо обрабатывать. Команда --readscan считывает двоичные файлы результатов сканирования. Использование --readscan совместно с опцией -oX создаст XML-версию файла результатов.

  3. grepable (фильтруемый): это реализация формата вывода Nmap -oG, который легко обрабатывается инструментами командной строки. Просто используйте параметр -oG <имя_файла>. Или используйте параметры --output-format grepable и --output-filename <имя_файла>.

  4. json: сохраняет результаты в формате JSON. Просто используйте параметр -oJ <имя_файла>. Или используйте параметры --output-format json и --output-filename <имя_файла>.

  5. list (список): простой список, в котором одна строка содержит пару «хост — порт». Просто используйте параметр -oL <имя_файла>. Или используйте параметры --output-format list и --output-filename <имя_файла>. Формат выглядит так:

    <port state> <protocol> <port number> <IP address> <POSIX timestamp> open tcp 80 XXX.XXX.XXX.XXX 1390380064

Сравнение с Nmap

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

Два ключевых отличия:

  • нет портов по умолчанию для сканирования — необходимо явно указывать -p <порты>;
  • целевые хосты задаются IP-адресами или простыми диапазонами, а не DNS-именами и не сложными диапазонами подсетей, которые умеет обрабатывать nmap (такими, как 10.0.0-255.0-255).

Можно считать, что в masscan постоянно включены следующие настройки: * -sS: выполняет только SYN-сканирование (в настоящее время; в будущем это изменится); * -n: не выполняет разрешение DNS; * -Pn: не пингует хосты предварительно, что является основой для асинхронной работы; * --randomize-hosts: сканирование всегда выполняется в случайном порядке, и это нельзя изменить; * --send-eth: отправляет пакеты с помощью низкоуровневого libpcap.

Если вы хотите получить список дополнительных опций, совместимых с nmap, выполните следующую команду:

# masscan --nmap

Скорость передачи (ВАЖНО!!)

Эта программа отправляет пакеты очень быстро. В Windows или из виртуальных машин она может обрабатывать 300 000 пакетов в секунду. В Linux (без виртуализации) — 1,6 миллиона пакетов в секунду. Это достаточно, чтобы «перегрузить» большинство сетей.

Обратите внимание, что она будет перегружать только вашу собственную сеть. Целевые IP-адреса выбираются случайным образом, поэтому любая удалённая сеть не должна испытывать чрезмерной нагрузки.

По умолчанию скорость установлена на уровне 100 пакетов в секунду. Чтобы увеличить её до миллиона, используйте что-то вроде --rate 1000000.

При сканировании Интернет-сети IPv4 вы будете сканировать множество подсетей, поэтому, несмотря на высокую скорость отправки, каждая целевая подсеть будет получать лишь небольшой объём входящих пакетов.

Однако при сканировании IPv6 вы, как правило, будете сосредоточены на одной целевой подсети с миллиардами адресов. Таким образом, ваши действия по умолчанию могут перегрузить целевую сеть. Сети часто выходят из строя под нагрузкой, которую может создать masscan.

Архитектура

В этом разделе описываются основные вопросы проектирования программы.

Структура кода

Файл main.c содержит функцию main(), как и следовало ожидать. Он также содержит функции transmit_thread() и receive_thread(). Эти функции намеренно сделаны плоскими и подробно прокомментированы, чтобы вы могли понять архитектуру программы, просто читая каждую из них построчно.

Асинхронность

Это асинхронный дизайн. Другими словами, его отношение к nmap такое же, как у веб-сервера nginx к Apache. В программе есть отдельные потоки передачи и приёма данных, которые в значительной мере независимы друг от друга. Это тот же тип архитектуры, который используется в scanrand, unicornscan и ZMap.

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

Рандомизация

Ключевое отличие Masscan от других сканеров заключается в способе рандомизации целей.

Основной принцип заключается в использовании одной переменной индекса, которая начинается с нуля и увеличивается на единицу для каждого зондирования. На языке C это выглядит так:

for (i = 0; i < range; i++) {
    scan(i);
}

Нам нужно преобразовать индекс в IP-адрес. Допустим, вы хотите сканировать все «частные» IP-адреса. Это будет набор диапазонов, например:

192.168.0.0/16
10.0.0.0/8
172.16.0.0/12

В этом примере первые 64 тыс. индексов добавляются к 192.168.x.x для формирования целевого адреса. Затем следующие 16 миллионов добавляются к 10.x.x.x. Оставшиеся индексы в диапазоне применяются к 172.16.x.x.

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

Это приводит к одному из самых медленных участков кода. Мы передаем 10 миллионов пакетов в секунду и должны преобразовывать переменную индекса в IP-адрес для каждого зондирования. Мы решаем это, выполняя «двоичный поиск» в небольшом объеме памяти. При такой частоте пакетов эффективность кэша начинает превосходить эффективность алгоритма. Теоретически существует множество более эффективных техник, но все они требуют настолько много памяти, что на практике оказываются медленнее.

Функцию, которая преобразует индекс в IP-адрес, мы называем функцией pick(). В использовании она выглядит так:

for (i = 0; i < range; i++) {
    ip = pick(addresses, i);
    scan(ip);
}

Masscan поддерживает не только диапазоны IP-адресов, но и диапазоны портов. Это означает, что нам нужно выбирать из переменной индекса как IP-адрес, так и порт. Это довольно просто:

range = ip_count * port_count;
for (i = 0; i < range; i++) {
    ip   = pick(addresses, i / port_count);
    port = pick(ports,     i % port_count);
    scan(ip, port);
}

Это приводит к еще одному дорогостоящему участку кода. Инструкции деления/остатка от деления выполняются примерно за 90 тактов, или 30 наносекунд, на процессорах x86. При скорости передачи 10 миллионов пакетов в секунду у нас есть только 100 наносекунд на пакет. Я не вижу способа оптимизировать это лучше. К счастью, две такие операции могут выполняться одновременно, поэтому выполнение двух таких операций, как показано выше, не обходится дороже, чем одной.

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

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

range = ip_count * port_count;
for (i = 0; i < range; i++) {
    x = encrypt(i);
    ip   = pick(addresses, x / port_count);
    port = pick(ports,     x % port_count);
    scan(ip, port);
}

Это тоже имеет свою стоимость. Поскольку диапазон имеет непредсказуемый размер, а не является приятной равной степенью двойки, мы не можем использовать дешевые двоичные техники, такие как AND (&) и XOR (^). Вместо этого нам приходится использовать дорогостоящие операции, такие как ОСТАТОК ОТ ДЕЛЕНИЯ (%). В моих текущих бенчмарках шифрование переменной занимает 40 наносекунд.

Эта архитектура позволяет реализовать множество полезных функций. Например, она поддерживает «шарды». Вы можете настроить 5 машин, каждая из которых выполняет пятую часть сканирования или range / shard_count. Шарды могут быть несколькими машинами, или просто несколькими сетевыми адаптерами на одной машине, или даже (если вы хотите) несколькими исходными IP-адресами на одном сетевом адаптере.

Или вы можете использовать «зерно» или «ключ» для функции шифрования, чтобы получать разный порядок при каждом сканировании, например, x = encrypt(seed, i).

Мы также можем приостановить сканирование, выйдя из программы и просто запомнив текущее значение i, а затем перезапустить его позже. Я часто делаю так во время разработки. Я вижу, что что-то пошло не так в моем интернет-сканировании, поэтому я нажимаю , чтобы остановить сканирование, а затем перезапускаю его после исправления ошибки.

Другой функцией являются повторные передачи/повторные попытки. Пакеты иногда отбрасываются в интернете, поэтому вы можете отправлять два пакета подряд. Однако то, что отбрасывает один пакет, может отбросить и сразу следующий за ним. Поэтому вы хотите отправлять копию с интервалом примерно в 1 секунду. Это просто. У нас уже есть переменная rate, которая определяет частоту передачи пакетов в секунду, поэтому функция повторной передачи — просто использовать i + rate в качестве индекса. Когда-нибудь я проведу исследование интернета и с помощью этого метода различу повторные передачи «подряд», «через 1 секунду», «через 10 секунд» и «через 1 минуту», чтобы увидеть, есть ли разница в том, что отбрасывается.

Масштабируемость C10

Асинхронная техника известна как решение проблемы «c10k». Masscan спроектирован для следующего уровня масштабируемости, «проблемы C10M».

Решение C10M состоит в обходе ядра. В Masscan реализованы три основных механизма обхода ядра: * пользовательский сетевой драйвер * TCP-стек в пользовательском режиме * синхронизация в пользовательском режиме

Masscan может использовать драйвер PF_RING DNA. Этот драйвер выполняет прямой DMA пакетов из памяти пользовательского режима в сетевой драйвер без какого-либо участия ядра. Это позволяет программе, даже при медленном процессоре, передавать пакеты с максимальной скоростью, допустимой оборудованием. Если установить 8 сетевых карт со скоростью 10 гбит/с в компьютер, это означает, что он сможет передавать со скоростью 100 миллионов пакетов в секунду.

Masscan имеет собственный встроенный TCP-стек для получения баннеров от TCP-соединений. Это означает, что он может легко поддерживать 10 миллионов одновременных TCP-соединений, при условии, конечно, что у компьютера достаточно памяти.

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

Портируемость

Код хорошо работает на Linux, Windows и Mac OS X. Все важные части написаны на стандартном C (C90). Поэтому он компилируется в Visual Studio с компилятором Microsoft, компилятором Clang/LLVM на Mac OS X и GCC на Linux.

Windows и Mac не оптимизированы для передачи пакетов и достигают только около 300 000 пакетов в секунду, тогда как Linux может обрабатывать 1 500 000 пакетов в секунду. Скорее всего, это и так быстрее, чем вам нужно.

Безопасный код

Предлагается вознаграждение за уязвимости, подробности смотрите в файле VULNINFO.md.

В этом проекте используются безопасные функции, такие как safe_strcpy(), вместо небезопасных, таких как strcpy().

В этом проекте есть автоматические регрессионные модульные тесты (make regress).

Совместимость

Было приложено много усилий для того, чтобы входные/выходные данные выглядели как nmap, с которым знаком (или должен быть знаком) каждый, кто выполняет сканирование портов.

Совместное использование IPv6 и IPv4

Masscan поддерживает IPv6, но нет специального режима; оба протокола поддерживаются одновременно. (Нет опции -6 — она всегда доступна).

В любом примере использования masscan, который вы увидите, просто подставьте IPv6-адрес вместо IPv4-адреса. Вы можете включать IPv4 и IPv6-адреса одновременно в одном сканировании. Выходные данные содержат соответствующий адрес в том же месте, без специальной маркировки.

Просто помните, что пространство адресов IPv6 действительно огромно. Скорее всего, вы не захотите сканировать большие диапазоны, за исключением, возможно, первых 64 тыс. адресов подсети, назначенных через DHCPv6.

Вместо этого, скорее всего, вы захотите сканировать большие списки адресов, хранящиеся в файле (--include-file filename.txt), полученные из других источников. Как и везде, этот файл может содержать списки как IPv4, так и IPv6-адресов. Тестовый файл, который я использую, содержит 8 миллионов адресов. Файлы такого размера требуют пару дополнительных секунд для чтения при запуске (masscan сортирует адреса и удаляет дубликаты перед сканированием).

Помните, что masscan содержит собственный сетевой стек. Таким образом, локальная машина, с которой вы запускаете masscan, не обязательно должна поддерживать IPv6 — хотя локальная сеть должна быть способна маршрутизировать IPv6-пакеты.

PF_RING

Для превышения скорости в 2 миллиона пакетов в секунду потребуется Ethernet-адаптер Intel на 10 Гбит/с и специальный драйвер, известный как "PF_RING ZC" от ntop. Для использования PF_RING не требуется пересборка Masscan. Чтобы работать с PF_RING, вам нужно собрать следующие компоненты:

  • libpfring.so (устанавливается в /usr/lib/libpfring.so)
  • pf_ring.ko (их драйвер ядра)
  • ixgbe.ko (их версия драйвера Ethernet Intel на 10 Гбит/с)

Вам не нужно собирать их версию libpcap.so.

Когда Masscan обнаруживает, что адаптер называется как-то вроде zc:enp1s0, а не как-то вроде enp1s0, он автоматически переключается в режим PF_RING ZC.

Более подробное обсуждение можно найти в PoC||GTFO 0x15.

Регрессионное тестирование

Проект содержит встроенные модульные тесты:

$ make test
bin/masscan --selftest
selftest: success!

Это проверяет много сложных участков кода. Рекомендуется запускать эту проверку после сборки.

Тестирование производительности

Для тестирования производительности выполните команду, подобную следующей, направляя ее на временный адрес, чтобы не перегружать ваш локальный маршрутизатор:

$ bin/mасscan 0.0.0.0/4 -p80 --rate 100000000 --router-mac 66-55-44-33-22-11

Поддельный --router-mac удерживает пакеты в пределах локальных сегментов сети, чтобы они не выходили в Интернет.

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

$ bin/mасscan 0.0.0.0/4 -p80 --rate 100000000 --offline

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

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

Авторы

Этот инструмент создан Робертом Грэмом: электронная почта: robert_david_graham@yahoo.com twitter: @ErrataRob

Лицензия

Copyright (c) 2013 Robert David Graham

Эта программа является свободным программным обеспечением. Вы можете распространять ее и/или изменять в соответствии с условиями Общей публичной лицензии GNU Affero (GNU Affero General Public License), опубликованной Фондом свободного программного обеспечения (Free Software Foundation), версии 3.

Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробности см. в Общей публичной лицензии GNU Affero.

Вы должны были получить копию Общей публичной лицензии GNU Affero вместе с этой программой. Если нет, см. https://www.gnu.org/licenses/.

Комментарии
Войдите, чтобы оставить комментарий