一、Nmap 是什么?
Nmap(Network Mapper):开源网络扫描 / 探测 / 安全审计工具,被称为 “网络安全界的瑞士军刀”。
- 核心能力:
- 主机发现:哪些 IP 在线
- 端口扫描:哪些端口开放 / 关闭 / 过滤
- 服务版本识别:端口上跑的是 Nginx/Apache/MySQL 及其版本
- 操作系统识别:Windows/Linux 及大致版本
- 脚本引擎 NSE:漏洞检测、弱口令、信息收集、爆破等
- 防火墙 / IDS 绕过:分片、伪装、慢速扫描等
- 适用场景:网络运维、渗透测试、资产测绘、应急响应。
复制代码
二、安装(Kali / Windows /macOS)
1、Kali Linux(自带,直接用)
2、Ubuntu/Debian
- sudo apt update
- sudo apt install nmap -y
复制代码
三、基础概念:端口状态
Nmap 扫描后端口会有 6 种状态:
-
open:端口开放,有服务监听
-
closed:端口关闭,无服务
-
filtered:被防火墙 / ACL 拦截,无法判断
-
unfiltered:可访问,但无法确定开放 / 关闭(常见于 ACK 扫描)
-
open|filtered:开放或被过滤,无法区分(UDP / 隐秘扫描常见)
-
closed|filtered:关闭或被过滤
四、主机发现(Ping 扫描)
只找存活主机,不扫端口。
1、简单网段扫描
- nmap -sn 192.168.1.0/24
- # -sn:只主机发现,不端口扫描(旧版是 -sP)
复制代码
2、多目标
- nmap -sn 192.168.1.1 192.168.1.100 baidu.com
复制代码
3、ip范围
- nmap -sn 192.168.1.100-200
复制代码
4、不发 Ping(绕过禁 Ping 主机)
- 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
- nmap -PE -PS 22,80 192.168.1.1
- #指定端口 22 80端口
复制代码
五、端口扫描(核心)
1、默认扫描(常用 1000 端口)
2、指定端口 -p
- 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 常用端口)
六、扫描类型
1、TCP 连接扫描 -sT(默认,无权限时自动用这个)
完成三次握手:SYN → SYN-ACK → ACK 容易被日志记录,不隐蔽 不需要管理员权限
- nmap -sT -p 80 192.168.1.1
复制代码
2、SYN 扫描 -sS(半开扫描,最常用)
只发 SYN,收到 SYN-ACK 判定开放,不回 ACK,直接发 RST 断开 隐蔽、快、不易被日志记录 需要 root / 管理员权限
- sudo nmap -sS -p 80 192.168.1.1
复制代码
3、UDP 扫描 -sU
UDP 无连接,判断逻辑: 收到 ICMP 端口不可达 → 端口 closed 无响应 → open|filtered 慢,常用于 DNS (53)、SNMP (161)
- sudo nmap -sU -p 53,161 192.168.1.1
复制代码
4、隐秘扫描(绕过防火墙 / IDS)
FIN 扫描 -sF 发 FIN 包;关闭端口回 RST,开放端口无响应
- sudo nmap -sF 192.168.1.1
复制代码
NULL 扫描 -sN 无任何标志位;原理同上
- 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
- sudo nmap -sA 192.168.1.1
复制代码
七、服务版本与操作系统识别
1、服务版本 -sV
- nmap -sV 192.168.1.1
- # 强度:--version-intensity 0-9(默认7)
- nmap -sV --version-intensity 9 192.168.1.1
复制代码
2、操作系统 -O
3、综合扫描 -A(最常用)
包含:主机发现 + 端口扫描 + 版本 + 系统 + 部分脚本
八、NSE 脚本引擎
NSE = Nmap Scripting Engine,Lua 脚本,内置上千个。
脚本分类(常用)
-
auth:认证 / 弱口令
-
brute:暴力破解
-
vuln:漏洞检测
-
http:Web 相关
-
smb:Windows 共享 / 漏洞
dns:DNS 信息收集
1、使用脚本
- # 单个脚本
- 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、常用实战脚本示例
- # 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
复制代码
九、输出格式
- # 文本(默认)
- 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:极速(易丢包)
- sudo nmap -sS -T4 -A 192.168.1.1
复制代码
十一、防火墙 / IDS 绕过技巧
1、分片 -f:包分片,绕过部分防火墙
2、诱饵 -D:伪造多个源 IP,混淆溯源
- sudo nmap -D 192.168.1.2,192.168.1.3,ME 192.168.1.1
- #ME = 本机真实 IP
复制代码
3、随机源端口 --source-port
- sudo nmap --source-port 53 192.168.1.1
复制代码
4、慢速扫描 + 随机间隔
- sudo nmap -T0 --scan-delay 10s 192.168.1.1
复制代码
补充:
- #-A = Aggressive(综合强力扫描)
-
- #-A = -sV + -O + -sC + 路由追踪
复制代码
|