Nmap 使用教程

[!note] 使用 Nmap 扫描目标前,请确保你拥有明确授权。未经许可对他人网络或主机进行扫描,可能违反法律法规或安全政策。

一、Nmap 能做什么

Nmap 的核心功能包括:

  • 主机发现:判断目标是否在线
  • 端口扫描:检测开放端口
  • 服务识别:识别端口上的服务及版本
  • 操作系统探测:推测目标操作系统类型
  • 脚本扫描:借助 NSE(Nmap Scripting Engine)执行更丰富的探测任务
  • 网络资产梳理:快速了解网段中的设备情况

二、安装 Nmap

Linux

Debian / Ubuntu:

sudo apt update
sudo apt install nmap

CentOS / RHEL:

sudo yum install nmap

或:

sudo dnf install nmap

macOS

使用 Homebrew:

brew install nmap

Windows

前往 Nmap 官网下载安装包进行安装,安装完成后可在命令提示符或 PowerShell 中使用 nmap

三、基本语法

nmap [扫描类型] [选项] <目标>

常见目标写法:

  • 单个 IP:192.168.1.10
  • 主机名:example.com
  • IP 段:192.168.1.0/24
  • 多个目标:192.168.1.10 192.168.1.11
  • 范围:192.168.1.1-100

示例:

nmap 192.168.1.10

这会对目标进行默认扫描,通常会检查常见端口并给出开放状态。

四、常用扫描方式

1. 扫描单个主机

nmap 192.168.1.10

用途:快速查看目标开放的常见端口。

2. 扫描多个主机

nmap 192.168.1.10 192.168.1.11 192.168.1.12

3. 扫描整个网段

nmap 192.168.1.0/24

用途:发现整个子网中哪些主机在线以及开放了哪些端口。

4. 仅进行主机发现

nmap -sn 192.168.1.0/24

说明:

  • -sn 表示不做端口扫描,只判断主机是否存活
  • 适合快速盘点在线设备

5. 扫描指定端口

nmap -p 22,80,443 192.168.1.10

扫描端口范围:

nmap -p 1-1000 192.168.1.10

6. 扫描全部端口

nmap -p- 192.168.1.10

说明:-p- 表示扫描 1~65535 全部 TCP 端口。

五、常见扫描参数详解

1. TCP SYN 扫描

sudo nmap -sS 192.168.1.10

特点:

  • 速度快
  • 较隐蔽
  • 需要较高权限

2. TCP Connect 扫描

nmap -sT 192.168.1.10

特点:

  • 不需要特殊权限
  • 适用于无法使用 SYN 扫描的场景

3. UDP 扫描

sudo nmap -sU 192.168.1.10

说明:

  • 用于检测 UDP 服务,如 DNS、SNMP、NTP 等
  • 速度通常比 TCP 扫描慢

4. 服务版本识别

nmap -sV 192.168.1.10

作用:识别开放端口上运行的服务及版本信息。

例如可能输出:

  • 22/tcp open ssh OpenSSH 8.2
  • 80/tcp open http Apache httpd 2.4.41

5. 操作系统识别

sudo nmap -O 192.168.1.10

作用:尝试判断目标使用的操作系统。

6. 综合探测

sudo nmap -A 192.168.1.10

-A 常常会启用:

  • 操作系统识别
  • 版本识别
  • 脚本扫描
  • traceroute

[!warning] -A 探测较为激进,耗时更长,也更容易被日志或防护设备记录。

六、NSE 脚本使用

Nmap 的 NSE(Nmap Scripting Engine)可以显著增强扫描能力,用于服务枚举、配置检查、弱点识别等。

1. 运行默认脚本

nmap -sC 192.168.1.10

说明:-sC 等价于 --script=default

2. 指定脚本类别

nmap --script=safe 192.168.1.10

3. 指定某个脚本

nmap --script=http-title -p 80 192.168.1.10

作用:获取 Web 页面标题。

4. 多脚本执行

nmap --script=http-title,http-headers -p 80 192.168.1.10

5. 传递脚本参数

nmap --script=http-title --script-args somearg=value 192.168.1.10

七、输出结果保存

Nmap 支持将结果保存为多种格式,方便归档或后续分析。

1. 普通文本输出

nmap -oN scan.txt 192.168.1.10

2. XML 输出

