Быстрый и надёжный сканер портов от ProjectDiscovery, написанный на Go. Использует SYN/CONNECT-сканирование с поддержкой NMAP-интеграции для определения сервисов. Оптимизирован для массового сканирования: легко справляется с тысячами хостов, поддерживает IPv6, CDN-исключения и вывод в форматах JSON/CSV.
go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@latest # Базовое использование naabu -host example.com -p 80,443,8080 naabu -list hosts.txt -p - -o output.txt
Возможности • Установка • Использование • Запуск naabu • Конфигурация • Интеграция с NMAP • Исключение CDN/WAF • Discord
Naabu — это инструмент для сканирования портов, написанный на языке Go, который позволяет быстро и надежно перечислить валидные порты для хостов. Это очень простой инструмент, который выполняет быстрые SYN/CONNECT/UDP-сканирования на хосте/списке хостов и перечисляет все порты, которые вернули ответ.
naabu -h
Эта команда покажет справку по инструменту. Ниже приведены все поддерживаемые им ключи.
Использование:
naabu [ключи]
Ключи:
ВВОД:
-host string[] хосты для сканирования портов (через запятую)
-list, -l string список хостов для сканирования портов (файл)
-exclude-hosts, -eh string хосты, которые нужно исключить из сканирования (через запятую)
-exclude-file, -ef string список хостов для исключения из сканирования (файл)
ПОРТЫ:
-port, -p string порты для сканирования (80,443, 100-200)
-top-ports, -tp string количество наиболее распространенных портов для сканирования (по умолчанию 100) [full,100,1000]
-exclude-ports, -ep string порты для исключения из сканирования (через запятую)
-ports-file, -pf string список портов для сканирования (файл)
-port-threshold, -pts int пороговое значение порта для пропуска сканирования хоста
-exclude-cdn, -ec пропускать полное сканирование портов для CDN/WAF (сканировать только порты 80,443)
-display-cdn, -cdn отображать используемый CDN
ОГРАНИЧЕНИЕ СКОРОСТИ:
-c int общее количество рабочих потоков (по умолчанию 25)
-rate int количество пакетов для отправки в секунду (по умолчанию 1000)
ОБНОВЛЕНИЕ:
-up, -update обновить naabu до последней версии
-duc, -disable-update-check отключить автоматическую проверку обновлений naabu
ВЫВОД:
-o, -output string файл для записи результатов (необязательно)
-j, -json записывать результаты в формате строк JSON
-csv записывать результаты в формате csv
ОБНАРУЖЕНИЕ СЕРВИСОВ:
-sD, -service-discovery определять сервисы по номеру порта
-sV, -service-version определять версии сервисов с помощью nmap-service-probes
-sV-fast проверять только сервисы, указанные для портов (быстрее, пропускает резервный вариант)
-sV-timeout duration время ожидания для проверки версий сервисов (по умолчанию 5с)
-sV-workers int количество параллельных потоков проверки версий сервисов (по умолчанию 25)
-sV-probes string пользовательский путь к файлу nmap-service-probes (если пусто, определяется автоматически из локальной установки nmap)
-uP, -udp-probes отправлять специфические для протокола данные при UDP-сканировании с помощью nmap-service-probes
КОНФИГУРАЦИЯ:
-config string путь к файлу конфигурации naabu (по умолчанию $HOME/.config/naabu/config.yaml)
-scan-all-ips, -sa сканировать все IP-адреса, связанные с записью DNS
-ip-version, -iv string[] версия IP для сканирования имени хоста (4,6) - (по умолчанию 4,6) (по умолчанию ["4","6"])
-scan-type, -s string тип сканирования портов (SYN/CONNECT) (по умолчанию "c")
-source-ip string исходный IP-адрес и порт (x.x.x.x:yyy - может не работать в OSX)
-cp, -connect-payload string данные для отправки в сканированиях CONNECT (необязательно)
-interface-list, -il вывести доступные интерфейсы и публичный IP
-interface, -i string сетевой интерфейс для использования при сканировании портов
-nmap вызвать nmap для целевого сканирования (nmap должен быть установлен) - Устарело
-nmap-cli string команда nmap для выполнения над найденными результатами (пример: -nmap-cli 'nmap -sV')
-r string список пользовательских резолверов для разрешения DNS (через запятую или из файла)
-proxy string прокси socks5 (ip[:port] / fqdn[:port]
-proxy-auth string аутентификация прокси socks5 (имя_пользователя:пароль)
-dns-order string порядок разрешения DNS (p/l/lp/pl) (по умолчанию "l")
-sr, -system-resolver использовать системный DNS в качестве резервного резолвера
-resume возобновить сканирование с помощью resume.cfg
-stream режим потока (отключает возобновление, nmap, проверку, повторные попытки, перемешивание и т.д.)
-passive отображать пассивно открытые порты с помощью api shodan internetdb (автоматически включает режим потока)
-irt, -input-read-timeout value время ожидания при чтении ввода (по умолчанию 3м0с)
-no-stdin Отключить обработку Stdin
ОБНАРУЖЕНИЕ ХОСТОВ:
-sn, -host-discovery Выполнить только обнаружение хостов
-show-dead показывать хосты, которые не ответили на обнаружение хостов (требует включенного обнаружения хостов)
-Pn, -skip-host-discovery Пропустить обнаружение хостов (Устарело: используйте -wn/-with-host-discovery)
-wn, -with-host-discovery Включить обнаружение хостов
-ps, -probe-tcp-syn string[] TCP SYN Ping (требуется включенного обнаружения хостов)
-pa, -probe-tcp-ack string[] TCP ACK Ping (требуется включенного обнаружения хостов)
-pe, -probe-icmp-echo ICMP echo request Ping (требуется включенного обнаружения хостов)
-pp, -probe-icmp-timestamp ICMP timestamp request Ping (требуется включенного обнаружения хостов)
-pm, -probe-icmp-address-mask ICMP address mask request Ping (требуется включенного обнаружения хостов)
-arp, -arp-ping ARP ping (требуется включенного обнаружения хостов)
-nd, -nd-ping Обнаружение соседей IPv6 (требуется включенного обнаружения хостов)
-rev-ptr Обратный запрос PTR для входных IP-адресов
ОПТИМИЗАЦИЯ:
-retries int количество повторных попыток для сканирования портов (по умолчанию 3)
-timeout int миллисекунды до истечения времени ожидания (по умолчанию 1000)
-warm-up-time int время в секундах между этапами сканирования (по умолчанию 2)
-ping проверка пингом для подтверждения хоста
-verify повторно проверять порты с помощью верификации TCP
-ss, -smart-scan прогнозное сканирование портов с использованием модели корреляции портов (несовместимо с режимом потока)
-pt, -prediction-threshold int минимальная достоверность для прогнозов портов (0-100%) (по умолчанию 20)
ОТЛАДКА:
-health-check, -hc выполнить диагностическую проверку
-debug отображать отладочную информацию
-verbose, -v отображать подробный вывод
-no-color, -nc отключить цвета в выводе CLI
-silent отображать только результаты в выводе
-version отображать версию naabu
-stats отображать статистику запущенного сканирования (устарело)
-si, -stats-interval int количество секунд между обновлениями статистики (устарело) (по умолчанию 5)
-mp, -metrics-port int порт для предоставления метрик naabu (по умолчанию 63636)
ОБЛАКО:
-auth настроить API-ключ projectdiscovery cloud (pdcp) (по умолчанию true)
-ac, -auth-config string настроить файл учетных данных API-ключа projectdiscovery cloud (pdcp)
-pd, -dashboard загрузить / просмотреть результаты в интерфейсе projectdiscovery cloud (pdcp) в облаке
-tid, -team-id string загрузить результаты активов в указанную команду (необязательно)
-aid, -asset-id string загрузить новые активы в существующий идентификатор актива (необязательно)
-aname, -asset-name string задать имя группы активов (необязательно)
-pdu, -dashboard-upload string загрузить файл вывода naabu (jsonl) в интерфейс projectdiscovery cloud (pdcp) в облаке
Скачайте готовый к запуску бинарный файл / docker-образ или установите с помощью GO
Примечание: перед установкой naabu убедитесь, что установлена библиотека
libpcapдля захвата пакетов.
Для установки libpcap в Linux: sudo apt install -y libpcap-dev, в Mac: brew install libpcap, в Windows: установите Npcap
go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@latest
Чтобы запустить инструмент на целевом хосте, просто используйте следующую команду.
naabu -host hackerone.com
Это запустит инструмент для сканирования hackerone.com. Существует ряд параметров конфигурации, которые можно передать вместе с этой командой. Параметр подробного вывода -v можно использовать для отображения расширенной информации.
naabu -host hackerone.com
__
___ ___ ___ _/ / __ __
/ _ \/ _ \/ _ \/ _ \/ // /
/_//_/\_,_/\_,_/_.__/\_,_/ v2.0.3
projectdiscovery.io
[WRN] Use with caution. You are responsible for your actions
[WRN] Developers assume no liability and are not responsible for any misuse or damage.
[INF] Running SYN scan with root privileges
[INF] Found 4 ports on host hackerone.com (104.16.100.52)
hackerone.com:80
hackerone.com:443
hackerone.com:8443
hackerone.com:8080
Порты для сканирования на хосте можно указать через параметр -p (порты UDP должны быть выражены как u:порт). Он принимает порты в формате nmap и выполняет перечисление для них.
naabu -p 80,443,21-23,u:53 -host hackerone.com
Для UDP-сканирований можно указать пользовательскую полезную нагрузку для отправки, используя флаг -cp или --connect-payload. Это особенно полезно для UDP-служб, которые требуют специфических данных для ответа:
naabu -p u:53 -host example.com -cp "DNS query payload"
По умолчанию Naabu проверяет Топ-100 портов nmap. Он поддерживает следующие встроенные списки портов -
| Флаг | Описание |
|---|---|
-top-ports 100 |
Сканировать 100 лучших портов nmap |
-top-ports 1000 |
Сканировать 1000 лучших портов nmap |
-p - |
Сканировать все порты с 1 по 65535 |
Также можно указать конкретные порты, которые вы хотели бы исключить из сканирования.
naabu -p - -exclude-ports 80,443
Чтобы запустить naabu для списка хостов, можно использовать опцию -list.
naabu -list hosts.txt
Чтобы запустить naabu для ASN (номера автономной системы), можно использовать ASN в качестве входных данных. Он берет IP-адреса, доступные для указанного ASN, и выполняет их перечисление.
echo AS14421 | naabu -p 80,443
216.101.17.249:80
216.101.17.249:443
216.101.17.248:443
216.101.17.252:443
216.101.17.251:80
216.101.17.251:443
216.101.17.250:443
216.101.17.250:80
Вы также можете получить вывод в формате JSON, используя ключ -json. Этот ключ сохраняет вывод в формате JSON lines.
naabu -host 104.16.99.52 -json
{"ip":"104.16.99.52","port":443}
{"ip":"104.16.99.52","port":80}
Обнаруженные порты также можно передать в другие инструменты. Например, вы можете передать порты, обнаруженные naabu, в httpx, который затем найдет запущенные HTTP-серверы на хосте.
echo hackerone.com | naabu -silent | httpx -silent
http://hackerone.com:8443
http://hackerone.com:443
http://hackerone.com:8080
http://hackerone.com:80
Скорость можно регулировать, изменяя значение флага rate, который представляет количество пакетов в секунду. Увеличение этой скорости во время обработки хостов может привести к повышению уровня ложных срабатываний. Поэтому рекомендуется сохранять ее в разумных пределах.
Naabu поддерживает как IPv4, так и IPv6, и оба протокола включены по умолчанию. Если используется IPv6, подключение должно быть настроено корректно, а сетевой интерфейс должен иметь назначенный IPv6-адрес (inet6) и шлюз по умолчанию.
echo hackerone.com | naabu -p 80 -silent
104.16.99.52:80
104.16.100.52:80
2606:4700::6810:6434:80
2606:4700::6810:6334:80
Опция -ip-version 6 заставляет инструмент использовать только IPv6-адреса при разрешении имен доменов.
echo hackerone.com | ./naabu -p 80 -ip-version 6
__
___ ___ ___ _/ / __ __
/ _ \/ _ \/ _ \/ _ \/ // /
/_//_/\_,_/\_,_/_.__/\_,_/ v2.0.8
projectdiscovery.io
Use with caution. You are responsible for your actions
Developers assume no liability and are not responsible for any misuse or damage.
[INF] Running CONNECT scan with non root privileges
[INF] Found 1 ports on host hackerone.com (2606:4700::6810:6334)
hackerone.com:80
Для сканирования всех IP-адресов обеих версий можно использовать флаг -scan-all-ips.
echo hackerone.com | ./naabu -sa -p 80 -silent
[INF] Found 1 ports on host hackerone.com (104.16.100.52)
hackerone.com:80
[INF] Found 1 ports on host hackerone.com (104.16.99.52)
hackerone.com:80
[INF] Found 1 ports on host hackerone.com (2606:4700::6810:6334)
hackerone.com:80
[INF] Found 1 ports on host hackerone.com (2606:4700::6810:6434)
hackerone.com:80
Naabu опционально поддерживает несколько вариантов для выполнения обнаружения хостов. Обнаружение хостов не является обязательным и может быть включено с помощью флага -wn. Флаг -sn указывает инструменту выполнять только обнаружение хостов.
Доступные варианты для обнаружения хостов:
-arp)-ps 80)-pa 443)-pe)-pp)-pm)-nd)Naabu поддерживает файл конфигурации, который по умолчанию находится в $HOME/.config/naabu/config.yaml. Он позволяет вам определить любой флаг в файле конфигурации и установить значения по умолчанию для включения во все сканирования.
Мы интегрировали поддержку nmap для обнаружения служб или любых дополнительных сканирований, поддерживаемых nmap, для результатов, найденных Naabu. Убедитесь, что nmap установлен, чтобы использовать эту функцию.
Для использования можно применить флаг nmap-cli, за которым следует команда nmap, например:-
echo hackerone.com | naabu -nmap-cli 'nmap -sV -oX nmap-output'
__
___ ___ ___ _/ / __ __
/ _ \/ _ \/ _ \/ _ \/ // /
/_//_/\_,_/\_,_/_.__/\_,_/ v2.0.0
projectdiscovery.io
[WRN] Use with caution. You are responsible for your actions
[WRN] Developers assume no liability and are not responsible for any misuse or damage.
[INF] Running TCP/ICMP/SYN scan with root privileges
[INF] Found 4 ports on host hackerone.com (104.16.99.52)
hackerone.com:443
hackerone.com:80
hackerone.com:8443
hackerone.com:8080
[INF] Running nmap command: nmap -sV -p 80,8443,8080,443 104.16.99.52
Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-23 05:02 UTC
Nmap scan report for 104.16.99.52
Host is up (0.0021s latency).
PORT STATE SERVICE VERSION
80/tcp open http cloudflare
443/tcp open ssl/https cloudflare
8080/tcp open http-proxy cloudflare
8443/tcp open ssl/https-alt cloudflare
Naabu имеет встроенное определение версий служб с использованием базы данных служебных зондов nmap. Это выполняется параллельно со сканированием портов для максимальной производительности.
naabu -host scanme.sh -sV
scanme.sh:22 [ssh OpenSSH/6.6.1p1]
scanme.sh:80 [http Apache httpd/2.4.7]
scanme.sh:9929 [nping-echo Nping echo]
[INF] Found 3 ports on host scanme.sh (45.33.32.156) with 3 services identified
Доступные флаги:
| Флаг | Описание |
|---|---|
-sV |
Включить определение версий служб |
-sV-fast |
Опрашивать только службы, подсказанные портом (быстрее, пропускает резервные зонды) |
-sV-timeout duration |
Тайм-аут для служебных зондов (по умолчанию 5с) |
-sV-workers int |
Количество параллельных процессов определения версий служб (по умолчанию 25) |
-sV-probes string |
Пользовательский путь к файлу nmap-service-probes (автоматически определяется из локальной установки nmap, если пусто) |
-sD |
Обнаружение служб (сопоставление номера порта с именем службы, без активного опроса) |
Флаг -sV требует наличия файла базы данных nmap-service-probes. naabu не включает эту базу данных (она лицензирована под копилефт-лицензией Nmap Public Source License, которая несовместима с лицензией MIT naabu), поэтому он читает файл из локальной установки nmap, автоматически ища в стандартных путях установки nmap. Чтобы использовать пользовательский файл, укажите путь с помощью -sV-probes.
Службы UDP обычно молчат при получении пустого дейтаграмма, поэтому слепое сканирование UDP-портов пропускает большинство из них. С флагом -uP (-udp-probes) naabu выбирает специфичную для протокола полезную нагрузку из базы данных nmap-service-probes для каждого сканируемого UDP-порта (DNS-запрос для 53, NTP-запрос для 123, SNMPv1 GetRequest для 161 и т.д.), чтобы реальные службы имели что-то, на что можно ответить, и naabu мог сообщить об их статусе как открытых.
naabu -host scanme.sh -p u:53,u:123,u:161 -uP
Примечания:
-uP требует явного включения и работает по принципу нарастания. Когда он отключен (по умолчанию), UDP-сканирование сохраняет историческое поведение с нулевой длиной дейтаграмма.-cp, всегда имеет приоритет над автоматическим зондом для данного порта.-uP использует ту же базу данных зондов, что и -sV, поэтому их можно комбинировать без повторной стоимости разбора. Файл зондов автоматически определяется из локальной установки nmap; используйте -sV-probes, чтобы указать на пользовательский файл. Если база данных не найдена, -uP выдает предупреждение и молча отключается.Naabu также поддерживает исключение IP-адресов CDN/WAF из портового сканирования. При использовании этой функции для таких IP-адресов сканируются только порты 80 и 443. Эта функция включается флагом exclude-cdn.
В настоящее время для исключений поддерживаются IP-адреса cloudflare, akamai, incapsula и sucuri.
Naabu предоставляет информацию о сканировании в формате JSON на локальном порту, привязанном к localhost, по адресу http://localhost:63636/metrics (порт можно изменить с помощью флага -metrics-port)
Следующая пример программы сканирует порт 80 на scanme.sh. Результаты возвращаются через обратный вызов OnResult:
package main
import (
"log"
"context"
"github.com/projectdiscovery/goflags"
"github.com/projectdiscovery/naabu/v2/pkg/result"
"github.com/projectdiscovery/naabu/v2/pkg/runner"
)
func main() {
options := runner.Options{
Host: goflags.StringSlice{"scanme.sh"},
ScanType: "s",
OnResult: func(hr *result.HostResult) {
log.Println(hr.Host, hr.Ports)
},
Ports: "80",
}
naabuRunner, err := runner.NewRunner(&options)
if err != nil {
log.Fatal(err)
}
defer naabuRunner.Close()
naabuRunner.RunEnumeration(context.Background())
}
OnResultвызывается один раз после завершения сканирования с агрегированными результатами. Чтобы обрабатывать результаты в реальном времени по мере обнаружения портов, используйтеOnReceive. ОпцияStreamтолько управляет асинхронной загрузкой целей — она не влияет на то, когда срабатывают обратные вызовы.
Naabu создан с 🖤 командой projectdiscovery. Сообщество внесло свой вклад в развитие проекта.
Подробную информацию смотрите в файле Thanks.md.