Nmap:
Mastering Network Scanning for Security and Exploration
Welcome
to this in-depth tutorial on Nmap (Network Mapper), one of the most powerful
and versatile open-source tools for network discovery and security auditing.
This guide is designed to be published on a WordPress webpage, so I've
formatted it with headings, subheadings, code blocks, lists, and emphasis for
easy reading and SEO optimization. Whether you're a beginner or an advanced
user, this tutorial covers everything from installation to advanced syntax,
options, and best practices.
Important
Disclaimer: Nmap is a tool for ethical network
scanning. Always obtain explicit permission before scanning any network or host
you do not own. Unauthorized scanning can be illegal under laws like the
Computer Fraud and Abuse Act (CFAA) in the US or similar regulations elsewhere.
Use Nmap responsibly for purposes like security audits, network inventory, or
educational learning. This tutorial assumes good intent and does not endorse or
provide guidance for unlawful activities.
What is Nmap?
Nmap
is a free, open-source utility for discovering hosts and services on a computer
network. It sends specially crafted packets to target hosts and analyzes the
responses to map out the network topology, identify open ports, detect running
services, and even guess operating systems. Originally released in 1997 by
Gordon Lyon (Fyodor), Nmap has become a staple in cybersecurity toolkits.
Key
use cases:
- Network inventory and
management
- Vulnerability assessment
- Firewall and IDS testing
- Service monitoring
Nmap
supports dozens of scan techniques and is highly customizable via command-line
options. It's available for Windows, Linux, macOS, and other platforms.
Installing Nmap
Before
diving into usage, install Nmap on your system.
Linux (Debian/Ubuntu)
bash
sudo apt update
sudo apt install nmap
Linux (Fedora/RHEL)
bash
sudo dnf install nmap
macOS (via Homebrew)
bash
brew install nmap
Windows
Download
the installer from the official site: https://nmap.org/download.html.
Run the .exe file and follow the prompts. It includes Zenmap (GUI frontend) by
default.
Verify
installation:
bash
nmap --version
This
should output something like Nmap version 7.95 ( https://nmap.org ) or newer.
Basic Nmap Syntax
The
general syntax for Nmap is:
bash
nmap [Scan Type(s)] [Options] {target specification}
- Scan Type(s): Defines the scanning method (e.g., TCP SYN scan).
- Options: Flags to modify behavior (e.g., -v for verbose).
- Target Specification: The host(s) to scan, which can be:
- Single IP: 192.168.1.1
- Hostname: scanme.nmap.org
- Range: 192.168.1.1-255
- CIDR notation: 192.168.1.0/24
- List from file: -iL
targets.txt
- Random hosts: -iR 100 (scans
100 random hosts)
- Exclude: --exclude 192.168.1.1
or --excludefile exclude.txt
Example
basic scan:
bash
nmap scanme.nmap.org
This
performs a default TCP scan on 1000 common ports.
Host Discovery Options
Host
discovery (ping scan) identifies live hosts before detailed scanning. By
default, Nmap pings hosts to check if they're up.
- -sn: Ping scan (no port scan).
Syntax: nmap -sn 192.168.1.0/24
- -Pn: Treat all hosts as online
(skip discovery). Useful for firewalled networks. Syntax: nmap -Pn target
- -PS [portlist]: TCP SYN ping.
Syntax: nmap -PS80,443 target (sends SYN to ports 80 and 443)
- -PA [portlist]: TCP ACK ping.
Syntax: nmap -PA target
- -PU [portlist]: UDP ping.
Syntax: nmap -PU target
- -PY [portlist]: SCTP INIT ping.
Syntax: nmap -PY target
- -PE: ICMP echo request. Syntax:
nmap -PE target
- -PP: ICMP timestamp. Syntax:
nmap -PP target
- -PM: ICMP netmask request.
Syntax: nmap -PM target
- -PO [protocollist]: IP protocol
ping. Syntax: nmap -PO target
- -PR: ARP ping (local networks).
Syntax: nmap -PR target
- --traceroute: Trace path to
host. Syntax: nmap --traceroute target
- -n: No DNS resolution. Syntax:
nmap -n target
- -R: Always resolve DNS. Syntax:
nmap -R target
- --system-dns: Use system DNS
resolver. Syntax: nmap --system-dns target
- --dns-servers
<server1>[,<server2>[,...]]: Custom DNS servers. Syntax: nmap
--dns-servers 8.8.8.8 target
Example:
Discover hosts on a subnet without port scanning.
bash
nmap -sn 192.168.1.0/24
Port Scanning Techniques
Nmap
supports various port scanning methods to detect open, closed, or filtered
ports.
Port
states:
- open: Accepting connections.
- closed: Not listening, but
accessible.
- filtered: Blocked by firewall.
- unfiltered: Accessible but
status unknown.
- open|filtered: Can't determine.
- closed|filtered: Can't
determine.
Options:
- -sS: TCP SYN scan (default,
stealthy). Syntax: nmap -sS target
- -sT: TCP connect scan (full
handshake). Syntax: nmap -sT target
- -sA: TCP ACK scan (for firewall
rules). Syntax: nmap -sA target
- -sW: TCP Window scan. Syntax:
nmap -sW target
- -sM: TCP Maimon scan. Syntax:
nmap -sM target
- -sU: UDP scan. Syntax: nmap -sU
target
- -sN: TCP Null scan (no flags).
Syntax: nmap -sN target
- -sF: TCP FIN scan. Syntax: nmap
-sF target
- -sX: TCP Xmas scan (FIN, PSH,
URG flags). Syntax: nmap -sX target
- -sY: SCTP INIT scan. Syntax:
nmap -sY target
- -sZ: SCTP COOKIE ECHO scan.
Syntax: nmap -sZ target
- -sO: IP protocol scan. Syntax:
nmap -sO target
- -b <FTP relay host>: FTP
bounce scan. Syntax: nmap -b ftp-relay target (rare, legacy)
Port
specification:
- -p <port ranges>: Scan
specific ports. Syntax: nmap -p 1-1024,8080 target (ports 1-1024 and 8080)
- -p-: All ports (1-65535).
Syntax: nmap -p- target
- --exclude-ports <port
ranges>: Exclude ports. Syntax: nmap --exclude-ports 25 target
- -F: Fast scan (top 100 ports).
Syntax: nmap -F target
- -r: Scan ports consecutively.
Syntax: nmap -r target
- --port-ratio <ratio>:
Scan ports with frequency above ratio. Syntax: nmap --port-ratio 0.9
target
- --top-ports <number>:
Scan top N ports. Syntax: nmap --top-ports 50 target
Example:
SYN scan on common ports.
bash
nmap -sS -p 80,443 scanme.nmap.org
Service and Version Detection
Detect
service names, versions, and extra info on open ports.
- -sV: Version detection. Syntax:
nmap -sV target
- --version-intensity
<0-9>: Intensity level (higher = more probes). Syntax: nmap
--version-intensity 5 target
- --version-light: Intensity 2.
Syntax: nmap --version-light target
- --version-all: Intensity 9.
Syntax: nmap --version-all target
- --version-trace: Trace version
scan. Syntax: nmap --version-trace target
Example:
bash
nmap -sV scanme.nmap.org
Output
might show 80/tcp open http Apache httpd 2.4.7.
OS Detection
Guess
the operating system, version, and device type.
- -O: Enable OS detection.
Syntax: nmap -O target
- --osscan-limit: Limit to
promising targets. Syntax: nmap --osscan-limit target
- --osscan-guess: Aggressive
guessing. Syntax: nmap --osscan-guess target
- --max-os-tries <number>:
Max tries. Syntax: nmap --max-os-tries 3 target
Example:
bash
nmap -O scanme.nmap.org
Output:
OS details: Linux 3.2 - 4.4.
Nmap Scripting Engine (NSE)
NSE
allows scripting for automation, vulnerability detection, etc. Scripts are in
Lua.
- -sC: Default scripts. Syntax:
nmap -sC target
- --script <script(s)>: Run
specific scripts. Syntax: nmap --script http-title target or --script
"http-*" target (wildcard)
- --script-args <args>:
Pass arguments. Syntax: nmap --script http-title --script-args
http.useragent="Mozilla/5.0" target
- --script-args-file
<file>: Args from file.
- --script-trace: Trace script
execution.
- --script-updatedb: Update
script DB.
- Categories: auth, broadcast,
brute, default, discovery, dos, exploit, external, fuzzer, intrusive,
malware, safe, version, vuln.
Example:
Run vulnerability scripts.
bash
nmap --script vuln target
temp.sh:
line 1: nmap: command not found
Timing and Performance Options
Control
scan speed to avoid detection or overload.
- -T <0-5>: Timing template
(0=paranoid, 5=insane). Syntax: nmap -T4 target (aggressive)
- --min-hostgroup <num>:
Min parallel hosts. Syntax: nmap --min-hostgroup 50 target
- --max-hostgroup <num>:
Max parallel hosts.
- --min-parallelism <num>:
Min probes in parallel.
- --max-parallelism <num>:
Max probes in parallel.
- --min-rtt-timeout <time>:
Min RTT timeout (e.g., 100ms).
- --max-rtt-timeout <time>:
Max RTT timeout.
- --initial-rtt-timeout
<time>: Initial RTT.
- --max-retries <num>: Max
probe retries.
- --host-timeout <time>:
Timeout per host (e.g., 30m).
- --script-timeout <time>:
Timeout per script.
- --scan-delay <time>:
Delay between probes.
- --max-scan-delay <time>:
Max delay.
- --min-rate <num>: Min
packets per second.
- --max-rate <num>: Max
packets per second.
- --defeat-rst-ratelimit: Ignore
RST rate limits.
- --defeat-icmp-ratelimit: Ignore
ICMP rate limits.
- --nsock-engine <engine>:
Select engine (e.g., epoll).
Example:
Fast scan.
bash
nmap -T4 -F target
Firewall/IDS Evasion and Spoofing
Techniques
to bypass defenses.
- -f: Fragment packets. Syntax:
nmap -f target (or --mtu <size> for custom MTU)
- -D
<decoy1>[,<decoy2>[,ME][,...]]: Decoy scans. Syntax: nmap -D
decoy1,decoy2,ME target (ME = your IP)
- -S <spoof IP>: Spoof
source IP. Syntax: nmap -S fake.ip target (requires raw sockets)
- -e <interface>: Use
specific interface. Syntax: nmap -e eth0 target
- -g/--source-port <port>:
Spoof source port. Syntax: nmap -g 53 target
- --proxies
<proxy1>[,<proxy2>,...]: Use HTTP/SOCKS proxies.
- --data <hex string>:
Append data to packets.
- --data-string <string>:
Append string.
- --data-length <num>:
Append random data.
- --ip-options <options>:
IP options.
- --ttl <val>: Set TTL.
Syntax: nmap --ttl 64 target
- --spoof-mac <mac>: Spoof
MAC. Syntax: nmap --spoof-mac 00:11:22:33:44:55 target (or random/ vendor)
- --badsum: Bad checksum. Syntax:
nmap --badsum target
Example:
Fragmented scan with decoys.
bash
nmap -f -D decoy1,decoy2 target
Output Options
Save
scan results in various formats.
- -oN <file>: Normal
output. Syntax: nmap -oN scan.txt target
- -oX <file>: XML output.
Syntax: nmap -oX scan.xml target
- -oS <file>: Script kiddie
output.
- -oG <file>: Grepable
output.
- -oA <basename>: All
formats (normal, XML, grepable).
- -v: Increase verbosity (use -vv
or -vvv for more).
- -d: Increase debugging ( -dd,
etc.).
- --reason: Show reasons for port
states.
- --stats-every <time>:
Periodic stats.
- --packet-trace: Trace packets.
- --open: Show only open ports.
- --iflist: List interfaces.
- --append-output: Append to
files.
- --resume <file>: Resume
aborted scan.
- --noninteractive: No runtime
interaction.
- --stylesheet <path/URL>:
XML stylesheet.
- --webxml: Use Nmap.org
stylesheet.
- --no-stylesheet: No stylesheet.
Example:
Save in all formats.
bash
nmap -oA scan_results target
Miscellaneous Options
- -6: IPv6 scanning. Syntax: nmap
-6 target
- -A: Aggressive (OS, version,
script, traceroute). Syntax: nmap -A target
- --datadir <dir>: Custom
data dir.
- --servicedb <file>:
Custom services file.
- --versiondb <file>:
Custom versions file.
- --send-eth: Send at Ethernet
layer.
- --send-ip: Send at IP layer.
- --privileged: Assume privileged
user.
- --unprivileged: Assume
unprivileged.
- -V: Print version.
- -h: Help.
Runtime Interaction
During
scans:
- v/V: Increase/decrease
verbosity.
- d/D: Increase/decrease debug.
- p/P: Enable/disable packet
tracing.
- Any key: Show status.
Advanced Examples
- Comprehensive scan:
bash
nmap
-A -T4 -p- scanme.nmap.org
- Vulnerability check with NSE:
bash
nmap
--script vuln -sV target
- Scan a network for specific
vulnerabilities:
bash
nmap
-Pn -p 445 --script smb-vuln* 192.168.1.0/24
- OS fingerprinting with
verbosity:
bash
nmap
-O -v target
Best Practices and Tips
- Start with basic scans and
escalate as needed.
- Use -v for insights into the
scan process.
- Combine options like -sS -sV -O
for detailed info.
- For large networks, use timing
options to avoid overwhelming resources.
- Regularly update Nmap and NSE
scripts: nmap --script-updatedb.
- Integrate with tools like
Metasploit or Wireshark for deeper analysis.
- Read the official book: Nmap
Network Scanning for more examples.
Conclusion
This
tutorial covers the full spectrum of Nmap's syntax and options, providing you
with the knowledge to perform effective network scans. Remember, with great
power comes great responsibility—always scan ethically. If you have questions,
check the official documentation at https://nmap.org/ or join the Nmap community.
Feel
free to customize this post with images, such as screenshots of scan outputs,
to enhance engagement on your WordPress site. Happy scanning!
Last
updated based on Nmap 7.95; check for updates as features evolve.