nmap -oX scan.xml 192.168.1.10

3. 可供 grep 使用的输出

nmap -oG scan.grep 192.168.1.10

4. 一次输出所有格式

nmap -oA scan_result 192.168.1.10

这会生成:

  • scan_result.nmap
  • scan_result.xml
  • scan_result.gnmap

八、速度与性能控制

在大规模扫描中,合理调整速度参数很重要。

1. 时间模板

nmap -T4 192.168.1.10

时间模板范围:

  • -T0:最慢,最隐蔽
  • -T1
  • -T2
  • -T3:默认较平衡
  • -T4:较快,常用
  • -T5:最快,但可能不稳定

2. 限制扫描速率

nmap --max-rate 100 192.168.1.10

3. 限制重试次数

nmap --max-retries 2 192.168.1.10

九、实用场景示例

1. 快速发现局域网在线主机

nmap -sn 192.168.1.0/24

2. 查看服务器开放了哪些常见端口

nmap 192.168.1.100

3. 深入识别 Web 服务器信息

nmap -sV -p 80,443 --script=http-title,http-headers 192.168.1.100

4. 扫描全部 TCP 端口并识别服务

nmap -p- -sV 192.168.1.100

5. 对 DNS 服务做 UDP 探测

sudo nmap -sU -p 53 192.168.1.100

十、如何看懂扫描结果

典型输出中常见字段:

  • open:端口开放
  • closed:端口关闭,但主机可达
  • filtered:端口状态被防火墙等设备过滤,无法确定
  • unfiltered:端口可达,但无法判断是否开放
  • open|filtered:可能开放,也可能被过滤
  • closed|filtered:可能关闭,也可能被过滤

示例输出:

PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 8.2
80/tcp  open  http    Apache httpd 2.4.41
443/tcp open  ssl/http

解释:

  • PORT:端口号及协议
  • STATE:端口状态
  • SERVICE:识别出的服务名
  • VERSION:服务版本信息

十一、常见注意事项

  • 某些扫描类型需要 root/管理员权限
  • 防火墙、WAF、IDS、IPS 可能影响扫描结果
  • UDP 扫描通常较慢,误报或漏报概率相对更高
  • 服务版本识别依赖响应特征,不一定 100% 准确
  • 扫描大网段时应控制速率,避免影响业务

[!tip] 实战中推荐先做主机发现,再对重点目标进行端口扫描,最后做版本识别与脚本探测,这样更高效。

十二、常用命令速查表

目的命令
扫描单个主机nmap 192.168.1.10
主机发现nmap -sn 192.168.1.0/24
扫描指定端口nmap -p 22,80,443 192.168.1.10
扫描所有端口nmap -p- 192.168.1.10
SYN 扫描sudo nmap -sS 192.168.1.10
TCP 连接扫描nmap -sT 192.168.1.10
UDP 扫描sudo nmap -sU 192.168.1.10
服务识别nmap -sV 192.168.1.10
操作系统识别sudo nmap -O 192.168.1.10
综合探测sudo nmap -A 192.168.1.10
默认脚本扫描nmap -sC 192.168.1.10
保存全部格式结果nmap -oA result 192.168.1.10

十三、学习建议

如果你是初学者,可以按照下面的顺序掌握 Nmap:

  1. 学会基础扫描:nmap IP
  2. 学会主机发现:nmap -sn 网段
  3. 学会指定端口扫描:nmap -p
  4. 学会服务识别:nmap -sV
  5. 学会操作系统识别:nmap -O
  6. 学会脚本扫描:nmap -sC--script
  7. 学会结果保存与批量分析:-oN-oX-oA

十四、总结

Nmap 是网络排查和安全测试中非常重要的基础工具。掌握它的关键不在于记住所有参数,而在于理解不同扫描方式适合什么场景。对于日常使用来说,重点掌握以下几类命令即可:

  • 基础扫描:nmap <目标>
  • 主机发现:nmap -sn <网段>
  • 指定端口:nmap -p <端口> <目标>
  • 服务识别:nmap -sV <目标>
  • 综合探测:nmap -A <目标>
  • 结果保存:nmap -oA <文件名> <目标>

熟练之后,再逐步深入 NSE 脚本、性能优化和复杂网络环境下的扫描技巧,会更容易形成完整的使用体系。