Skip to main content

Basic scan execution

Nuclei provides flexible options for running vulnerability scans against single or multiple targets.
1

Run a basic scan

Execute a scan against a single target URL:
nuclei -target https://example.com
You can also use the short flag -u:
nuclei -u https://example.com
On first run, Nuclei automatically downloads the latest templates from the nuclei-templates repository.
2

Monitor scan progress

Nuclei displays real-time progress and findings:
[2024-03-01 12:00:00] [CVE-2021-44228] [http] [critical] https://example.com/api
[2024-03-01 12:00:01] [self-signed-ssl] [ssl] [info] example.com:443
Each line shows the timestamp, template ID, protocol, severity, and target.
3

View statistics

Enable statistics to monitor scan metrics:
nuclei -target https://example.com -stats
For JSON-formatted statistics:
nuclei -target https://example.com -stats -stats-json

Scanning modes

Single target scan

Scan a single web application or host:
nuclei -target https://example.com

Multiple targets from file

Scan multiple targets listed in a file (one per line):
nuclei -list urls.txt
Or use the short flag:
nuclei -l urls.txt
Create a urls.txt file with one target per line:
https://example.com
https://test.example.com
192.168.1.0/24

Network subnet scan

Scan an entire network range using CIDR notation:
nuclei -target 192.168.1.0/24
This scans all hosts in the subnet for network-related vulnerabilities.

Scan all IPs for a domain

Scan all IP addresses associated with a DNS record:
nuclei -target example.com -scan-all-ips
Or use the short flag:
nuclei -target example.com -sa
This is useful when a domain has multiple A records or is behind a CDN.

Input modes

Standard input (stdin)

Pipe targets directly from other tools:
echo https://example.com | nuclei
Chain with other ProjectDiscovery tools:
subfinder -d example.com -silent | httpx -silent | nuclei
Disable stdin with -no-stdin if you want to prevent reading from stdin.

Special input formats

Nuclei supports multiple input file formats:
Simple list of URLs, one per line:
nuclei -list targets.txt

Scan strategies

Control how Nuclei distributes work across targets and templates:
# Auto-select optimal strategy (default)
nuclei -target example.com -scan-strategy auto

# Host spray: all templates against each host
nuclei -list targets.txt -scan-strategy host-spray

# Template spray: each template against all hosts
nuclei -list targets.txt -scan-strategy template-spray
Short flag:
nuclei -list targets.txt -ss template-spray
  • host-spray: Better for scanning many targets with few templates
  • template-spray: Better for scanning few targets with many templates
  • auto: Automatically selects the best strategy

Resume interrupted scans

Save and resume scan state to continue interrupted scans:
# Start a scan with resume capability
nuclei -list targets.txt -resume scan-state.cfg

# If interrupted, resume from where it stopped
nuclei -resume scan-state.cfg
Template clustering is automatically disabled when using resume functionality.

Target exclusion

Exclude specific hosts from scanning:
# Exclude specific hosts
nuclei -list targets.txt -exclude-hosts 192.168.1.1,192.168.1.2

# Exclude CIDR ranges
nuclei -list targets.txt -exclude-hosts 10.0.0.0/8

# Exclude hostnames
nuclei -list targets.txt -exclude-hosts internal.example.com
Short flag:
nuclei -list targets.txt -eh 192.168.1.1

IP version selection

Choose which IP version to use for scanning:
# IPv4 only (default)
nuclei -target example.com -ip-version 4

# IPv6 only
nuclei -target example.com -ip-version 6

# Both IPv4 and IPv6
nuclei -target example.com -ip-version 4,6
Short flag:
nuclei -target example.com -iv 4,6

Streaming mode

Process input without sorting, useful for large input sets:
nuclei -list large-targets.txt -stream
Streaming mode starts processing immediately without waiting to read all inputs, reducing memory usage for large target lists.

Passive mode

Enable passive HTTP response processing without sending new requests:
nuclei -list responses.txt -passive
Useful for analyzing HTTP responses from files using matchers/extractors.

Headless browser scans

Enable headless browser support for JavaScript-heavy applications:
# Enable headless mode
nuclei -target https://example.com -headless

# Show browser window (for debugging)
nuclei -target https://example.com -headless -show-browser

# Use system Chrome instead of bundled
nuclei -target https://example.com -headless -system-chrome
Short flags:
nuclei -target https://example.com -headless -sb -sc
Headless mode requires additional dependencies. On Linux, running as root will disable the sandbox.

Project mode

Avoid sending duplicate requests across multiple scans:
# Enable project mode with default path
nuclei -list targets.txt -project

# Use custom project path
nuclei -list targets.txt -project -project-path ./my-scan-project
Project mode tracks sent requests to avoid duplication, useful for continuous scanning workflows.

Automatic technology-based scanning

Automatically detect technologies and run relevant templates:
nuclei -target https://example.com -automatic-scan
Short flag:
nuclei -target https://example.com -as
This uses Wappalyzer technology detection to automatically select applicable templates.

New templates only

Run only templates added in the latest release:
nuclei -target https://example.com -new-templates
Or run templates from a specific version:
nuclei -target https://example.com -new-templates-version v9.6.0
Short flags:
nuclei -target https://example.com -nt
nuclei -target https://example.com -ntv v9.6.0

Validation mode

Validate template syntax without running scans:
nuclei -validate -templates custom-templates/
Disable strict syntax checking:
nuclei -validate -templates custom-templates/ -no-strict-syntax
Short flag:
nuclei -validate -t custom-templates/ -nss

Advanced options

Stop at first match

Stop processing a template when it first matches:
nuclei -target example.com -stop-at-first-match
Short flag:
nuclei -target example.com -spm
This may break template or workflow logic that depends on multiple matches.

Input read timeout

Set timeout for reading from input:
nuclei -list targets.txt -input-read-timeout 5m
Short flag:
nuclei -list targets.txt -irt 5m

Disable HTTP probing

Skip HTTP probing for non-URL inputs:
nuclei -list ips.txt -no-httpx
Short flag:
nuclei -list ips.txt -nh

Practical examples

Quick security assessment

nuclei -u https://example.com \
  -severity high,critical \
  -silent \
  -json-export findings.json

Comprehensive network scan

nuclei -target 10.0.0.0/24 \
  -rate-limit 100 \
  -concurrency 50 \
  -output results.txt \
  -stats

Resume large scan

# Initial scan
nuclei -list 10000-targets.txt \
  -resume large-scan.cfg \
  -output findings.txt

# Resume if interrupted
nuclei -resume large-scan.cfg

Technology detection scan

nuclei -target https://app.example.com \
  -automatic-scan \
  -severity medium,high,critical \
  -json-export tech-findings.json

Passive analysis

cat http-responses.txt | nuclei -passive -templates http/

Next steps

Target specification

Learn advanced target specification techniques

Template selection

Master template filtering and selection

Output options

Export results in various formats

Rate limiting

Control scan speed and performance

Build docs developers (and LLMs) love