
Nmap Cheatsheet
Essential Nmap commands and techniques for network scanning, service detection, OS fingerprinting, and vulnerability assessment in penetration testing.
Nmap Is One of the Essentials
Nmap is typically one of the first tools I reach for during a security assessment (when applicable). It serves as a foundational utility in any cybersecurity professional’s toolkit, offering powerful capabilities for network discovery, port scanning, and service enumeration.
Key Features of Nmap:
- Host Discovery: Identifies devices on a network (e.g., ping sweeps).
- Port Scanning: Determines which ports are open on a target system.
- Service Detection: Identifies applications or services running on open ports.
- OS Detection: Attempts to determine the operating system of a target host.
- Scriptable Interaction: Uses the Nmap Scripting Engine (NSE) for custom vulnerability detection, backdoor detection, and advanced reconnaissance.
- Flexible Output: Supports multiple output formats (e.g., plain text, XML, grepable).
Common Use Cases:
- Mapping a network's topology.
- Detecting unauthorized devices or services.
- Finding vulnerable open ports.
- Conducting penetration tests.
Commands
Basic Commands
| Command | Description |
|---|---|
nmap -sP 127.0.0.1/24 | Ping scan to find live hosts in the subnet. |
nmap -p 1-65535 -sV -sS -T4 {target} | Scan all ports on the target with service version detection. |
nmap -v -sS -A -T4 {target} | Verbose scan with OS detection, service version detection, and script scanning. |
nmap -v -sS -A -T5 {target} | Aggressive scan with maximum speed. |
nmap -v -sV -O -sS -T5 {target} | Verbose scan with service version detection and OS detection. |
nmap -v -p 1-65535 -sV -O -sS -T4 {target} | Scan all ports with service version detection and OS detection. |
nmap -v -p 1-65535 -sV -O -sS -T5 {target} | Aggressive scan of all ports with service version detection and OS detection. |
Useful Commands
sudo nmap -vv --reason -Pn -sS -sV -sC --version-all --osscan-guess --top-ports 1000 -oA logs/nmap/{target} {target}sudo nmap -vv --reason -Pn -sS -sV -sC --version-all --osscan-guess -p- -oA logs/nmap/{target} {target}sudo nmap -vv --reason -Pn -sU -sV -sC --version-all --osscan-guess --top-ports 100 -oA logs/nmap/{target} {target}Flags
Basic Flags
| Command | Description |
|---|---|
nmap -sP 127.0.0.1/24 | Ping scan to find live hosts in the subnet. |
nmap -p 1-65535 -sV -sS -T4 {target} | Scan all ports on the target with service version detection. |
nmap -v -sS -A -T4 {target} | Verbose scan with OS detection, service version detection, and script scanning. |
nmap -v -sS -A -T5 {target} | Aggressive scan with maximum speed. |
nmap -v -sV -O -sS -T5 {target} | Verbose scan with service version detection and OS detection. |
nmap -v -p 1-65535 -sV -O -sS -T4 {target} | Scan all ports with service version detection and OS detection. |
nmap -v -p 1-65535 -sV -O -sS -T5 {target} | Aggressive scan of all ports with service version detection and OS detection. |
Flags for Various Scanning Techniques
| Flag | Description |
|---|---|
-sS | TCP SYN scan (stealth scan). |
-sT | TCP connect scan (full TCP handshake). |
-sA | TCP ACK scan (to map firewall rules). |
-sW | TCP Window scan (to determine open ports). |
-sM | TCP Maimon scan (stealth scan). |
| Flag | Description |
|---|---|
-sU | UDP scan. |
| Flag | Description |
|---|---|
-sN | TCP Null scan (no flags set). |
-sF | TCP FIN scan (only FIN flag set). |
-sX | TCP Xmas scan (FIN, PSH, URG flags set). |
| Flag | Description |
|---|---|
--scanflags | Custom TCP flags. |
| Flag | Description |
|---|---|
-sI zombie host[:probeport] | Idle scan (uses a third-party host to scan). |
| Flag | Description |
|---|---|
-sY | SCTP INIT scan. |
-sZ | SCTP COOKIE-ECHO scan. |
| Flag | Description |
|---|---|
-sO | IP protocol scan. |
| Flag | Description |
|---|---|
-b {ftp relay} | FTP bounce scan (uses an FTP server to scan). |
Flags for Port Specification and Scan Order
| Flag | Description |
|---|---|
-p {port range} | Specify ports to scan (e.g., -p 22,80,443). |
-p- | Scan all 65535 ports. |
-p U:{PORT} | Scan UDP ports. |
-F | Fast scan (scan fewer ports). |
-r | Scan ports in numerical order. |
--top-ports {number} | Scan the top N most common ports. |
--port-ratio {ratio} | Scan ports based on a specified ratio. |
Flags for Service and Version Detection
| Flag | Description |
|---|---|
-sV | Enable service version detection. |
--version-intensity {level} | Set the intensity level for version detection (0-9). |
--version-light | Use a light version detection scan. |
--version-all | Use all version detection probes. |
--version-trace | Show detailed version detection information. |
Flags for Script Scans
| Flag | Description |
|---|---|
-sC | Use the default set of scripts. |
--script={script} | Specify a specific script to run. |
--script-args=n1=v1,[n2=v2,...] | Pass arguments to scripts. |
--script-trace | Show detailed script execution information. |
--script-updatedb | Update the script database. |
--script-help | Show help for a specific script. |
Flags for OS Detection
| Flag | Description |
|---|---|
-O | Enable OS detection. |
--osscan-limit | Limit OS detection to open/filtered ports. |
--osscan-guess | Guess OS if not confident. |
Flags for Timing and Performance
| Flag | Description |
|---|---|
-T{0-5} | Set timing template (0=paranoid, 5=insane). |
--min-hostgroup {number} | Set minimum number of hosts per group. |
--max-hostgroup {number} | Set maximum number of hosts per group. |
--min-parallelism {number} | Set minimum number of parallel probes. |
--max-parallelism {number} | Set maximum number of parallel probes. |
--min-rtt-timeout {time} | Set minimum RTT timeout. |
--max-rtt-timeout {time} | Set maximum RTT timeout. |
--initial-rtt-timeout {time} | Set initial RTT timeout. |
--max-retries {number} | Set maximum number of retransmissions. |
--host-timeout {time} | Set timeout for host scan. |
--scan-delay {time} | Set delay between probes. |
--max-scan-delay {time} | Set maximum delay between probes. |
--min-rate {number} | Set minimum packet send rate. |
--max-rate {number} | Set maximum packet send rate. |
Flags for Firewalls IDS Evasion and Spoofing
| Flag | Description |
|---|---|
-f; --mtu {number} | Fragment packets to evade firewalls. |
-D {decoy} | Use decoy scanning to hide the source. |
-S {IP} | Spoof source address. |
-e {interface} | Use a specific network interface. |
-g {port} | Use a specific port for source routing. |
--source-port {port} | Use a specific source port. |
--proxies {url1,url2,...} | Use HTTP/SOCKS4 proxies. |
--data-length {number} | Append random data to packets. |
--ip-options {options} | Set custom IP options. |
--ttl {number} | Set the Time to Live (TTL) value. |
--spoof-mac {MAC} | Spoof the MAC address. |
--badsum | Send invalid TCP checksums. |
Flags for Output File Options
| Flag | Description |
|---|---|
-oN {file} | Output in normal format. |
-oX {file} | Output in XML format. |
-oG {file} | Output in greppable format. |
-oA {basename} | Output in all formats (normal, XML, greppable). |
-oS {file} | Output in script kiddie format. |
-v | Increase verbosity level. |
-d | Increase debugging level. |
--reason | Display the reason a port is in a particular state. |
--open | Only show open or possibly open ports. |
--packet-trace | Show all packets sent/received. |
--iflist | Print host interfaces and routes for debugging. |
--log-errors | Log errors/warnings to the normal-format output file. |
--append-output | Append to rather than clobber specified output files. |
--resume {filename} | Resume an aborted scan. |
--stylesheet {path/url} | XSL stylesheet to transform XML output to HTML. |
--webxml | Reference stylesheet from Nmap.Org for more portable XML. |
--no-stylesheet | Prevent associating of XSL stylesheet with XML output. |
Miscellaneous Flags
| Flag | Description |
|---|---|
-h | Show help message. |
-V | Show version information. |
-6 | Enable IPv6 scanning. |
-A | Enable OS detection, version detection, script scanning, and traceroute. |
--datedir {directory} | Use a specific directory for Nmap data files. |
--send-eth | Send raw Ethernet frames. |
--send-ip | Send raw IP packets. |
--privileged | Use privileged ports. |
--unprivileged | Use unprivileged ports. |
Parsing Commands
| Command | Description |
|---|---|
grep -oP '\d+/tcp\s+open' {file} | cut -d '/' -f1 | paste -sd, | Extract open TCP ports from the Nmap output file. |
Rustscan
RustScan is a modern, fast, and efficient port scanner written in Rust. It was created to significantly improve the speed of traditional port scanning by optimizing the scanning process and leveraging Rust's performance and safety.
bee-san/RustScan
19.1K
RustScan uses Nmap
Commands after the -- are passed to Nmap, allowing you to use RustScan as a fast port scanner that integrates seamlessly with Nmap's powerful features.
The following is a basic example of how to use RustScan:
rustscan -a {target} -u 5000 -b 4500 -r 1-65535 -- -sV -sC -A --script vulnHelp
rustscan --help
rustscan 2.3.0
Fast Port Scanner built in Rust. WARNING Do not use this program against sensitive infrastructure since the specified
server may not be able to handle this many socket connections at once. - Discord <http://discord.skerritt.blog> -
GitHub <https://github.com/RustScan/RustScan>
USAGE:
rustscan [OPTIONS] [-- <COMMAND>...]
OPTIONS:
-a, --addresses <ADDRESSES> A comma-delimited list or newline-delimited file of separated CIDRs, IPs,
or hosts to be scanned
-p, --ports <PORTS> A list of comma separated ports to be scanned. Example: 80,443,8080
-r, --range <RANGE> A range of ports with format start-end. Example: 1-1000
-n, --no-config Whether to ignore the configuration file or not
--no-banner Hide the banner
-c, --config-path <CONFIG_PATH> Custom path to config file
-g, --greppable Greppable mode. Only output the ports. No Nmap. Useful for grep or
outputting to a file
--accessible Accessible mode. Turns off features which negatively affect screen
readers
--resolver <RESOLVER> A comma-delimited list or file of DNS resolvers
-b, --batch-size <BATCH_SIZE> The batch size for port scanning, it increases or slows the speed of
scanning. Depends on the open file limit of your OS. If you do 65535 it
will do every port at the same time. Although, your OS may not support
this [default: 4500]
-t, --timeout <TIMEOUT> The timeout in milliseconds before a port is assumed to be closed
[default: 1500]
--tries <TRIES> The number of tries before a port is assumed to be closed. If set to 0,
rustscan will correct it to 1 [default: 1]
-u, --ulimit <ULIMIT> Automatically ups the ULIMIT with the value you provided
--scan-order <SCAN_ORDER> The order of scanning to be performed. The "serial" option will scan
ports in ascending order while the "random" option will scan ports
randomly [default: serial] [possible values: serial, random]
--scripts <SCRIPTS> Level of scripting required for the run [default: default] [possible
values: none, default, custom]
--top Use the top 1000 ports
-e, --exclude-ports <EXCLUDE_PORTS> A list of comma separated ports to be excluded from scanning. Example:
80,443,8080
-x, --exclude-addresses <EXCLUDE_ADDRESSES> A list of comma separated CIDRs, IPs, or hosts to be excluded from
scanning
--udp UDP scanning mode, finds UDP ports that send back responses
-h, --help Print help
-V, --version Print versionHelp
[draxel:~]$ nmap -h
Nmap 7.95 ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
TARGET SPECIFICATION:
Can pass hostnames, IP addresses, networks, etc.
Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-iL <inputfilename>: Input from list of hosts/networks
-iR <num hosts>: Choose random targets
--exclude <host1[,host2][,host3],...>: Exclude hosts/networks
--excludefile <exclude_file>: Exclude list from file
HOST DISCOVERY:
-sL: List Scan - simply list targets to scan
-sn: Ping Scan - disable port scan
-Pn: Treat all hosts as online -- skip host discovery
-PS/PA/PU/PY[portlist]: TCP SYN, TCP ACK, UDP or SCTP discovery to given ports
-PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes
-PO[protocol list]: IP Protocol Ping
-n/-R: Never do DNS resolution/Always resolve [default: sometimes]
--dns-servers <serv1[,serv2],...>: Specify custom DNS servers
--system-dns: Use OS's DNS resolver
--traceroute: Trace hop path to each host
SCAN TECHNIQUES:
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
-sU: UDP Scan
-sN/sF/sX: TCP Null, FIN, and Xmas scans
--scanflags <flags>: Customize TCP scan flags
-sI <zombie host[:probeport]>: Idle scan
-sY/sZ: SCTP INIT/COOKIE-ECHO scans
-sO: IP protocol scan
-b <FTP relay host>: FTP bounce scan
PORT SPECIFICATION AND SCAN ORDER:
-p <port ranges>: Only scan specified ports
Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
--exclude-ports <port ranges>: Exclude the specified ports from scanning
-F: Fast mode - Scan fewer ports than the default scan
-r: Scan ports sequentially - don't randomize
--top-ports <number>: Scan <number> most common ports
--port-ratio <ratio>: Scan ports more common than <ratio>
SERVICE/VERSION DETECTION:
-sV: Probe open ports to determine service/version info
--version-intensity <level>: Set from 0 (light) to 9 (try all probes)
--version-light: Limit to most likely probes (intensity 2)
--version-all: Try every single probe (intensity 9)
--version-trace: Show detailed version scan activity (for debugging)
SCRIPT SCAN:
-sC: equivalent to --script=default
--script=<Lua scripts>: <Lua scripts> is a comma separated list of
directories, script-files or script-categories
--script-args=<n1=v1,[n2=v2,...]>: provide arguments to scripts
--script-args-file=filename: provide NSE script args in a file
--script-trace: Show all data sent and received
--script-updatedb: Update the script database.
--script-help=<Lua scripts>: Show help about scripts.
<Lua scripts> is a comma-separated list of script-files or
script-categories.
OS DETECTION:
-O: Enable OS detection
--osscan-limit: Limit OS detection to promising targets
--osscan-guess: Guess OS more aggressively
TIMING AND PERFORMANCE:
Options which take <time> are in seconds, or append 'ms' (milliseconds),
's' (seconds), 'm' (minutes), or 'h' (hours) to the value (e.g. 30m).
-T<0-5>: Set timing template (higher is faster)
--min-hostgroup/max-hostgroup <size>: Parallel host scan group sizes
--min-parallelism/max-parallelism <numprobes>: Probe parallelization
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>: Specifies
probe round trip time.
--max-retries <tries>: Caps number of port scan probe retransmissions.
--host-timeout <time>: Give up on target after this long
--scan-delay/--max-scan-delay <time>: Adjust delay between probes
--min-rate <number>: Send packets no slower than <number> per second
--max-rate <number>: Send packets no faster than <number> per second
FIREWALL/IDS EVASION AND SPOOFING:
-f; --mtu <val>: fragment packets (optionally w/given MTU)
-D <decoy1,decoy2[,ME],...>: Cloak a scan with decoys
-S <IP_Address>: Spoof source address
-e <iface>: Use specified interface
-g/--source-port <portnum>: Use given port number
--proxies <url1,[url2],...>: Relay connections through HTTP/SOCKS4 proxies
--data <hex string>: Append a custom payload to sent packets
--data-string <string>: Append a custom ASCII string to sent packets
--data-length <num>: Append random data to sent packets
--ip-options <options>: Send packets with specified ip options
--ttl <val>: Set IP time-to-live field
--spoof-mac <mac address/prefix/vendor name>: Spoof your MAC address
--badsum: Send packets with a bogus TCP/UDP/SCTP checksum
OUTPUT:
-oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3,
and Grepable format, respectively, to the given filename.
-oA <basename>: Output in the three major formats at once
-v: Increase verbosity level (use -vv or more for greater effect)
-d: Increase debugging level (use -dd or more for greater effect)
--reason: Display the reason a port is in a particular state
--open: Only show open (or possibly open) ports
--packet-trace: Show all packets sent and received
--iflist: Print host interfaces and routes (for debugging)
--append-output: Append to rather than clobber specified output files
--resume <filename>: Resume an aborted scan
--noninteractive: Disable runtime interactions via keyboard
--stylesheet <path/URL>: XSL stylesheet to transform XML output to HTML
--webxml: Reference stylesheet from Nmap.Org for more portable XML
--no-stylesheet: Prevent associating of XSL stylesheet w/XML output
MISC:
-6: Enable IPv6 scanning
-A: Enable OS detection, version detection, script scanning, and traceroute
--datadir <dirname>: Specify custom Nmap data file location
--send-eth/--send-ip: Send using raw ethernet frames or IP packets
--privileged: Assume that the user is fully privileged
--unprivileged: Assume the user lacks raw socket privileges
-V: Print version number
-h: Print this help summary page.
EXAMPLES:
nmap -v -A scanme.nmap.org
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80
SEE THE MAN PAGE (https://nmap.org/book/man.html) FOR MORE OPTIONS AND EXAMPLESReferences
MITRE ATT&CK Techniques
- T1046 - Network Service Discovery - Port scanning and service detection
- T1595.001 - Active Scanning: Scanning IP Blocks - Network reconnaissance
- T1595.002 - Active Scanning: Vulnerability Scanning - NSE vulnerability scripts
- T1590 - Gather Victim Network Information - Network mapping and topology discovery
- T1018 - Remote System Discovery - Host discovery via ping sweeps
Official Documentation
- Nmap Official Site - Project homepage
- Nmap Reference Guide - Comprehensive manual
- NSE Script Library - Nmap Scripting Engine documentation
- Nmap Network Scanning Book - Free online book by Gordon Lyon
Security Resources
- OWASP Testing Guide: Network Infrastructure - Security testing methodology
- SANS: Nmap Scanning Techniques - Advanced scanning strategies
Related Tools
- RustScan GitHub - Fast port scanner with Nmap integration
- Masscan - High-speed network scanner
Last updated on
Nmap Advanced Guide: Mastering Network Reconnaissance
Advanced Nmap techniques for penetration testing including NSE scripting, IDS/firewall evasion, large-scale scanning, and real-world attack scenarios.
Sliver C2 Cheatsheet
Complete cheatsheet for Sliver C2 framework covering payload generation, listeners, beaconing, sessions, and post-exploitation for red team operations.