一、Nmap 基础命令
Nmap(Network Mapper)是网络探测和安全审计的核心工具,支持主机发现、端口扫描、版本检测、操作系统识别等功能。以下是常用命令示例:
1. 扫描单个目标
nmap 192.168.1.1 # 扫描单个 IP 的开放端口和服务
nmap example.com # 扫描域名对应的主机(自动解析 IP)
2. 扫描网段
nmap 192.168.1.0/24 # 扫描整个 C 类网段(256 个 IP)
nmap 10.0.0.1-50 # 扫描 IP 范围(10.0.0.1 到 10.0.0.50)
3. 主机发现(存活探测)
nmap -sn 192.168.1.0/24 # 仅 ping 扫描,不进行端口扫描
nmap -PS22,80 192.168.1.1 # 通过 TCP SYN 探测 22/80 端口判断主机存活
4. 端口扫描
nmap -p 22,80,443 192.168.1.1 # 扫描指定端口(22/80/443)
nmap -p- 192.168.1.1 # 扫描全部 65535 个端口(耗时较长)
nmap -p 1-1024 192.168.1.1 # 扫描常用端口(1-1024)
5. 服务版本检测
nmap -sV 192.168.1.1 # 探测开放端口的软件版本(如 "Apache 2.4.41")
nmap -sV --version-intensity 9 192.168.1.1 # 提高版本检测强度(0-9,默认7)
6. 操作系统识别
nmap -O 192.168.1.1 # 推测目标操作系统类型(如 "Linux 3.x")
nmap -A 192.168.1.1 # 综合扫描(版本检测+OS识别+脚本扫描)
7. 输出结果保存
nmap -oN output.txt 192.168.1.1 # 保存纯文本结果
nmap -oX output.xml 192.168.1.1 # 保存 XML 格式(便于自动化解析)
nmap -oG output.gnmap 192.168.1.1 # 保存 Grepable 格式(适合过滤)
二、端口扫描参数详解
Nmap 通过不同的扫描技术实现灵活的端口探测,以下是核心参数及其用途:
1. 扫描类型(Scan Type)
参数 | 扫描类型 | 描述 | 适用场景 |
-sS | TCP SYN 扫描(半开放扫描) | 发送 SYN 包,不完成三次握手(隐蔽性强,效率高)。 | 默认扫描方式,适合快速探测开放端口。 |
-sT | TCP 全连接扫描 | 完成三次握手(可靠性高,但易被防火墙检测)。 | 需要高可靠性时使用。 |
-sU | UDP 扫描 | 扫描 UDP 端口(如 DNS 53、SNMP 161)。 | 检测 UDP 服务(如 VoIP、DNS)。 |
-sY | SCTP 扫描 | 扫描 SCTP 端口(流控制传输协议,用于电信领域)。 | 特殊场景(如电信设备扫描)。 |
-sN/sF/sX | NULL/FIN/Xmas 扫描 | 发送特殊标志位的 TCP 包(用于绕过防火墙)。 | 绕过简单防火墙规则。 |
-sA | ACK 扫描 | 发送 ACK 包探测防火墙规则(判断端口是否被过滤)。 | 分析防火墙策略。 |
-sW | 窗口扫描 | 通过 TCP 窗口大小判断端口状态(如关闭/开放)。 | 辅助判断端口状态。 |
-sZ | Cookie-Echo 扫描(SCTP) | SCTP 协议的 SYN Cookie 测试(检测防火墙)。 | 特殊安全研究场景。 |
2. 端口指定(Port Specification)
参数 | 功能 | 示例 |
-p <port> | 指定单个或多个端口(逗号分隔) | -p 22,80,443 |
-p- | 扫描全部 65535 个端口 | -p- |
-p <range> | 扫描端口范围(如 1-1024) | -p 1-1000 |
-p U:<port> | 扫描 UDP 端口(需与 -sU 结合使用) | -sU -p U:53 |
-p T:<port> | 扫描 TCP 端口(默认类型,可省略) | -p T:22-443 |
3. 扫描速度与性能(Timing)
参数 | 功能 | 示例 |
-T<0-5> | 设置扫描速度(0 最慢,5 最快,默认 T3)。 | -T4(中等速度) |
--max-rtt-timeout <ms> | 设置最大往返时间(RTT)超时(毫秒)。 | --max-rtt-timeout 200 |
--min-hostgroup <size> | 并行扫描的最小主机数(提高速度)。 | --min-hostgroup 50 |
--max-retries <times> | 设置重试次数(减少误判)。 | --max-retries 2 |
4. 输出与过滤(Output & Filtering)
参数 | 功能 | 示例 |
-oG | 生成 Grepable 格式(便于过滤关键词)。 | -oG output.gnmap |
-v | 增加详细输出(-vv 更详细)。 | -v -v |
--open | 仅显示开放端口(过滤关闭/过滤端口)。 | nmap -p 1-1024 --open 192.168.1.1 |
--exclude <host> | 排除指定主机或网段。 | --exclude 192.168.1.1 |
--excludefile <file> | 从文件中排除多个目标。 | --excludefile exclude_ips.txt |
三、实战案例
案例 1:快速扫描内网存活主机与开放端口
nmap -sn -T4 192.168.1.0/24 # 主机发现(仅 ping)
nmap -sS -p 22,80,443 -T4 192.168.1.0/24 # 扫描开放端口
案例 2:UDP 服务探测(DNS/SNMP)
nmap -sU -p 53,161 192.168.1.1 # 扫描 DNS 和 SNMP 服务
案例 3:绕过防火墙检测(NULL 扫描)
nmap -sN -p 80 192.168.1.1 # 发送无标志位的 TCP 包(探测防火墙规则)
案例 4:输出结果过滤与保存
nmap -sS -p 22,80 192.168.1.1 -oG - | grep "open" # 过滤 Grepable 格式中的开放端口
nmap -sS -p 22,80 192.168.1.1 -oX scan.xml # 保存 XML 格式
四、注意事项
- 合法授权:仅扫描授权范围内的目标,避免触犯法律。
- 防火墙干扰:扫描可能触发安全告警,建议在测试环境中验证。
- 扫描频率:避免高频扫描导致目标封禁(可通过 -T 参数控制速度)。
- 更新脚本库:使用 nmap --script-updatedb 更新 NSE 脚本(增强扫描能力)。
通过掌握以上命令和参数,您可以高效完成网络资产发现、漏洞探测等任务。建议结合 Metasploit、Wireshark 等工具联动使用,提升渗透测试效率!