Nmap使用教程

一、Nmap 简介

Nmap(Network Mapper)是一款功能强大的开源网络扫描和安全审计工具,由 Gordon Lyon(Fyodor)开发。它被誉为网络安全的“瑞士军刀”,广泛应用于网络发现、端口扫描、服务识别和漏洞评估。

核心功能

  • 主机发现:探测网络中的存活设备。
  • 端口扫描:识别目标主机上端口的开放状态。
  • 服务与版本检测:识别端口上运行的服务及其具体版本。
  • 操作系统检测:通过指纹识别目标主机的操作系统。
  • 脚本引擎:利用 Nmap 脚本引擎(NSE)进行高级漏洞扫描、密码爆破等。

二、安装与环境

2.1 安装方法

  • Windows:从 Nmap 官网 下载安装包,默认包含图形化工具 Zenmap
  • **Linux (如 Kali, Ubuntu)**:
    1
    sudo apt update && sudo apt install nmap

2.2 端口状态说明

Nmap 将端口状态分为六类:

状态 含义
open 端口开放,有应用程序正在监听。
closed 端口关闭,但主机可达(收到 RST 包)。
filtered 端口被防火墙或过滤设备屏蔽,无法确定状态。
unfiltered 端口可访问,但无法确定是开放还是关闭。
open|filtered 无法确定端口是开放还是被过滤。
closed|filtered 无法确定端口是关闭还是被过滤。

三、主机发现扫描

3.1 快速扫描单个主机

1
nmap 192.168.1.1

扫描指定 IP,默认进行最常见的 1000 个 TCP 端口扫描。

3.2 扫描整个网段

1
nmap 192.168.1.0/24

扫描 192.168.1.0192.168.1.255 的所有主机。

3.3 排除特定 IP 扫描

1
2
3
4
5
6
# 排除单个 IP
nmap 192.168.1.0/24 --exclude 192.168.1.100
# 排除多个 IP(用逗号分隔)
nmap 192.168.1.0/24 --exclude 192.168.1.100,192.168.1.200
# 从文件读取排除列表
nmap 192.168.1.0/24 --excludefile exclude.txt

3.4 仅扫描存活主机(Ping 扫描)

1
nmap -sn 192.168.1.0/24

-sn 参数跳过端口扫描,仅探测哪些主机在线(使用 ICMP Echo、TCP SYN 到 443端口、ARP 等)。

3.5 ARP 扫描(局域网高效探测)

1
nmap -PR -sn 192.168.1.0/24
  • -PR:启用 ARP 扫描(仅限同一局域网)。
  • -sn:不进行端口扫描。
    此组合在局域网内速度极快且准确。

四、端口扫描技术

4.1 指定端口扫描

1
2
3
4
5
6
7
8
# 扫描单个端口
nmap -p 80 192.168.1.1
# 扫描多个端口(逗号分隔)
nmap -p 80,443,8080 192.168.1.1
# 扫描端口范围
nmap -p 1-1000 192.168.1.1
# 扫描所有端口(1-65535)
nmap -p- 192.168.1.1

4.2 TCP SYN 扫描(半开放扫描)

1
nmap -sS 192.168.1.1

原理:发送 SYN 包,若收到 SYN/ACK 则端口开放,随后发送 RST 终止连接,不建立完整 TCP 三次握手。需要 root 权限

4.3 TCP Connect 扫描(全连接扫描)

1
nmap -sT 192.168.1.1

原理:完成完整的 TCP 三次握手。这是 Nmap 在非 root 用户下的默认扫描方式,速度较慢且易被日志记录。

4.4 UDP 扫描

1
nmap -sU 192.168.1.1

原理:向目标 UDP 端口发送数据包。若无响应,可能为开放或被过滤;若收到 ICMP 端口不可达,则为关闭。UDP 扫描速度很慢。

4.5 综合扫描示例

1
2
3
4
# 扫描常用 TCP 端口并识别服务
nmap -sS -sV 192.168.1.1
# 同时扫描 TCP 和 UDP 的常见端口
nmap -sS -sU -p T:80,443,U:53,161 192.168.1.1

五、服务与系统识别

5.1 服务版本检测

1
nmap -sV 192.168.1.1

-sV 参数会尝试连接开放的端口,并分析响应以确定服务名称和版本号(如 Apache httpd 2.4.41)。

5.2 操作系统检测

1
sudo nmap -O 192.168.1.1

-O 参数通过分析 TCP/IP 协议栈指纹来猜测目标操作系统。需要 root 权限

5.3 综合信息收集

1
sudo nmap -A 192.168.1.1

-A 参数是“激进模式”的缩写,它同时启用:

  • 操作系统检测 (-O)
  • 版本检测 (-sV)
  • 脚本扫描 (--script=default)
  • 路由追踪 (--traceroute)

六、Nmap 脚本引擎(NSE)应用

NSE 是 Nmap 最强大的功能之一,包含数百个脚本,用于漏洞检测、后门检测、密码审计等。

6.1 使用脚本分类

