一、Linux 系统安装与配置
安装命令
bash
# Debian/Ubuntu/Kali 系统
sudo apt-get update && sudo apt-get install nmap
# CentOS/RHEL 系统
sudo yum install nmap
# 验证安装
nmap --version
which nmap
权限说明:部分扫描类型(如 SYN 扫描、操作系统检测)需要 root 权限,建议使用 `sudo` 执行。
二、核心语法结构
bash
nmap [扫描类型] [选项] {目标地址}
**目标指定方式**:
nmap 192.168.1.1 # 单个IP
nmap example.com # 域名
nmap 192.168.1.1 192.168.1.2 # 多个IP(空格分隔)
nmap 192.168.1.1-100 # IP范围(1-100)
nmap 192.168.1.0/24 # CIDR网段(整个子网)
nmap -iL targets.txt # 从文件读取目标列表
三、扫描类型详解(核心指令)
- TCP 扫描(最常用)
| 命令 | 名称 | 原理 | 特点 | 权限 |
|---|---|---|---|---|
-sS |
SYN 半开扫描 | 发送 SYN 包,收到 SYN/ACK 即判定端口开放 | 速度快、隐蔽性强 | 需 root |
-sT |
TCP 全连接扫描 | 完成三次握手 | 最准确,但日志会记录 | 无需 root |
-sA |
ACK 扫描 | 发送 ACK 包探测防火墙规则 | 用于检测防火墙状态 | 需 root |
-sF |
FIN 扫描 | 发送 FIN 包,无响应则端口开放 | 仅 Linux,绕过部分防火墙 | 需 root |
-sN |
Null 扫描 | 发送所有标志位为 0 的包 | 极隐蔽,但兼容性差 | 需 root |
-sX |
Xmas 扫描 | FIN/URG/PUSH 标志位置 1 | 圣诞树包,绕过防火墙 | 需 root |
使用示例:
bash
sudo nmap -sS 192.168.1.1 # 标准 SYN 扫描
nmap -sT 192.168.1.1 # 无权限时用全连接扫描
sudo nmap -sF 192.168.1.1 -p 80 # 测试防火墙对 FIN 包的反应
- UDP 扫描
`
bash
sudo nmap -sU 192.168.1.1 # UDP 扫描(速度慢,需 root)
sudo nmap -sU -p 53,123,161 192.168.1.1 # 指定常见 UDP 端口
特点:UDP 无连接,扫描速度慢,常用于检测 DNS、SNMP 等服务。
- 主机发现(Ping 扫描)
bash
nmap -sn 192.168.1.0/24 # 仅发现存活主机,不扫描端口
nmap -Pn 192.168.1.1 # 跳过主机发现,直接端口扫描(用于防火墙禁 Ping)
nmap -PS 192.168.1.1 # TCP SYN Ping(默认行为)
nmap -PE 192.168.1.1 # ICMP Echo Ping
应用场景:`-sn` 适合快速清点网络资产;`-Pn` 可绕过禁 Ping 的主机。
四、选项参数大全(按功能分类)
🎯 端口控制 `-p`
bash
nmap -p 80 192.168.1.1 # 单个端口
nmap -p 80,443,22 192.168.1.1 # 多个端口(逗号分隔)
nmap -p 1-1000 192.168.1.1 # 端口范围
nmap -p- 192.168.1.1 # **所有端口**(1-65535)
nmap -p T:80,U:53 192.168.1.1 # 指定 TCP 80 和 UDP 53
🔍 服务版本探测 `-sV`
bash
nmap -sV 192.168.1.1 # 识别服务版本(如 Apache 2.4.41)
nmap -sV --version-intensity 5 # 强度 0-9,越高越准确但越慢
🖥️ 操作系统检测 `-O`
bash
sudo nmap -O 192.168.1.1 # 检测操作系统类型(Linux/Windows)
sudo nmap -O --osscan-guess 192.168.1.1 # 猜测最接近的系统
注意:需至少一个开放和一个关闭的端口,且需要 root 权限。
🚀 综合扫描 `-A`
bash
sudo nmap -A 192.168.1.1 # 启用操作系统检测、版本检测、脚本扫描和 traceroute
# 等价于 -O -sV -sC --traceroute
📊 输出格式 `-o`
bash
nmap -oN result.txt 192.168.1.1 # 普通文本(人类可读)
nmap -oX result.xml 192.168.1.1 # XML 格式(可导入工具分析)
nmap -oG result.grep 192.168.1.1 # Grep 友好格式(便于脚本处理)
nmap -oA result 192.168.1.1 # **同时输出三种格式**(result.nmap/.xml/.grep)
⚡ 扫描速度 `-T`
bash
nmap -T0 192.168.1.1 # 偏执模式(间隔 5 分钟,极慢)
nmap -T1 192.168.1.1 # 鬼祟模式(间隔 15 秒)
nmap -T2 192.168.1.1 # 礼貌模式(间隔 0.4 秒)
nmap -T3 192.168.1.1 # 普通模式(默认)
nmap -T4 192.168.1.1 # 激进模式(较快,推荐)
nmap -T5 192.168.1.1 # 疯狂模式(极快,可能丢包)
🛡️ 防火墙规避
bash
# 数据包分片(绕过包过滤防火墙)
sudo nmap -f 192.168.1.1 # 分成小 IP 包
sudo nmap -mtu 32 192.168.1.1 # 指定 MTU 大小(8 的倍数)
# 源端口欺骗
sudo nmap -g 53 192.168.1.1 # 使用知名端口 53(DNS)作为源端口
# 诱饵扫描(隐藏真实 IP)
sudo nmap -D RND:10 192.168.1.1 # 生成 10 个随机诱饵 IP
sudo nmap -D 192.168.1.5,192.168.1.6 192.168.1.1 # 指定诱饵 IP
🔧 脚本引擎 `--script` (NSE)
bash
# 漏洞检测
nmap --script vuln 192.168.1.1 # 全面漏洞扫描
# 服务识别
nmap --script http-title 192.168.1.1 # 获取网站标题
nmap --script ssl-enum-ciphers 192.168.1.1 # 检测 SSL 加密套件
# 认证爆破
nmap --script=auth 192.168.1.1 # 弱口令检测
nmap --script=brute 192.168.1.1 # 暴力破解(谨慎使用)
# SQL 注入 / XSS 检测(只能检测极简单漏洞)
nmap -sV --script=http-sql-injection 192.168.1.1
nmap -sV --script=http-unsafe-output-escaping 192.168.1.1
# 查看所有可用脚本
ls /usr/share/nmap/scripts/
nmap --script-help=script-name # 查看脚本说明
📢 详细程度控制
bash
nmap -v 192.168.1.1 # 显示详细信息(推荐)
nmap -vv 192.168.1.1 # 更详细
nmap -d 192.168.1.1 # 调试信息(开发使用)
nmap --packet-trace 192.168.1.1 # 显示收发数据包统计
🌐 网络接口 `-e` (多网卡环境)
bash
nmap -e eth1 192.168.1.1 # 指定使用 eth1 网卡扫描
⏸️ 恢复扫描 `-- resume`
bash
nmap -oN scan.log 192.168.1.0/24 # 先输出到日志
nmap --resume scan.log # 中断后可恢复
五、实战组合命令
场景 1:快速发现内网存活主机
bash
sudo nmap -sn 192.168.1.0/24 -oN live_hosts.txt
原理:仅 Ping 扫描,不探测端口,速度快。
场景 2:全面扫描单个目标*
bash
sudo nmap -A -T4 -p- 192.168.1.1 -oN full_scan.txt
参数解析:综合扫描 + 激进速度 + 所有端口 + 文本输出。
场景 3:绕过防火墙的隐秘扫描
bash
sudo nmap -sS -sV -T2 -f -g 53 -D RND:5 192.168.1.1
技巧:SYN 扫描 + 服务探测 + 低速 + 分片 + 源端口 53 + 5 个诱饵 IP。
场景 4:特定服务漏洞检测 *
bash
sudo nmap -sV --script vuln -p 80,443,8080 192.168.1.1 -oX vuln_report.xml
输出 :XML 格式便于后续自动化分析。
六、结果解读
端口状态说明
open :端口开放,有服务监听
closed :端口关闭,无服务但可达
filtered:被防火墙过滤,无法确定状态
open|filtered:开放或被过滤(UDP 扫描常见)
closed|filtered :关闭或被过滤
典型输出示例
bash
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3
80/tcp open http Apache httpd 2.4.29
443/tcp open ssl/http Apache httpd 2.4.29
3306/tcp open mysql MySQL 5.7.29
OS: Linux 3.7 - 4.15
七、注意事项与最佳实践
✅合法合规
仅在授权网络中使用,未经授权扫描他人设备属于违法行为
-
企业内部扫描需获得书面批准
-
遵守《网络安全法》和当地法律法规
⚠️ 技术注意
1.权限 :SYN 扫描 (`-sS`)、OS 检测 (`-O`)、UDP 扫描 (`-sU`) 需要 root 权限
-
速度:避免在生产环境使用 `-T5`,可能导致网络设备过载
-
防火墙:现代 IDS/IPS 能检测 Nmap 扫描特征,需配合 `-T2`、`-f`、`-D` 等规避
-
准确性:OS 检测需至少一个开放端口和一个关闭端口,否则结果不可靠
💡 学习建议
初学者 :从 `-sT`、`-sV`、`-p` 开始,逐步学习高级选项
实验环境 :使用 Docker 搭建靶场(如 VulnHub、Metasploitable)练习
持续学习 :定期查看 `man nmap` 更新,关注 NSE 脚本库扩展
八、快速查阅手册
| 功能类别 | 核心命令 | 记忆要点 |
|---|---|---|
| 基础扫描 | nmap 192.168.1.1 |
默认扫描前 1000 个 TCP 端口 |
| ** 存活探测 ** | nmap -sn 192.168.1.0/24 |
sn = Scan No port |
| ** 端口指定 ** | nmap -p 1-65535 |
p = Port |
| ** 服务版本 ** | nmap -sV |
sV = Service Version |
| ** 操作系统 ** | sudo nmap -O |
O = OS |
| ** 综合扫描 ** | sudo nmap -A |
A = All(最强模式) |
| ** SYN 扫描 ** | sudo nmap -sS |
sS = SYN Scan |
| ** 输出保存 ** | nmap -oN result.txt |
oN = Output Normal |
| ** 脚本扫描 ** | nmap --script vuln |
漏洞检测利器 |
| ** 速度控制 ** | nmap -T4 |
T4 = 激进但稳定 |
总结:Nmap 是网络安全领域的"瑞士军刀",掌握 `-sS`、`-sV`、`-O`、`-A`、`-p`、`-T`、 `--script` 这 7 大核心参数,即可应对 90% 的扫描场景。建议结合具体环境灵活组合,并始终牢记合法边界。