Network cables connected to a switch

Nmap Cheatsheet

Nmap (Network Mapper) is a powerful open-source tool I use for network discovery, port scanning, and security auditing. It's essential in ethical hacking, penetration testing, and system administration for identifying hosts, open ports, services, and potential vulnerabilities across networks. My experience with Nmap includes using advanced features like the Nmap Scripting Engine (NSE) for automation and detailed reconnaissance, helping ensure networks are secure and well-documented.

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

CommandDescription
nmap -sP 127.0.0.1/24Ping 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

TCP Initial Scan (Top 1000 Ports)
sudo nmap -vv --reason -Pn -sS -sV -sC --version-all --osscan-guess --top-ports 1000 -oA logs/nmap/{target} {target}
TCP Full Scan (Full Ports)
sudo nmap -vv --reason -Pn -sS -sV -sC --version-all --osscan-guess -p- -oA logs/nmap/{target} {target}
UDP Scan Top 100 Ports
sudo nmap -vv --reason -Pn -sU -sV -sC --version-all --osscan-guess --top-ports 100 -oA logs/nmap/{target} {target}

Flags

Basic Flags

CommandDescription
nmap -sP 127.0.0.1/24Ping 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

FlagDescription
-sSTCP SYN scan (stealth scan).
-sTTCP connect scan (full TCP handshake).
-sATCP ACK scan (to map firewall rules).
-sWTCP Window scan (to determine open ports).
-sMTCP Maimon scan (stealth scan).

FlagDescription
-sUUDP scan.

FlagDescription
-sNTCP Null scan (no flags set).
-sFTCP FIN scan (only FIN flag set).
-sXTCP Xmas scan (FIN, PSH, URG flags set).

FlagDescription
--scanflagsCustom TCP flags.

FlagDescription
-sI zombie host[:probeport]Idle scan (uses a third-party host to scan).

FlagDescription
-sYSCTP INIT scan.
-sZSCTP COOKIE-ECHO scan.

FlagDescription
-sOIP protocol scan.

FlagDescription
-b {ftp relay}FTP bounce scan (uses an FTP server to scan).

Flags for Port Specification and Scan Order

FlagDescription
-p {port range}Specify ports to scan (e.g., -p 22,80,443).
-p-Scan all 65535 ports.
-p U:{PORT}Scan UDP ports.
-FFast scan (scan fewer ports).
-rScan 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

FlagDescription
-sVEnable service version detection.
--version-intensity {level}Set the intensity level for version detection (0-9).
--version-lightUse a light version detection scan.
--version-allUse all version detection probes.
--version-traceShow detailed version detection information.

Flags for Script Scans

FlagDescription
-sCUse the default set of scripts.
--script={script}Specify a specific script to run.
--script-args=n1=v1,[n2=v2,...]Pass arguments to scripts.
--script-traceShow detailed script execution information.
--script-updatedbUpdate the script database.
--script-helpShow help for a specific script.

Flags for OS Detection

FlagDescription
-OEnable OS detection.
--osscan-limitLimit OS detection to open/filtered ports.
--osscan-guessGuess OS if not confident.

Flags for Timing and Performance

FlagDescription
-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

FlagDescription
-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.
--badsumSend invalid TCP checksums.

Flags for Output File Options

FlagDescription
-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.
-vIncrease verbosity level.
-dIncrease debugging level.
--reasonDisplay the reason a port is in a particular state.
--openOnly show open or possibly open ports.
--packet-traceShow all packets sent/received.
--iflistPrint host interfaces and routes for debugging.
--log-errorsLog errors/warnings to the normal-format output file.
--append-outputAppend to rather than clobber specified output files.
--resume {filename}Resume an aborted scan.
--stylesheet {path/url}XSL stylesheet to transform XML output to HTML.
--webxmlReference stylesheet from Nmap.Org for more portable XML.
--no-stylesheetPrevent associating of XSL stylesheet with XML output.

Miscellaneous Flags

FlagDescription
-hShow help message.
-VShow version information.
-6Enable IPv6 scanning.
-AEnable OS detection, version detection, script scanning, and traceroute.
--datedir {directory}Use a specific directory for Nmap data files.
--send-ethSend raw Ethernet frames.
--send-ipSend raw IP packets.
--privilegedUse privileged ports.
--unprivilegedUse unprivileged ports.

Parsing Commands

CommandDescription
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.

GitHubbee-san/RustScan

16.7K

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:

Basic RustScan Command
rustscan -a {target} -u 5000 -b 4500 -r 1-65535 -- -sV -sC -A --script vuln

Help

RustScan Help
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 version

Help

Nmap Help
[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 EXAMPLES

Last updated on