1
2
3
4
5
6
# 使用所有“漏洞”类脚本进行扫描
nmap --script vuln 192.168.1.1
# 使用所有“安全审计”类脚本
nmap --script safe 192.168.1.1
# 使用所有“入侵检测”类脚本
nmap --script intrusive 192.168.1.1

6.2 使用特定脚本

1
2
3
4
# 使用单个脚本(如 HTTP 标题获取)
nmap --script http-headers 192.168.1.1 -p 80
# 使用多个脚本
nmap --script http-headers,http-title 192.168.1.1 -p 80,443

6.3 常见脚本类别与用途

类别 用途 示例脚本
vuln 检查已知漏洞 http-vuln-cve2017-5638
exploit 利用安全漏洞
auth 身份认证绕过/爆破 http-brute, ftp-brute
discovery 网络服务发现 snmp-info, smb-os-discovery
safe 非侵入式检查 http-robots.txt

七、输出与日志管理

7.1 输出格式

Nmap 支持多种输出格式,便于后续分析或集成到其他工具。

参数 格式 描述
-oN <file> 普通文本 人类可读的标准格式。
-oX <file> XML 结构化数据,便于程序解析。
-oG <file> Grepable 单行格式,便于 grepawk 处理。
-oA <basename> 所有格式 同时生成 .nmap, .xml, .gnmap 三个文件。

示例

1
2
3
4
5
6
# 保存为文本文件
nmap -oN scan_result.txt 192.168.1.1
# 保存为 XML 文件
nmap -oX scan_result.xml 192.168.1.1
# 同时保存三种格式(基础名为 scan)
nmap -oA scan 192.168.1.1

7.2 日志分析工具

  • Zenmap:Nmap 官方图形界面,提供结果可视化、拓扑图、比较扫描结果等功能。
  • Ndiff:命令行工具,用于比较两次扫描结果的差异。
    1
    ndiff scan1.xml scan2.xml

八、性能优化与防火墙规避

8.1 调整扫描速度

Nmap 提供从 T0(极慢)到 T5(极快)的时序模板。

1
2
3
4
5
6
# 慢速扫描,减少被检测的风险
nmap -T0 192.168.1.1
# 快速扫描(默认是 T3)
nmap -T4 192.168.1.1
# 极速扫描,可能丢失数据包
nmap -T5 192.168.1.1

8.2 数据包分片与诱饵

1
2
3
4
5
# 使用数据包分片
nmap -f 192.168.1.1
# 使用诱饵 IP(隐藏真实扫描源)
nmap -D RND:10 192.168.1.1 # 生成10个随机诱饵
nmap -D decoy1,decoy2,ME,decoy3 192.168.1.1 # 指定诱饵,ME代表自己

8.3 源端口与 MAC 地址欺骗

1
2
3
4
5
# 指定源端口(如伪装成 DNS 流量)
nmap --source-port 53 192.168.1.1
# 欺骗 MAC 地址
nmap --spoof-mac 0 192.168.1.1 # 随机 MAC
nmap --spoof-mac 00:11:22:33:44:55 192.168.1.1 # 指定 MAC

九、实战综合示例

9.1 完整内网信息收集

1
2
3
# 发现内网存活主机,扫描其前1000个TCP端口,识别服务版本和操作系统
sudo nmap -sn 192.168.1.0/24
sudo nmap -sS -sV -O -p 1-1000 --open 192.168.1.100

9.2 Web 服务器深度扫描

1
2
# 扫描 Web 服务器常见端口,进行漏洞检测
nmap -sS -sV -p 80,443,8080,8443 --script http-vuln*,http-enum 192.168.1.100

9.3 保存并对比扫描结果

1
2
3
4
5
6
# 第一次扫描
nmap -oA baseline 192.168.1.0/24
# 一段时间后第二次扫描
nmap -oA current 192.168.1.0/24
# 使用 ndiff 比较差异
ndiff baseline.xml current.xml

十、法律与道德声明

重要提示

  1. 授权原则仅在您拥有明确授权的网络或设备上使用 Nmap。未经授权扫描他人网络是违法行为,可能构成“计算机欺诈与滥用法案”(CFAA)等罪名。
  2. 教学目的:本文所有示例仅用于网络安全教学、授权下的渗透测试及个人网络管理
  3. 责任自负:使用者需对自身行为承担全部法律和道德责任。

合规使用场景

  • 扫描您自己拥有的服务器和网络。
  • 在明确的书面授权下,为客户进行安全评估。
  • 在隔离的实验室环境(如 Kali Linux 虚拟机网络)中进行学习。

十一、总结与进阶

Nmap 是一个功能极其丰富的工具,本文仅涵盖了其核心功能。要成为专家,建议:

  1. 查阅官方文档https://nmap.org/book/
  2. 学习 NSE 脚本编写:自定义脚本以满足特定需求。
  3. 结合其他工具:将 Nmap 与 Wireshark(流量分析)、Metasploit(漏洞利用框架)等工具结合,构建完整的攻防实验环境。