一、Nmap 是什么?
Nmap(Network Mapper):开源网络扫描 / 探测 / 安全审计工具,被称为 "网络安全界的瑞士军刀"。
核心能力: 主机发现:哪些 IP 在线 端口扫描:哪些端口开放 / 关闭 / 过滤 服务版本识别:端口上跑的是 Nginx/Apache/MySQL 及其版本 操作系统识别:Windows/Linux 及大致版本 脚本引擎 NSE:漏洞检测、弱口令、信息收集、爆破等 防火墙 / IDS 绕过:分片、伪装、慢速扫描等 适用场景:网络运维、渗透测试、资产测绘、应急响应。
二、安装(Kali / Windows /macOS)
1、Kali Linux(自带,直接用)
bash
#检测版本
nmap -v
2、Ubuntu/Debian
bash
sudo apt update
sudo apt install nmap -y
三、基础概念:端口状态
Nmap 扫描后端口会有 6 种状态:
-
open:端口开放,有服务监听
-
closed:端口关闭,无服务
-
filtered:被防火墙 / ACL 拦截,无法判断
-
unfiltered:可访问,但无法确定开放 / 关闭(常见于 ACK 扫描)
-
open|filtered:开放或被过滤,无法区分(UDP / 隐秘扫描常见)
-
closed|filtered:关闭或被过滤
四、主机发现(Ping 扫描)
只找存活主机,不扫端口。
1、简单网段扫描
bash
nmap -sn 192.168.1.0/24
# -sn:只主机发现,不端口扫描(旧版是 -sP)
2、多目标
bash
nmap -sn 192.168.1.1 192.168.1.100 baidu.com
3、ip范围
bash
nmap -sn 192.168.1.100-200
4、不发 Ping(绕过禁 Ping 主机)
bash
nmap -Pn 192.168.1.1
# -Pn:跳过主机发现,直接当主机存活扫描端口
5、常用主机发现参数
-PE:ICMP Echo(普通 Ping)
-PS:TCP SYN Ping(发 SYN 包)
-PA:TCP ACK Ping(发 ACK 包)
-PU:UDP Ping
bash
nmap -PE -PS 22,80 192.168.1.1
#指定端口 22 80端口
五、端口扫描(核心)
1、默认扫描(常用 1000 端口)
nmap 192.168.1.1
2、指定端口 -p
bash
nmap -p 80 192.168.1.1 # 单个端口
nmap -p 22,80,443 192.168.1.1 # 多个端口
nmap -p 1-1000 192.168.1.1 # 端口范围
nmap -p- 192.168.1.1 # 全端口 1-65535(慢)
nmap -p U:53,T:80 192.168.1.1 # 指定 TCP/UDP 端口
3、快速扫描 -F(100 常用端口)
bash
nmap -F 192.168.1.1
六、扫描类型
1、TCP 连接扫描 -sT(默认,无权限时自动用这个)
完成三次握手:SYN → SYN-ACK → ACK 容易被日志记录,不隐蔽 不需要管理员权限
bash
nmap -sT -p 80 192.168.1.1
2、SYN 扫描 -sS(半开扫描,最常用)
只发 SYN,收到 SYN-ACK 判定开放,不回 ACK,直接发 RST 断开 隐蔽、快、不易被日志记录 需要 root / 管理员权限
bash
sudo nmap -sS -p 80 192.168.1.1
3、UDP 扫描 -sU
UDP 无连接,判断逻辑: 收到 ICMP 端口不可达 → 端口 closed 无响应 → open|filtered 慢,常用于 DNS (53)、SNMP (161)
bash
sudo nmap -sU -p 53,161 192.168.1.1
4、隐秘扫描(绕过防火墙 / IDS)
FIN 扫描 -sF 发 FIN 包;关闭端口回 RST,开放端口无响应
bash
sudo nmap -sF 192.168.1.1
NULL 扫描 -sN 无任何标志位;原理同上
bash
sudo nmap -sN 192.168.1.1
XMAS 扫描 -sX FIN+URG+PSH 置位(圣诞树包)
sudo nmap -sX 192.168.1.1
注意:-sF/-sN/-sX 仅对 Linux/Unix 有效;Windows 会直接丢弃异常包,全显示 filtered。
5、ACK 扫描 -sA(探测防火墙规则)
只发 ACK,用于判断防火墙是否拦截已建立连接的包 无法判断端口开放 / 关闭,只看 unfiltered/filtered
bash
sudo nmap -sA 192.168.1.1
七、服务版本与操作系统识别
1、服务版本 -sV
bash
nmap -sV 192.168.1.1
# 强度:--version-intensity 0-9(默认7)
nmap -sV --version-intensity 9 192.168.1.1
2、操作系统 -O
bash
sudo nmap -O 192.168.1.1
3、综合扫描 -A(最常用)
包含:主机发现 + 端口扫描 + 版本 + 系统 + 部分脚本
bash
sudo nmap -A 192.168.1.1
八、NSE 脚本引擎
NSE = Nmap Scripting Engine,Lua 脚本,内置上千个。
脚本分类(常用)
-
auth:认证 / 弱口令
-
brute:暴力破解
-
vuln:漏洞检测
-
http:Web 相关
-
smb:Windows 共享 / 漏洞
dns:DNS 信息收集
1、使用脚本
bash
# 单个脚本
nmap --script=http-title 192.168.1.1 # 拿网站标题
# 多个脚本
nmap --script=http-title,http-headers 192.168.1.1
# 整个分类
nmap --script vuln 192.168.1.1 # 全漏洞脚本
# 脚本+参数
nmap --script http-login --script-args userdb=users.txt,passdb=pass.txt 192.168.1.1
2、常用实战脚本示例
bash
# 1. 永恒之蓝(MS17-010)
nmap --script smb-vuln-ms17-010 -p 445 192.168.1.1
# 2. SMB 共享枚举
nmap --script smb-enum-shares -p 445 192.168.1.1
# 3. FTP 弱口令
nmap --script ftp-brute -p 21 192.168.1.1
# 4. MySQL 弱口令
nmap --script mysql-brute -p 3306 192.168.1.1
# 5. 网站目录扫描
nmap --script http-enum -p 80 192.168.1.1
九、输出格式
bash
# 文本(默认)
nmap -oN result.txt 192.168.1.1
# XML(可导入 Metasploit/nessus)
nmap -oX result.xml 192.168.1.1
# JSON
nmap -oJ result.json 192.168.1.1
# 所有格式
nmap -oA result 192.168.1.1
十、时序模板(扫描速度 / 规避检测)
-T0:最慢(规避 IDS,极慢)
-T1:慢速
-T2:中速(默认)
-T3:正常
-T4:快速(常用)
-T5:极速(易丢包)
bash
sudo nmap -sS -T4 -A 192.168.1.1
十一、防火墙 / IDS 绕过技巧
1、分片 -f:包分片,绕过部分防火墙
bash
sudo nmap -f 192.168.1.1
2、诱饵 -D:伪造多个源 IP,混淆溯源
bash
sudo nmap -D 192.168.1.2,192.168.1.3,ME 192.168.1.1
#ME = 本机真实 IP
3、随机源端口 --source-port
bash
sudo nmap --source-port 53 192.168.1.1
4、慢速扫描 + 随机间隔
bash
sudo nmap -T0 --scan-delay 10s 192.168.1.1
补充:
bash
#-A = Aggressive(综合强力扫描)
#-A = -sV + -O + -sC + 路由追踪