在网络安全领域,信息收集是渗透测试、漏洞评估的第一步,而 Nmap(Network Mapper)作为 Linux 环境下最经典的网络扫描工具,堪称 “信息收集的瑞士军刀”。无论是主机存活探测、端口状态识别,还是服务版本探测、漏洞脆弱性扫描,Nmap 都能凭借灵活的参数组合和强大的脚本扩展能力,帮你快速摸清目标网络的 “底细”。
本文将从 Nmap 的基础原理出发,拆解其7 大类典型用法,结合实战场景讲解命令示例与结果解读,附上线程控制、输出优化等进阶技巧,帮你从 “会用 Nmap” 到 “用好 Nmap”,真正发挥其在漏洞扫描中的核心价值。
一、Nmap 核心定位:为什么它是网络安全的 “必备工具”?
在学习用法前,先明确 Nmap 的核心能力 —— 它不是单一的 “漏洞扫描器”,而是集 “主机发现、端口扫描、服务探测、OS 识别、脚本扩展” 于一体的综合网络探测工具。其在网络安全中的核心应用场景包括:
- 资产盘点:快速识别内网存活主机、开放端口,理清目标网络拓扑;
- 漏洞预探测:通过服务版本识别(如 Apache 2.4.49),关联已知漏洞(如 Log4j、Heartbleed);
- 渗透测试前置:确定目标攻击面(如开放的 3389 远程桌面、8080 管理后台);
- 安全监控:定期扫描服务器端口状态,检测异常开放端口(如后门端口)。
Nmap 的优势在于轻量、跨平台(Linux/Windows/macOS)、开源免费,且支持 “命令行参数 + Lua 脚本” 的灵活扩展,既能满足新手的基础扫描需求,也能支撑老手的深度定制化探测。
二、Nmap 基础:安装与核心语法框架
在 Linux 环境下使用 Nmap,首先要完成安装与基础语法的理解,这是后续复杂用法的前提。
1. Linux 环境安装 Nmap
不同 Linux 发行版的安装命令略有差异,推荐使用官方源或包管理器安装,确保版本最新(本文基于 Nmap 7.94 版本讲解):
# Ubuntu/Debian系列
sudo apt update && sudo apt install nmap -y
# CentOS/RHEL系列
sudo yum install nmap -y
# 验证安装成功(查看版本)
nmap -V # 输出示例:Nmap version 7.94 ( https://nmap.org )
2. Nmap 核心语法框架
Nmap 的命令结构遵循 “参数 + 目标” 的逻辑,最基础的格式为:
nmap [扫描参数] [目标地址]
其中:
- 扫描参数:控制扫描类型(如端口扫描、服务探测)、扫描速度、输出格式等;
- 目标地址:支持单 IP(192.168.1.100)、IP 段(192.168.1.0/24)、域名(www.example.com)、列表文件(-iL target.txt,文件中每行一个目标)。
例如,最基础的 “扫描单个 IP” 命令:
nmap 192.168.1.100 # 默认扫描1000个常用端口,输出开放端口与服务
三、Nmap 典型用法拆解:
Nmap 的用法围绕 “信息收集深度” 逐步递进,从 “是否有主机存活” 到 “是否存在漏洞”,可分为 7 大类核心场景。每类场景均附 “命令示例 + 参数解读 + 结果分析”,确保即学即用。
1. 场景 1:主机发现(存活探测)—— 确定 “攻击目标是否在线”
在扫描端口前,需先确认目标主机是否存活(避免扫描无效 IP 浪费时间)。Nmap 提供多种主机发现方式,最常用的是Ping 扫描(-sn),仅发送 ICMP 请求包,不进行端口扫描,速度快且隐蔽。
实战命令与解读:
# 1. 单IP存活探测
nmap -sn 192.168.1.100 # -sn:只做主机发现,不扫描端口
# 2. 网段存活探测(找出192.168.1.0/24网段所有在线主机)
nmap -sn 192.168.1.0/24 -oN live_hosts.txt # -oN:将结果保存为普通文本文件
# 3. 无Ping扫描(应对禁止ICMP的目标,通过TCP SYN/ACK包探测存活)
nmap -sn -PS21,22,80,443 192.168.1.100 # -PS:发送SYN包到指定端口(21ftp/22ssh/80http/443https)
结果分析示例:
Nmap scan report for 192.168.1.100
Host is up (0.00052s latency). # 主机存活,延迟0.00052秒
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
- Host is up:主机存活;
- Host is down:主机离线(或禁止 ICMP,需用 - PS/-PA 参数重试)。
2. 场景 2:端口扫描 —— 找出 “目标开放的攻击入口”
端口是网络服务的 “窗口”(如 80 端口对应 HTTP 服务、22 对应 SSH),端口扫描是 Nmap 最核心的功能。需掌握 “端口范围控制” 与 “扫描类型选择”,适配不同场景需求。
核心端口扫描参数:
| 参数 | 功能描述 | 适用场景 |
|---|---|---|
| -p | 指定端口范围(如 - p 80,443 或 -p 1-1000) | 精准扫描目标端口 |
| -sT | TCP 全连接扫描(三次握手建立连接) | 准确性高,适合无防火墙环境 |
| -sS | TCP SYN 半开扫描(只发 SYN 包,不建立完整连接) | 速度快、隐蔽性高,渗透测试首选 |
| -sU | UDP 端口扫描(探测 UDP 服务,如 DNS 53 端口) | 需配合 - pU,速度较慢 |
| -p- | 扫描所有 65535 个端口 | 全面扫描,适合深度资产探测 |
实战命令与解读:
# 1. 常用端口快速扫描(SYN半开扫描,推荐渗透测试用)
nmap -sS -p 1-1000 192.168.1.100 # 扫描1-1000端口,速度快且隐蔽
# 2. 重点端口精准扫描(Web服务+远程桌面+SSH)
nmap -sT -p 80,443,22,3389 192.168.1.100 # -sT:全连接扫描,结果更准确
# 3. 全端口深度扫描(适合重要目标,需耐心等待)
nmap -sS -p- 192.168.1.100 -T4 # -T4:扫描速度等级4(共0-5级,4级平衡速度与隐蔽性)
# 4. UDP端口扫描(探测DNS、SNMP等UDP服务)
nmap -sU -p 53,161 192.168.1.100 # -sU:UDP扫描,-p 53(DNS)/161(SNMP)
结果分析示例:
PORT STATE SERVICE
22/tcp open ssh # 22端口开放,对应SSH服务
80/tcp open http # 80端口开放,对应HTTP服务
443/tcp closed https # 443端口关闭
3389/tcp filtered rdp # 3389端口被过滤(可能有防火墙拦截)
- open:端口开放(攻击入口);
- closed:端口关闭(无服务监听);
- filtered:端口被过滤(防火墙 / IDS 拦截,无法确定状态)。
3. 场景 3:服务版本探测 —— 关联 “已知漏洞风险”
仅知道端口开放不够,需进一步识别 “端口对应的服务版本”(如 Apache 2.4.49、Nginx 1.21.6),因为特定版本可能存在已知漏洞(如 Apache 2.4.49 的路径穿越漏洞 CVE-2021-41773)。
实战命令与解读:
# 基础服务版本探测(-sV:启用服务版本识别)
nmap -sS -p 80,443 -sV 192.168.1.100
# 深度版本探测(--version-intensity 9:提高版本探测强度,结果更精准)
nmap -sS -p 80 -sV --version-intensity 9 192.168.1.100
# 结合端口扫描+版本探测(扫描常用端口并识别服务版本)
nmap -sS -p 1-1000 -sV 192.168.1.100 -oX service_scan.xml # -oX:保存为XML格式,方便导入漏洞管理工具
结果分析示例:
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.49 # 80端口运行Apache 2.4.49
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
- 若识别到
Apache httpd 2.4.49,可立即关联漏洞库,确认该版本存在 CVE-2021-41773(路径穿越 + RCE),后续可针对性测试; - 若版本识别为
unknown,可提高--version-intensity参数(1-9,默认 7),或更换扫描类型(如 - sT 全连接扫描)。
4. 场景 4:操作系统(OS)探测
不同操作系统(如 Windows Server 2019、Ubuntu 20.04)的漏洞与利用方式差异极大(如 Windows 的永恒之蓝漏洞 CVE-2017-0144 仅影响 Windows 系统)。Nmap 通过分析 TCP/IP 协议栈特征,可推测目标 OS 类型。
实战命令与解读:
# 基础OS探测(-O:启用操作系统识别)
nmap -sS -p 1-1000 -O 192.168.1.100
# 深度OS探测(--osscan-guess:强制猜测OS类型,适合难以识别的目标)
nmap -sS -p 80,22 -O --osscan-guess 192.168.1.100
结果分析示例:
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.19
Network Distance: 1 hop
- Nmap 会输出 “OS 家族”(如 Linux)、“内核版本范围”(4.X-5.X),帮助后续选择适配的漏洞利用工具(如针对 Linux 的 Dirty COW 漏洞 CVE-2016-5195);
- 若 OS 识别结果模糊(如 “Running: Unknown”),需增加开放端口数量(OS 探测依赖多端口特征),或使用 - sT 全连接扫描。
5. 场景 5:脚本扫描(NSE)—— 自动化 “漏洞检测与利用”
Nmap Scripting Engine(NSE,Nmap 脚本引擎)是其 “灵魂功能”,内置数百个 Lua 脚本,可实现漏洞检测(如弱口令、CVE 漏洞)、认证测试、信息收集等自动化操作。对于网络安全人员,NSE 脚本扫描是 “提升效率的关键”。
核心 NSE 脚本分类与参数:
| 脚本类别 | 功能描述 | 常用脚本示例 | 参数用法 |
|---|---|---|---|
| vuln | 漏洞检测(CVE、配置缺陷) | http-vuln-cve2021-41773(Apache 漏洞) | –script vuln |
| auth | 认证测试(弱口令、默认密码) | ssh-brute(SSH 弱口令爆破) | –script auth |
| discovery | 信息发现(目录扫描、DNS 解析) | http-enum(Web 目录扫描) | –script discovery |
| exploit | 漏洞利用(获取 shell) | http-vuln-cve2017-5638(Struts2 RCE) | –script exploit |
实战命令与解读:
# 1. 基础漏洞扫描(扫描目标是否存在常见漏洞,如SQL注入、XSS)
nmap -sS -p 80,443 -sV --script vuln 192.168.1.100 # --script vuln:调用所有vuln类脚本
# 2. 针对性CVE漏洞检测(检测Apache 2.4.49路径穿越漏洞CVE-2021-41773)
nmap -p 80 --script http-vuln-cve2021-41773 192.168.1.100
# 3. SSH弱口令爆破(使用默认字典,适合测试内部弱口令主机)
nmap -p 22 --script ssh-brute --script-args userdb=users.txt,passdb=passwords.txt 192.168.1.100
# --script-args:传递脚本参数(userdb:用户名字典,passdb:密码字典)
# 4. Web目录扫描(探测Web后台、敏感文件,如login.php、backup.zip)
nmap -p 80 --script http-enum 192.168.1.100
结果分析示例:
PORT STATE SERVICE
80/tcp open http
| http-vuln-cve2021-41773:
| VULNERABLE:
| Apache 2.4.49 Path Traversal and Remote Code Execution
| State: VULNERABLE
| IDs: CVE:CVE-2021-41773
| Risk factor: Critical CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
| Disclosure date: 2021-09-29
| References:
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41773
| https://httpd.apache.org/security/vulnerabilities_24.html
- 若输出 “VULNERABLE”,说明目标存在该漏洞,可立即使用对应 POC(如 curl 命令)验证并利用;
- 若输出 “NOT VULNERABLE”,则目标已修复或版本不受影响。
6. 场景 6:内网扫描
在渗透测试中,拿下一台内网主机后,需扫描内网其他主机(横向移动)。Nmap 支持内网网段扫描,结合 “无 Ping 扫描”“速度控制”,可避免触发内网 IDS/IPS 告警。
实战命令与解读:
# 1. 内网存活主机快速扫描(不触发ICMP告警)
nmap -sn 192.168.2.0/24 -PS22,80 -T3 # -T3:中等速度,平衡隐蔽性与效率
# 2. 内网端口扫描(重点扫描远程桌面、数据库端口)
nmap -sS -p 22,3389,1433,3306 192.168.2.0/24 -oA internal_scan # -oA:同时保存为文本、XML、Nmap格式
# 3. 内网漏洞扫描(检测内网主机是否存在永恒之蓝漏洞)
nmap -p 445 --script smb-vuln-ms17-010 192.168.2.0/24 # smb-vuln-ms17-010:永恒之蓝漏洞检测脚本
7. 场景 7:扫描结果输出与可视化 —— 便于 “报告整理与分析”
Nmap 支持多种输出格式,可适配不同场景(如文本报告、工具导入、可视化分析),核心输出参数如下:
| 参数 | 输出格式 | 用途 |
|---|---|---|
| -oN | 普通文本格式 | 快速查看、手动整理报告 |
| -oX | XML 格式 | 导入漏洞管理工具(如 Nessus) |
| -oA | 全部格式(Nmap + 文本 + XML) | 备份所有结果,避免丢失 |
| -oG | Grepable 格式 | 用 grep 筛选结果(如筛选开放端口) |
实战命令与解读:
# 1. 保存为文本报告(便于阅读)
nmap -sS -p 1-1000 -sV 192.168.1.100 -oN scan_report.txt
# 2. 保存为XML格式(导入Metasploit或Nessus)
nmap -sS -p 80 --script vuln 192.168.1.100 -oX vuln_scan.xml
# 3. 用grep筛选开放端口(从Grepable格式结果中找开放80端口的主机)
nmap -sn 192.168.1.0/24 -oG live_hosts.grep
grep "Up" live_hosts.grep | grep "80/open" # 筛选存活且80端口开放的主机
四、Nmap 进阶技巧:速度控制、防火墙绕过、脚本定制
掌握基础用法后,需结合实战场景优化扫描策略,避免被目标检测或拦截。
1. 速度控制:平衡 “效率与隐蔽性”
Nmap 的-T参数(0-5 级)控制扫描速度,不同场景选择不同等级:
| 等级 | 名称 | 速度 | 适用场景 | 风险 |
|---|---|---|---|---|
| T0 | Paranoid | 极慢 | 高度隐蔽(避免 IDS 告警) | 耗时极长(扫描 1000 端口需数小时) |
| T3 | Normal | 中等 | 常规扫描(默认等级) | 低风险,不易触发告警 |
| T5 | Insane | 极快 | 内部网络扫描(无 IDS) | 高风险,易被防火墙拦截 |
实战建议:外网扫描用 T2-T3,内网扫描用 T3-T4,避免使用 T5(易触发流量阈值告警)。
2. 防火墙 / IDS 绕过:突破 “扫描拦截”
若目标开启防火墙,常规扫描可能无结果,可通过以下技巧绕过:
# 1. 分片扫描(将TCP包分片,躲避防火墙检测)
nmap -sS -p 80 -f 192.168.1.100 # -f:启用分片
# 2. 源端口欺骗(伪装成常用端口的流量,如80、443)
nmap -sS -p 22 -g 80 192.168.1.100 # -g:指定源端口为80
# 3. 关闭DNS反向解析(避免DNS请求暴露扫描行为)
nmap -sS -p 80 -n 192.168.1.100 # -n:不做DNS反向解析
3. 自定义 NSE 脚本:满足 “特殊扫描需求”
若内置脚本无法满足需求(如检测自定义业务漏洞),可编写简单的 Lua 脚本。例如,检测 “某 Web 系统登录页面是否存在验证码绕过” 的脚本(save as check_captcha.lua):
local http = require "http"
local shortport = require "shortport"
description = "Check if login page has captcha bypass vulnerability"
categories = {"vuln", "safe"}
portrule = shortport.http
action = function(host, port)
local resp = http.get(host, port, "/login.php")
if resp.body:find("captcha=0") then -- 若登录请求含captcha=0(无验证码)
return "Possible captcha bypass vulnerability: /login.php?captcha=0"
end
return "No captcha bypass found"
end
调用自定义脚本:
nmap -p 80 --script ./check_captcha.lua 192.168.1.100
五、Nmap 实战工作流:从 “扫描” 到 “漏洞验证”
结合上述用法,可形成一套完整的 Nmap 扫描工作流,以 “Web 服务器渗透测试” 为例:

六、总结:Nmap 的核心价值与学习建议
Nmap 作为网络安全的 “入门工具”,其核心价值在于 “用最简单的命令,获取最关键的信息”。对于零基础学习者,建议按以下步骤进阶:
- 基础阶段:掌握
-sn(主机发现)、-sS(端口扫描)、-sV(服务探测),能独立完成单目标扫描; - 进阶阶段:熟练使用 NSE 脚本(vuln/auth 类),理解
-T速度控制、-f分片等绕过技巧; - 实战阶段:结合渗透测试场景(如内网横向、漏洞验证),定制扫描策略,并将 Nmap 与其他工具(Burp Suite、Metasploit)联动。
最后需注意:Nmap 的扫描行为需遵守法律法规,仅对授权目标进行测试,严禁未经允许扫描他人网络(可能触犯《网络安全法》《刑法》)。合法、合规地使用工具,才是网络安全从业者的基本准则。
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取



1万+

被折叠的 条评论
为什么被折叠?



