Попробуйте запустить nmap по /16 на все порты — и поймёте зачем нужен masscan. Он использует собственный асинхронный TCP/IP-стек и способен отправлять миллионы пакетов в секунду. Синтаксис похож на nmap намеренно, переключаться несложно.

Простое сканирование

masscan 192.168.1.0/24 -p80,443

Весь диапазон портов на одном хосте:

masscan 10.0.0.1 -p0-65535

Топ-100 портов по аналогии с nmap:

masscan 10.0.0.0/8 --top-ports 100

Скорость — главный параметр

По умолчанию masscan шлёт 100 пакетов в секунду. Это медленно. --rate поднимает планку:

masscan 10.0.0.0/16 -p1-65535 --rate 10000

На локальной сети можно поднять до 100k и выше. На внешних целях — осторожнее: слишком высокий rate может перегрузить собственный сетевой интерфейс, потерять пакеты и дать неполный результат. Начинайте с 1000-5000, смотрите на потери.

Форматы вывода

masscan 10.0.0.0/24 -p80,443 -oX results.xml
masscan 10.0.0.0/24 -p80,443 -oJ results.json
masscan 10.0.0.0/24 -p80,443 -oG results.gnmap

grepable-формат удобно парсить для передачи в nmap. XML читает почти всё.

Исключения и баннеры

--exclude и --excludefile — убрать адреса которые нельзя сканировать. --banners — попытаться захватить баннер сервиса, работает не со всеми портами. -e eth0 — явно указать интерфейс, если masscan выбирает не тот.

Место в рабочем процессе

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