namp 命令是网络安全领域中最常用、最强大的网络探测和安全审计工具之一,由 Gordon Lyon(化名 Fyodor)创建并维护,它最初名为 "Mapper",后更名为 "Nmap"(Network Mapper),主要用于扫描网络、发现主机、检测开放端口、识别服务及操作系统类型,并支持多种扫描技术以适应不同的网络环境,以下从核心功能、常用参数、扫描类型、实际应用场景及注意事项等方面详细介绍 nmap 命令。

nmap 的核心功能与价值
nmap 的核心价值在于其灵活性和强大的信息收集能力,通过发送特制的网络数据包并分析响应,它可以实现以下目标:
- 主机发现:确定目标网络中哪些主机处于在线状态。
- 端口扫描:检测目标主机开放的 TCP/UDP 端口,识别运行的服务(如 Web 服务器、数据库等)。
- 服务与版本检测:识别端口上运行的服务名称及版本号(如 Apache 2.4.41、MySQL 8.0.25)。
- 操作系统检测:通过分析 TCP/IP 协议栈特征,推断目标主机的操作系统类型(如 Windows 10、Ubuntu 20.04)。
- 脚本扫描:内置 Nmap Scripting Engine(NSE),支持自动化执行高级任务(如漏洞检测、暴力破解弱口令等)。
- 路由跟踪与防火墙绕过:通过 TTL、分片等技术规避网络限制,发现网络拓扑结构。
nmap 的基本语法与常用参数
nmap 的基本语法为 nmap [选项] [目标]
,其中目标可以是 IP 地址、域名、IP 范围(如 192.168.1.1-100)或 CIDR 格式(如 192.168.1.0/24),以下是常用参数的分类说明:
扫描类型参数
参数 | 功能描述 |
---|---|
-sS |
TCP SYN 扫描(半开扫描),不完成 TCP 三次握手,隐蔽性较强,需要 root 权限。 |
-sT |
TCP Connect 扫描(全连接扫描),完整建立 TCP 连接,适用于普通用户权限。 |
-sU |
UDP 扫描,发送 UDP 数据包并监听响应,速度较慢,常用于扫描 DNS、SNMP 等服务。 |
-sA |
TCP ACK 扫描,用于检测端口是否被防火墙过滤(响应 RST 表示开放,无响应表示被过滤)。 |
-sN |
TCP Null 扫描,发送不设置任何标志位的数据包,根据响应判断端口状态。 |
-sF |
TCP FIN 扫描,仅发送 FIN 标志位,与 Null 扫描类似,适用于某些特定系统。 |
-sV |
服务版本检测,主动探测端口服务版本信息,需结合 -sS 或 -sT 使用。 |
-O |
操作系统检测,通过分析 TCP/IP 协议栈特征识别操作系统类型。 |
主机发现与目标控制参数
参数 | 功能描述 |
---|---|
-sn |
Ping 扫描(主机发现),仅检测主机是否在线,不进行端口扫描。 |
-Pn |
跳过主机发现,直接对所有目标进行端口扫描,适用于禁用 Ping 的主机。 |
-PS |
TCP SYN Ping,发送 SYN 包探测主机,常用于防火墙后的网络。 |
-PU |
UDP Ping,发送 UDP 包(默认端口 53、161 等)探测主机。 |
-PE |
ICMP Echo Ping,发送 ICMP 请求包(传统 Ping 命令),需目标支持 ICMP。 |
-T<0-5> |
扫描模板,控制扫描速度:T0 ( paranoid,最慢)、T1 ( sneaky)、T2 ( polite)、T3 ( normal,默认)、T4 ( aggressive)、T5 ( insane,最快)。 |
输出与格式控制参数
参数 | 功能描述 |
---|---|
-oN |
输出正常格式结果到文件(可读性强)。 |
-oX |
输出 XML 格式结果,适合第三方工具解析。 |
-oG |
输出 Grepable 格式结果,便于命令行处理。 |
-v |
详细模式,显示扫描过程的详细信息。 |
-d |
调试模式,输出更底层数据包信息(数字越大越详细)。 |
高级扫描技术参数
参数 | 功能描述 |
---|---|
-f |
分片发送数据包,规避基于内容检测的防火墙。 |
-D RND:<数量> |
使用随机源 IP 地址欺骗,隐藏扫描者身份。 |
-S <IP> |
指定源 IP 地址,需配合 -e 使用。 |
-e <接口> |
指定网络接口(如 eth0、wlan0)。 |
--data-length <长度> |
在数据包中添加随机填充数据,避免特征检测。 |
nmap 的常见扫描场景与示例
快速扫描本地网段在线主机
nmap -sn 192.168.1.0/24
通过 -sn
参数仅进行主机发现,输出结果会显示 IP、MAC 地址及厂商信息(如果支持 ARP 解析)。
扫描目标主机的开放端口(TCP)
nmap -sS -p 1-1000 192.168.1.101
使用 -sS
(SYN 扫描)检测目标前 1000 个 TCP 端口,root 权限下速度更快且隐蔽性更好。

识别目标服务版本与操作系统
nmap -sV -O 192.168.1.101
-sV
会尝试识别端口服务的版本号(如 22 端口为 OpenSSH 8.2p1),-O
则推断操作系统(如 Linux 3.2-4.9)。
扫描 UDP 端口(以 DNS 为例)
nmap -sU -p 53 8.8.8.8
针对 Google DNS 服务器的 53 端口进行 UDP 扫描,由于 UDP 无连接,扫描速度较慢,建议结合 -T4
加速。
使用脚本扫描漏洞(如 Heartbleed)
nmap --script vuln 192.168.1.101
通过 vuln
脚本集检测目标是否存在已知漏洞(如 OpenSSL Heartbleed),需提前安装 nmap 脚本数据库。
nmap 的使用注意事项
- 法律与道德风险:未经授权扫描他人网络可能违反《网络安全法》,需确保目标属于授权范围(如自有网络或客户授权项目)。
- 资源消耗:密集扫描可能对目标主机造成负载压力(尤其是 UDP 扫描或脚本扫描),建议在非业务高峰期进行。
- 防火墙与 IDS/IPS:部分网络会检测 nmap 扫描特征(如 SYN 包频率),可通过
-T0-T2
降低扫描速度或使用-f
、-D
等参数规避。 - 版本更新:nmap 脚本库和漏洞库需定期更新(通过
sudo nmap --script-updatedb
),以确保检测准确性。
相关问答 FAQs
Q1:nmap 扫描结果显示 "filtered" 是什么意思?如何处理?
A:"Filtered" 表示目标端口被防火墙、路由器或其他设备过滤,nmap 未收到明确的响应(如 RST 包),处理方法包括:

- 尝试使用不同的扫描技术(如
-sA
或-sW
绕过过滤); - 调整扫描速度(降低
-T
等级)避免触发防火墙的频率限制; - 结合
-Pn
跳过主机发现,直接对目标端口进行深度扫描。
Q2:nmap 如何扫描子网内的所有主机并输出详细报告?
A:可以使用以下命令扫描子网(如 192.168.1.0/24)并生成 XML 格式报告:
nmap -sS -sV -O -oX subnet_scan.xml 192.168.1.0/24
参数说明:-sS
进行 SYN 扫描,-sV
检测服务版本,-O
识别操作系统,-oX
将结果保存为 subnet_scan.xml 文件,便于后续分析或导入其他工具(如 NmapViewer)。