Nmap 初学者完整教程(中文)
1. 简介:Nmap 是什么?
Nmap(Network Mapper)是一个开源的网络扫描和主机发现工具,用于:
-
扫描主机是否在线(主机发现)
-
探测开放端口与服务
-
识别服务版本与操作系统(指纹识别)
-
使用脚本(NSE)查找更细致的信息或漏洞
常被用于网络运维、渗透测试与安全评估。请只在你有权限的网络/主机上运行。
2. 安装(快速)
-
Linux(Debian/Ubuntu)
sudo apt update sudo apt install nmap -y
-
macOS(brew)
brew install nmap
-
Windows
-
下载官方安装包(安装时会附带Zenmap GUI 可选)。安装后在 PowerShell 或 CMD 里运行
nmap
。
-
-
检查版本
nmap --version
3. 基本用法与概念
语法:
nmap [选项] <目标>
目标可以是单个 IP(192.168.1.10
)、IP 范围(192.168.1.1-254
)、CIDR(192.168.1.0/24
)或域名。
3.1 简单主机发现
-
Ping 扫描(快速看哪些主机在线)
nmap -sn 192.168.1.0/24
-sn
仅做主机发现,不做端口扫描。
3.2 常见端口扫描(TCP Connect)
-
最直接(不需 root)
nmap -sT 192.168.1.100
-sT
使用系统 TCP connect,速度较慢但兼容性高。
3.3 SYN 扫描(半开/隐蔽)
-
需要 root/管理员权限
sudo nmap -sS 192.168.1.100
-sS
更快、常用于渗透测试场景。
3.4 扫描指定端口或端口范围
nmap -p 22,80,443 192.168.1.100 # 指定端口 nmap -p 1-1000 192.168.1.100 # 端口范围 nmap --top-ports 100 example.com # 扫描最常用的100端口
3.5 服务/版本探测
sudo nmap -sV 192.168.1.100
-sV
会尝试与开放端口的服务握手以识别服务与版本。
3.6 操作系统识别
sudo nmap -O 192.168.1.100
-O
做 OS 指纹识别(需要较多探测包,可能被防火墙检测到)。
3.7 综合扫描(快速获取全家桶信息)
sudo nmap -A 192.168.1.100
-A
= OS 指纹 + 版本探测 + 脚本扫描 + 路由器检测 等(侵入性更强)。
4. Nmap 脚本引擎(NSE)
NSE 是 Nmap 的强项:内置大量脚本用于发现漏洞、抓取 banners、进行认证测试等。
-
列表所有脚本:
ls /usr/share/nmap/scripts # Linux 常见路径 nmap --script-help
-
使用单个脚本:
sudo nmap --script smb-vuln-ms17-010 -p445 192.168.1.105
-
使用脚本类别:
sudo nmap --script "vuln" 192.168.1.105
脚本非常强大但也可能干扰目标(产生更多流量或触发检测)。
5. UDP 扫描(注意慢且噪声大)
sudo nmap -sU -p 53,123 192.168.1.100
UDP 扫描通常更慢、误报更多,且许多设备对 UDP 探测不响应。
6. 扫描性能/节奏控制
-
Timing(速度模板):
-T0
最慢(最隐蔽),-T5
最快(最吵)sudo nmap -sS -T4 192.168.1.0/24
-
指定最大并发探针等更精细控制:
--min-rate
/--max-retries
/--host-timeout
等(高级用法)。
7. 输出保存(方便后续分析)
-
普通文本:
nmap -oN result.txt 192.168.1.100
-
XML(便于机器解析):
nmap -oX result.xml 192.168.1.100
-
Greppable(旧格式):
nmap -oG result.gnmap 192.168.1.100
-
同时保存三种:
nmap -oA myscan 192.168.1.100 # 生成 myscan.nmap/.xml/.gnmap
8. 实际示例(带解释)
示例 A:扫描整个局域网常见端口并识别服务
sudo nmap -sS -sV --top-ports 100 -T4 192.168.1.0/24 -oA lan_top100
解释:
-
-sS
SYN 扫描(需 root) -
-sV
服务版本识别 -
--top-ports 100
扫描最常见的100个端口 -
-T4
加快速度(局域网通常可用) -
-oA lan_top100
保存结果
示例 B:只想快速查看某台机器哪些端口开放
nmap -Pn -p 1-1024 10.0.0.5
解释:
-
-Pn
跳过 ping(强制认为主机在线,适用于被 ICMP/ping 阻挡的主机) -
-p 1-1024
扫描前 1024 个端口
示例 C:运行一个漏洞脚本
sudo nmap --script vuln 203.0.113.5
解释:运行所有标记为 “vuln” 的脚本来查找已知漏洞(慎用,可能触发告警或破坏性行为)。
9. 常见注意事项与陷阱
-
权限:某些扫描(如 -sS, -O)需要 root/管理员权限。
-
误报/漏报:被防火墙或 IDS/IPS 拦截会导致漏报,服务可能设置了反扫描策略。
-
合法性:一定只在你有权限的主机/网络上扫描。未经授权扫描可能违法或触犯管理规定。
-
效率:大网段全文扫描很耗时,先用
-sn
找在线主机,再对在线主机做端口扫描。 -
噪音:
-T5
、大量并发探针或频繁扫描会产生明显网络噪音并触发监控。 -
结果解释:开放端口并不等于漏洞存在;还需后续验证与人工判断。
10. 学习路径(建议练习)
-
在本地虚拟机(或家里路由器)环境练习,先用
-sn
、-sT
、-sS
、-sV
、-O
。 -
用
-oA
保存输出并用文本工具对比结果。 -
学会简单的 NSE 脚本:先用
--script-help
查功能,再逐个测试。 -
学习如何组合 Nmap 与其它工具(如
masscan
做超高速端口发现,再用 nmap 深扫;或把 XML 导入 Nessus/其他分析工具)。 -
阅读 Nmap 官方文档和
man nmap
(本地man nmap
非常详细)。
11. 速查表(常用命令速记)
nmap -sn 192.168.1.0/24 # 主机发现 sudo nmap -sS 192.168.1.100 # SYN 扫描 nmap -sT 192.168.1.100 # TCP connect sudo nmap -sU -p 53 192.168.1.1 # UDP 扫描(示例) sudo nmap -sV 192.168.1.100 # 服务版本识别 sudo nmap -O 192.168.1.100 # OS 指纹 sudo nmap -A 192.168.1.100 # Aggressive 扫描(全能) nmap -p 22,80,443 example.com # 指定端口 nmap -p 1-65535 192.168.1.100 # 全端口扫描 nmap -oA scanname target # 输出三种格式 nmap --script vuln target # 运行 vuln 脚本集合
12. 进一步资源(自学建议)
-
man nmap
/nmap --help
-
官方 Nmap 文档与书籍(如《Nmap Network Scanning》)
-
在受控环境中练习(VM、靶场如 Metasploitable)
全部 0条评论