Essential Nmap commands and techniques for network scanning, service detection, OS fingerprinting, and vulnerability assessment in penetration testing.
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.
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.
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
rustscan --helprustscan 2.3.0Fast Port Scanner built in Rust. WARNING Do not use this program against sensitive infrastructure since the specifiedserver 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
[draxel:~]$ nmap -hNmap 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 fileHOST 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 hostSCAN 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 scanPORT 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 aggressivelyTIMING 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 secondFIREWALL/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 checksumOUTPUT: -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 outputMISC: -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 80SEE THE MAN PAGE (https://nmap.org/book/man.html) FOR MORE OPTIONS AND EXAMPLES