
Ein schneller Port-Scanner, geschrieben in Go, mit Fokus auf Zuverlässigkeit und Einfachheit. Entwickelt für die Verwendung in Kombination mit anderen Tools zur Angriffsflächenerkennung bei Bug-Bounties und Penetrationstests.
Features • Installation • Usage • Running naabu • Config • NMAP integration • CDN/WAF Exclusion • Discord
Naabu ist ein in Go geschriebenes Port-Scanning-Tool, mit dem Sie gültige Ports für Hosts schnell und zuverlässig ermitteln können. Es ist ein wirklich einfaches Tool, das schnelle SYN/CONNECT/UDP-Scans auf dem Host/einer Liste von Hosts durchführt und alle Ports auflistet, die eine Antwort zurückgeben.
naabu -h
Dies zeigt die Hilfe für das Tool an. Hier sind alle von ihm unterstützten Schalter.```yaml
Usage:
naabu [flags]
Flags:
INPUT:
-host string[] hosts to scan ports for (comma-separated)
-list, -l string list of hosts to scan ports (file)
-exclude-hosts, -eh string hosts to exclude from the scan (comma-separated)
-exclude-file, -ef string list of hosts to exclude from scan (file)
PORT:
-port, -p string ports to scan (80,443, 100-200)
-top-ports, -tp string top ports to scan (default 100) [full,100,1000]
-exclude-ports, -ep string ports to exclude from scan (comma-separated)
-ports-file, -pf string list of ports to scan (file)
-port-threshold, -pts int port threshold to skip port scan for the host
-exclude-cdn, -ec skip full port scans for CDN/WAF (only scan for port 80,443)
-display-cdn, -cdn display cdn in use
RATE-LIMIT:
-c int general internal worker threads (default 25)
-rate int packets to send per second (default 1000)
UPDATE:
-up, -update update naabu to latest version
-duc, -disable-update-check disable automatic naabu update check
OUTPUT:
-o, -output string file to write output to (optional)
-j, -json write output in JSON lines format
-csv write output in csv format
SERVICES-DISCOVERY:
-sD, -service-discovery identify services by port number
-sV, -service-version detect service versions using nmap-service-probes
-sV-fast only probe port-hinted services (faster, skips fallback)
-sV-timeout duration timeout for service version probes (default 5s)
-sV-workers int number of concurrent service version workers (default 25)
-sV-probes string custom nmap-service-probes file path (auto-detected from local nmap install if empty)
-uP, -udp-probes send protocol-specific payloads on UDP scans using nmap-service-probes
CONFIGURATION:
-config string path to the naabu configuration file (default $HOME/.config/naabu/config.yaml)
-scan-all-ips, -sa scan all the IP's associated with DNS record
-ip-version, -iv string[] ip version to scan of hostname (4,6) - (default 4,6) (default ["4","6"])
-scan-type, -s string type of port scan (SYN/CONNECT) (default "c")
-source-ip string source ip and port (x.x.x.x:yyy - might not work on OSX)
-cp, -connect-payload string payload to send in CONNECT scans (optional)
-interface-list, -il list available interfaces and public ip
-interface, -i string network Interface to use for port scan
-nmap invoke nmap scan on targets (nmap must be installed) - Deprecated
-nmap-cli string nmap command to run on found results (example: -nmap-cli 'nmap -sV')
-r string list of custom resolver dns resolution (comma separated or from file)
-proxy string socks5 proxy (ip[:port] / fqdn[:port]
-proxy-auth string socks5 proxy authentication (username:password)
-dns-order string dns resolution order (p/l/lp/pl) (default "l")
-sr, -system-resolver use system DNS as fallback resolver
-resume resume scan using resume.cfg
-stream stream mode (disables resume, nmap, verify, retries, shuffling, etc)
-passive display passive open ports using shodan internetdb api (automatically enables stream mode)
-irt, -input-read-timeout value timeout on input read (default 3m0s)
-no-stdin Disable Stdin processing
HOST-DISCOVERY:
-sn, -host-discovery Perform Only Host Discovery
-show-dead show hosts that did not respond to host discovery (requires host discovery)
-Pn, -skip-host-discovery Skip Host discovery (Deprecated: use -wn/-with-host-discovery instead)
-wn, -with-host-discovery Enable Host discovery
-ps, -probe-tcp-syn string[] TCP SYN Ping (host discovery needs to be enabled)
-pa, -probe-tcp-ack string[] TCP ACK Ping (host discovery needs to be enabled)
-pe, -probe-icmp-echo ICMP echo request Ping (host discovery needs to be enabled)
-pp, -probe-icmp-timestamp ICMP timestamp request Ping (host discovery needs to be enabled)
-pm, -probe-icmp-address-mask ICMP address mask request Ping (host discovery needs to be enabled)
-arp, -arp-ping ARP ping (host discovery needs to be enabled)
-nd, -nd-ping IPv6 Neighbor Discovery (host discovery needs to be enabled)
-rev-ptr Reverse PTR lookup for input ips
OPTIMIZATION:
-retries int number of retries for the port scan (default 3)
-timeout int millisecond to wait before timing out (default 1000)
-warm-up-time int time in seconds between scan phases (default 2)
-ping ping probes for verification of host
-verify validate the ports again with TCP verification
-ss, -smart-scan predictive port scanning using port correlation model (not compatible with stream mode)
-pt, -prediction-threshold int minimum confidence for port predictions (0-100%) (default 20)
DEBUG:
-health-check, -hc run diagnostic check up
-debug display debugging information
-verbose, -v display verbose output
-no-color, -nc disable colors in CLI output
-silent display only results in output
-version display version of naabu
-stats display stats of the running scan (deprecated)
-si, -stats-interval int number of seconds to wait between showing a statistics update (deprecated) (default 5)
-mp, -metrics-port int port to expose naabu metrics on (default 63636)
CLOUD:
-auth configure projectdiscovery cloud (pdcp) api key (default true)
-ac, -auth-config string configure projectdiscovery cloud (pdcp) api key credential file
-pd, -dashboard upload / view output in projectdiscovery cloud (pdcp) UI dashboard
-tid, -team-id string upload asset results to given team id (optional)
-aid, -asset-id string upload new assets to existing asset id (optional)
-aname, -asset-name string assets group name to set (optional)
-pdu, -dashboard-upload string upload naabu output file (jsonl) in projectdiscovery cloud (pdcp) UI dashboard
Laden Sie die einsatzbereite Binärdatei binary / docker herunter oder installieren Sie mit GO
Hinweis: Stellen Sie vor der Installation von naabu sicher, dass die Bibliothek
libpcapfür die Paketerfassung installiert ist.
Um libpcap zu installieren: unter Linux: sudo apt install -y libpcap-dev, unter Mac: brew install libpcap, unter Windows: installieren Sie Npcap
go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@latest
# Naabu ausführen
Um das Tool auf einem Ziel auszuführen, verwenden Sie einfach den folgenden Befehl.```sh
naabu -host hackerone.com
Dies wird das Tool gegen hackerone.com ausführen. Es gibt eine Reihe von Konfigurationsoptionen, die Sie zusammen mit diesem Befehl übergeben können. Der ausführliche Schalter -v kann verwendet werden, um ausführliche Informationen anzuzeigen.```console
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
Die zu scannenden Ports auf dem Host können über den Parameter `-p` angegeben werden (UDP-Ports müssen als `u:port` ausgedrückt werden). Es akzeptiert Ports im nmap-Format und führt eine Aufzählung darauf durch.```sh
naabu -p 80,443,21-23,u:53 -host hackerone.com
Bei UDP-Scans können Sie mit dem Flag -cp oder --connect-payload eine benutzerdefinierte Nutzlast senden. Dies ist besonders nützlich für UDP-Dienste, die bestimmte Daten für eine Antwort benötigen:```sh
naabu -p u:53 -host example.com -cp "DNS query payload"
Standardmäßig prüft Naabu auf die `Top 100` Ports von nmap. Es unterstützt die folgenden integrierten Portlisten –
| Flag | Beschreibung |
|-------------------|--------------------------------------|
| `-top-ports 100` | Scan auf die nmap **Top 100** Ports |
| `-top-ports 1000` | Scan auf die nmap **Top 1000** Ports |
| `-p - ` | Scan auf alle Ports von **1-65535** |
Sie können auch bestimmte Ports angeben, die Sie vom Scan ausschließen möchten.```sh
naabu -p - -exclude-ports 80,443
Um naabu auf einer Liste von Hosts auszuführen, kann die Option -list verwendet werden.```sh
naabu -list hosts.txt
Um naabu auf einer ASN auszuführen, kann AS als Eingabe verwendet werden. Es nimmt die für die angegebene ASN verfügbaren IP-Adressen und führt die Enumeration auf diesen durch.```console
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
Sie können die Ausgabe auch im JSON-Format mit dem Schalter -json erhalten. Dieser Schalter speichert die Ausgabe im JSON Lines-Format.```console
naabu -host 104.16.99.52 -json
{"ip":"104.16.99.52","port":443} {"ip":"104.16.99.52","port":80}
Die entdeckten Ports können auch an andere Tools weitergeleitet werden. Zum Beispiel können Sie die von naabu entdeckten Ports an [httpx](https://github.com/projectdiscovery/httpx) weiterleiten, welches dann laufende HTTP-Server auf dem Host findet.```console
echo hackerone.com | naabu -silent | httpx -silent
http://hackerone.com:8443
http://hackerone.com:443
http://hackerone.com:8080
http://hackerone.com:80
Die Geschwindigkeit kann durch Ändern des Werts des Flags rate gesteuert werden, das die Anzahl der Pakete pro Sekunde angibt. Eine Erhöhung während der Verarbeitung von Hosts kann zu einer erhöhten Falsch-Positiv-Rate führen. Daher wird empfohlen, diesen Wert auf einem angemessenen Niveau zu halten.
Naabu unterstützt sowohl IPv4 als auch IPv6, und beide sind standardmäßig aktiviert. Wenn IPv6 verwendet wird, muss die Konnektivität korrekt konfiguriert sein und die Netzwerkschnittstelle muss eine IPv6-Adresse (inet6) sowie ein Standard-Gateway besitzen.```console
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
Die Option `-ip-version 6` bewirkt, dass das Tool beim Auflösen von Domainnamen nur IPv6-Adressen verwendet.```console
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
Um alle IPs beider Versionen zu scannen, kann das Flag -scan-all-ips verwendet werden.```console
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
# Host-Erkennung
Naabu unterstützt optional mehrere Optionen zur Host-Erkennung. Die Host-Erkennung ist optional und kann mit dem `-wn`-Flag aktiviert werden. Das `-sn`-Flag weist das Tool an, nur die Host-Erkennung durchzuführen.
Verfügbare Optionen zur Host-Erkennung:
- **ARP**-Ping (`-arp`)
- TCP **SYN**-Ping (`-ps 80`)
- TCP **ACK**-Ping (`-pa 443`)
- ICMP **Echo**-Ping (`-pe`)
- ICMP **Timestamp**-Ping (`-pp`)
- ICMP **Address-Mask**-Ping (`-pm`)
- IPv6 **Neighbor Discovery** (`-nd`)
# Konfigurationsdatei
Naabu unterstützt standardmäßig eine Konfigurationsdatei unter `$HOME/.config/naabu/config.yaml`. Sie ermöglicht es, jedes Flag in der Konfigurationsdatei zu definieren und Standardwerte festzulegen, die für alle Scans gelten.
# Nmap-Integration
Wir haben nmap-Unterstützung für die Diensterkennung oder andere zusätzliche Scans integriert, die von nmap auf den von Naabu gefundenen Ergebnissen unterstützt werden. Stellen Sie sicher, dass `nmap` installiert ist, um diese Funktion zu nutzen.
Zur Verwendung kann das `nmap-cli`-Flag gefolgt vom nmap-Befehl verwendet werden, zum Beispiel:-```console
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 verfügt über eine integrierte Dienstversionserkennung unter Verwendung der Datenbank der nmap-Dienstsonden. Diese läuft parallel zum Port-Scanning für maximale Leistung.```sh naabu -host scanme.sh -sV
No content provided.```console
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
Available flags:
Das -sV-Flag benötigt die Datenbankdatei nmap-service-probes. naabu liefert diese Datenbank nicht selbst mit (sie ist unter der Copyleft-Lizenz Nmap Public Source License lizenziert, die mit naabus MIT-Lizenz inkompatibel ist), daher liest es die Datei aus einer lokalen nmap-Installation und sucht automatisch in den Standard-Nmap-Installationspfaden. Um eine benutzerdefinierte Datei zu verwenden, geben Sie den Pfad mit -sV-probes an.
UDP-Dienste bleiben typischerweise stumm, wenn sie ein leeres Datagramm empfangen, daher übersieht ein blinder UDP-Portscan die meisten von ihnen. Mit -uP (-udp-probes) wählt naabu für jeden gescannten UDP-Port eine protokollspezifische Nutzlast aus der nmap-service-probes-Datenbank aus (DNS-Abfrage für 53, NTP-Anfrage für 123, SNMPv1-GetRequest für 161 usw.), sodass echte Dienste etwas zum Antworten haben und naabu sie als offen melden kann.```sh
naabu -host scanme.sh -p u:53,u:123,u:161 -uP
Notizen:
- `-uP` ist opt-in und additiv. Bei Deaktivierung (Standard) behalten UDP-Scans ihr historisches Verhalten mit leeren Datenpaketen (Zero-Length-Datagram) bei.
- Die ausgewählte Probe ist der Treffer mit der höchsten Priorität (niedrigste Seltenheit) für den Zielport; wenn keine Probe für einen Port registriert ist, fällt der Scan auf das leere Datenpaket zurück.
- Eine vom Benutzer bereitgestellte Nutzlast via `-cp` hat stets Vorrang vor der automatischen Probe für diesen Port.
- `-uP` verwendet dieselbe Probendatenbank wie `-sV`, sodass beide kombiniert werden können, ohne dass die Analysekosten zweimal anfallen. Die Probendatei wird automatisch aus einer lokalen nmap-Installation gefunden; verwenden Sie `-sV-probes`, um auf eine benutzerdefinierte Datei zu verweisen. Wenn keine Datenbank gefunden werden kann, protokolliert `-uP` eine Warnung und wird stillschweigend deaktiviert.
# CDN/WAF-Ausschluss
Naabu unterstützt auch den Ausschluss von CDN/WAF-IPs beim Port-Scanning. Wenn diese Funktion verwendet wird, werden für diese IPs nur die Ports `80` und `443` gescannt. Diese Funktion kann mit dem Flag `exclude-cdn` aktiviert werden.
Derzeit werden IPs von `cloudflare`, `akamai`, `incapsula` und `sucuri` für Ausschlüsse unterstützt.
# Scan-Status
Naabu stellt JSON-Scan-Informationen auf einem lokalen Port bereit, der an localhost gebunden ist, unter `http://localhost:63636/metrics` (der Port kann über das Flag `-metrics-port` geändert werden).
# Verwendung von naabu als Bibliothek
Das folgende Beispielprogramm scannt den Port `80` von `scanme.sh`. Die Ergebnisse werden über den `OnResult`-Callback zurückgegeben:```go
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())
}
OnResultwird einmal nach Abschluss des Scans mit aggregierten Ergebnissen aufgerufen. Um Ergebnisse in Echtzeit zu verarbeiten, während Ports entdeckt werden, verwenden Sie stattdessenOnReceive. Die OptionStreamsteuert nur das asynchrone Laden von Zielen – sie hat keinen Einfluss darauf, wann Callbacks ausgelöst werden.
Naabu wurde mit 🖤 vom projectdiscovery-Team entwickelt. Community-Beiträge haben das Projekt zu dem gemacht, was es ist.
Weitere Details finden Sie in der Datei Thanks.md.
| Flag | Beschreibung |
|---|
-sV | Dienstversionserkennung aktivieren |
-sV-fast | Nur durch Ports vorgegebene Dienste prüfen (schneller, überspringt Fallback-Probes) |
-sV-timeout duration | Timeout für Dienstversions-Probes (Standard 5s) |
-sV-workers int | Anzahl der gleichzeitigen Dienstversions-Worker (Standard 25) |
-sV-probes string | Pfad zur benutzerdefinierten nmap-service-probes-Datei (wird automatisch aus lokaler nmap-Installation erkannt, falls leer) |
-sD | Dienstermittlung (Portnummer dem Dienstnamen zuordnen, keine aktive Prüfung) |