| 维度 | 目标 |
|---|---|
| 知识 | 掌握Nmap的基本功能与工作原理;理解主机发现、端口扫描、操作系统检测、版本侦测的技术原理;能区分TCP SYN扫描与TCP Connect扫描的区别;熟悉6种端口状态及其含义 |
| 技能 | 能使用Nmap对局域网进行主机发现;能使用-sS/-sT/-sU进行端口扫描并解读结果;能使用-O/-sV进行操作系统与版本侦测;能根据扫描结果判断目标开放的服务和潜在漏洞 |
| 素养 | 理解"主动扫描"与"被动踩点"的安全边界差异;建立"端口即入口"的攻击面意识;培养扫描结果的关联分析能力;强化授权范围内合法操作的法律意识 |
Nmap(Network Mapper,网络映射器)是一款开源的网络探测和安全审计工具。它被广泛应用于网络安全领域,用于扫描网络中的主机、探测开放的端口、识别运行的服务及版本,甚至推断目标主机的操作系统类型。Nmap被称为"网络管理员的瑞士军刀",同时也是渗透测试中继踩点之后的关键一步——从被动信息收集升级为主动探测。
Nmap的四大核心功能:
| 功能 | 英文名 | 说明 | 关键参数 |
|---|---|---|---|
| 主机发现 | Host Discovery | 发现网络中哪些主机在线 | -sn、-Pn、-PE |
| 端口扫描 | Port Scanning | 探测目标主机开放了哪些端口 | -sS、-sT、-sU |
| 版本侦测 | Version Detection | 识别开放端口上运行的服务及版本 | -sV |
| 操作系统检测 | OS Detection | 推断目标主机的操作系统类型和版本 | -O |
💡 这四大功能之间存在依赖关系:通常先做主机发现(确定谁在线)→ 再做端口扫描(确定开了什么门)→ 然后做版本侦测(确定门后面是什么服务)→ 最后做OS检测(确定房子的结构)。上一节5.1是"查户口",本节5.2是"上门观察+敲门试探"。
目标:扫描指定网段,确认哪些IP地址的主机处于在线(活跃)状态。
原理:Nmap向目标主机发送不同类型的探测包,如果收到回复,说明主机在线。探测方式包括:
| 探测方式 | 参数 | 原理 | 优缺点 |
|---|---|---|---|
| Ping扫描(ICMP Echo) | -sn -PE | 发送ICMP Echo Request包 | 简单快速;很多防火墙禁ICMP |
| TCP SYN Ping | -sn -PS<端口> | 发送TCP SYN包到指定端口 | 绕过ICMP封锁;需指定端口 |
| TCP ACK Ping | -sn -PA<端口> | 发送TCP ACK包 | 绕过部分包过滤防火墙 |
| UDP Ping | -sn -PU<端口> | 发送UDP包到指定端口 | 探测仅开UDP服务的主机 |
| ARP Ping(局域网默认) | -sn -PR | 发送ARP请求 | 局域网中最可靠,不受防火墙影响 |
🎯 关键区别:局域网内扫描时,Nmap默认使用ARP探测(最可靠!);跨网段扫描时,Nmap默认依次发送ICMP Echo + TCP SYN(80) + TCP ACK(80) + ICMP时间戳共4种探测包。这就是为什么同一个
-sn命令,在不同场景下行为不同。
目标:探测目标主机上哪些TCP/UDP端口处于开放状态,确定运行的服务。
6种端口状态:
| 状态 | 含义 | 类比 |
|---|---|---|
| open | 端口开放,有应用在监听 | 门开着,有人在 |
| closed | 端口可达但无应用监听 | 门关着但能敲到 |
| filtered | 被防火墙/IDS过滤,无法判断 | 有门卫挡着,看不到门 |
| unfiltered | 端口可达但无法确定开/关 | 知道门在那,看不清开没开 |
| open|filtered | 开放或被过滤(UDP常见) | 要么门开着,要么有门卫 |
| closed|filtered | 关闭或被过滤(少见) | 要么门关着,要么有门卫 |
三种核心扫描方式:
| 扫描方式 | 参数 | 原理 | 特点 |
|---|---|---|---|
| TCP SYN扫描 (半开扫描) | -sS | 发SYN包→收到SYN/ACK(open)/RST(closed)→立刻发RST断开,不完成三次握手 | 速度快、隐蔽、不建立完整连接;需root权限;Nmap默认扫描方式 |
| TCP Connect扫描 | -sT | 调用系统connect(),完成完整三次握手建立连接后断开 | 不需root权限;但会留下日志;SYN被禁时的兜底方案 |
| UDP扫描 | -sU | 发送空UDP包→收到ICMP端口不可达(closed)→无响应或UDP回复(open|filtered) | 速度慢、不建立连接;但DNS(53)/SNMP(161)/DHCP(67)等UDP服务只能这样扫 |
🔑 核心类比:SYN扫描 = 你敲门(SYN),对方开门(SYN/ACK),你立刻转身就走(RST),假装敲错门——既确认了有人,又没进去。TCP Connect扫描 = 你敲门、对方开门、你说"不好意思走错了"然后离开——进去了但又出来了,留下了"来访记录"。
版本侦测(-sV):向开放端口发送一系列探测包,分析服务的响应特征(Banner信息、协议行为),识别服务名称和版本号。
操作系统检测(-O):Nmap内置了数千个操作系统的"指纹库",通过分析以下特征来推断OS类型和版本:
综合扫描(-A):一条命令同时启用OS检测、版本侦测、脚本扫描和路由追踪。
| 功能 | 参数 | 示例命令 |
|---|---|---|
| 版本侦测 | -sV | nmap -sV 192.168.1.1 |
| OS检测 | -O | nmap -O 192.168.1.1 |
| 综合扫描 | -A | nmap -A 192.168.1.1 |
| 指定端口 | -p | nmap -p 80,443,22 192.168.1.1 |
| 扫描速度 | -T0~T5 | nmap -T4 -A 192.168.1.1 |
💡 类比:OS检测就像听一个人说话的口音来判断他是哪里人——不同操作系统在TCP/IP的"说话习惯"上有微小差异,Nmap就是那个"方言专家"。版本侦测则像是看到一个人穿的衣服品牌来判断他的消费水平。
🔄 过渡语:"上节课我们讲了踩点——通过whois查域名户口、nslookup查DNS、ping测连通性。大家还记得踩点最核心的一个限制是什么吗?"
🙋 快速提问:"上节课的五个工具,和今天要学的Nmap,最本质的区别是什么?"
📝 参考答案:上节课的工具都是被动收集——查询公开数据库、发送常规协议包(ICMP/DNS),不与目标服务层直接交互。Nmap是主动扫描——主动向目标发送构造好的探测包,通过分析响应来判断端口、服务和OS。从"暗中观察"升级到"主动试探"。
工程师小林完成踩点后,拿到了目标IP地址范围——一个C段,256个IP。但他面临三个问题:哪些IP是真正的服务器?(大部分可能空置)这些服务器上开了哪些"门"(端口)?每个门后面是什么服务?门后面的服务器是Windows还是Linux?
引出本节任务:使用Nmap,从256个IP中精准锁定真正的服务器,识别端口和服务,判断操作系统——完成从"踩点"到"扫描"的关键升级。
🙋 悬念提问:"如果给你256个IP,一个个去ping,你觉得合理吗?有没有更高效的办法?"
📝 参考答案:ping 256个IP不是不行,但太慢——Nmap可以一条命令搞定整个网段,而且ping不通的主机,Nmap还有其他方法确认它是否在线(比如TCP SYN Ping、UDP Ping)。这就是专业工具和手动工具的效率差距。
🔄 过渡语:"从踩点的被动观察到Nmap的主动探测,我们进入渗透测试Kill Chain的第二阶段——扫描。"
🙋 提问:"为什么Nmap被称为'网络管理员的瑞士军刀'?它和上节课whois/nslookup这些'单一功能工具'有什么本质不同?"
📝 参考答案:whois只能查域名信息,nslookup只能查DNS,ping只能测连通性——每个工具只做一件事。Nmap一个工具能做四件事:发现主机、扫描端口、识别服务、推断OS。而且它还可以通过NSE脚本扩展功能(漏洞检测、暴力破解等)。像瑞士军刀一样,一个工具集成多种能力。
nmap [扫描类型] [选项] [目标]教师演示:
# 最简单的扫描——默认扫描目标主机1000个常用端口 nmap 192.168.1.1 # 扫描一个网段 nmap 192.168.1.0/24 # 扫描多个不连续目标 nmap 192.168.1.1,100,200 # 查看帮助 nmap -h
演示一条综合扫描命令,让学生看到Nmap的完整输出能力:
nmap -A -T4 192.168.1.1 # 输出解读(逐段讲解): # ① 主机发现 → "Host is up (0.0023s latency)" # ② 端口扫描 → "PORT STATE SERVICE" # ③ 版本侦测 → "Apache httpd 2.4.41" # ④ OS检测 → "OS details: Linux 3.2 - 4.9"
🔄 过渡语:"刚才我们看到了Nmap一次输出的四大部分。接下来,我们一个一个拆开来讲——先从第一步'主机发现'开始。"
🔄 过渡语:"扫256个IP之前,你得先知道哪些IP上有机器。就像快递员送快递之前,先确认哪些房间有人住。这就是主机发现——Nmap四大功能的第一步。"
# Ping扫描——只做主机发现,不做端口扫描 nmap -sn 192.168.1.0/24 # 输出示例: # Nmap scan report for 192.168.1.1 # Host is up (0.0015s latency). # Nmap scan report for 192.168.1.100 # Host is up (0.0082s latency). # Nmap done: 256 IP addresses (4 hosts up)
教师演示:
nmap -sn 192.168.1.0/24 → 扫描整个C段,列出所有在线主机🙋 提问:"为什么在局域网内用-sn扫描,总能准确发现主机,而跨网段时经常漏报?"
📝 参考答案:局域网内,Nmap默认用ARP协议探测——ARP是二层协议,不经过IP层,不受防火墙拦截,非常可靠。跨网段时不能用ARP(ARP不能跨路由器),Nmap改用ICMP+TCP+UDP组合探测,但防火墙可能拦截这些探测包。所以局域网扫描最准确,远程扫描需要多种探测方式组合。
# 跳过主机发现,假定所有目标均在线 nmap -Pn 192.168.1.100 # 适用场景:主机禁ping、防火墙过滤ICMP、已知主机在线
为什么需要-Pn?很多Windows服务器默认禁ping,如果Nmap先做主机发现→判定离线→直接跳过,你就错过了真正的目标!所以当你确定目标存在但主机发现不到时,用-Pn强制扫描。
| 参数 | 探测方式 | 适用场景 |
|---|---|---|
-sn -PE | ICMP Echo | 常规扫描,目标允许ICMP |
-sn -PS80 | TCP SYN to 80端口 | 目标禁ICMP但开了Web服务 |
-sn -PA80 | TCP ACK to 80端口 | 绕过简单包过滤防火墙 |
-sn -PU53 | UDP to 53端口 | 探测DNS服务器 |
-sn -PR | ARP(仅局域网) | 最可靠,不受防火墙影响 |
🎯 口诀:局域网找ARP,禁ICMP用SYN,全封了上-Pn直接扫。实战中常见组合:
nmap -sn -PS80,443,22 192.168.1.0/24(同时用TCP SYN Ping探测80/443/22三个端口,提高发现率)
🔄 过渡语:"主机发现帮我们锁定了目标——256个IP里只有4台在线。接下来,这4台主机开了哪些'门'?哪些门我们可以走进去?这就是端口扫描。"
🔄 过渡语:"如果说主机发现是确认'小区里哪些房子有人住',那端口扫描就是'看看每栋房子开了哪些门和窗'。在网络安全里,每一个开放的端口,都是一个可能的攻击入口。"
| 端口 | 服务 | 端口 | 服务 |
|---|---|---|---|
| 21 | FTP(文件传输) | 22 | SSH(安全远程管理) |
| 23 | Telnet(不安全远程) | 25 | SMTP(邮件发送) |
| 53 | DNS(域名解析) | 80 | HTTP(Web服务) |
| 443 | HTTPS(加密Web) | 3306 | MySQL(数据库) |
| 3389 | RDP(远程桌面) | 6379 | Redis(缓存数据库) |
🙋 提问:"扫描时发现目标开放了3389端口(远程桌面),这能告诉你什么信息?"
📝 参考答案:3389 = Windows远程桌面。说明:① 目标大概率是Windows系统;② 管理员通过远程桌面管理这台机器;③ 如果存在弱密码,攻击者可以直接远程登录控制桌面。这就是"端口泄密"——一个端口号就是一条情报。
原理(关键!督导重点检查):
正常TCP三次握手:客户端发SYN → 服务器回SYN+ACK → 客户端回ACK,连接建立。
SYN扫描:客户端发SYN → 服务器回SYN+ACK(端口开放)/ RST(端口关闭)→ 客户端立刻发RST断开,不完成第三次握手。因此叫"半开扫描"(Half-open Scan)。
# SYN扫描(默认,需root) nmap -sS 192.168.1.100 # 指定端口范围 nmap -sS -p 1-1000 192.168.1.100 # 扫描全部65535个端口 nmap -sS -p- 192.168.1.100 # 扫描常用100个端口(快速) nmap -sS -F 192.168.1.100
优点:速度快、不建立完整连接(不留下应用层日志)、隐蔽性好
缺点:需要root/管理员权限
🙋 提问:"SYN扫描为什么比TCP Connect扫描更隐蔽?"
📝 参考答案:因为SYN扫描不完成三次握手,目标应用层(如Apache、SSH)根本不知道有人来过——只有系统层的防火墙/IDS可能记录到半开连接。而TCP Connect扫描完成了完整连接,应用层日志会留下记录(如Apache的access.log里会出现你的IP)。
# TCP Connect扫描(不需root) nmap -sT 192.168.1.100
# UDP扫描(慢!需要耐心) nmap -sU -p 53,67,161 192.168.1.100 # 常用UDP端口:53(DNS), 67/68(DHCP), 69(TFTP), 123(NTP), 161(SNMP)
🙋 提问:"为什么UDP扫描通常结果显示的是 open|filtered,而不是明确的 open?"
📝 参考答案:UDP没有像TCP SYN/ACK那样的握手确认机制。Nmap发一个空UDP包→如果收到"ICMP端口不可达"→确认closed;如果没任何回复→可能是open(服务收到但不回复),也可能是filtered(防火墙丢掉了)。两者无法区分,所以标记为 open|filtered。
教师演示三步走:
nmap -sS 192.168.1.100 → 看默认扫描结果(1000端口)nmap -sS -p 22,80,443,3306,3389 192.168.1.100 → 指定端口扫描nmap -sS -sU -p 53,161 192.168.1.100 → TCP+UDP混合扫描🔄 阶段小结:"端口扫描是Nmap最核心的能力。三种扫描方式各有主场——SYN是主力(快+隐蔽),Connect是备胎(不需要root),UDP是侦察兵(专门搜UDP服务)。实战中-sS最常用,遇到Windows服务器加-sU搜SNMP/DNS。"
🔄 过渡语:"端口扫描告诉了我们'门牌号'——22、80、3306。但22后面是OpenSSH还是Dropbear?80后面是Apache还是Nginx?这些服务的具体版本有没有已知漏洞?这就是版本侦测和OS检测的价值。"
# 版本侦测 nmap -sV 192.168.1.100 # 输出示例: # PORT STATE SERVICE VERSION # 22/tcp open ssh OpenSSH 7.4 (protocol 2.0) # 80/tcp open http Apache httpd 2.4.6 ((CentOS)) # 3306/tcp open mysql MySQL 5.7.32
🙋 提问:"版本侦测拿到了Apache 2.4.6和MySQL 5.7.32,下一步你会做什么?"
📝 参考答案:拿着版本号去查CVE漏洞库(cve.mitre.org或nvd.nist.gov),筛选出该版本存在的已知漏洞→如果有可远程利用的高危漏洞(如RCE),就可以尝试利用(在授权范围内!)。这就是信息收集→漏洞匹配→利用的完整攻击链。
# OS检测(需root) nmap -O 192.168.1.100 # 输出示例: # OS details: Linux 3.10 - 4.11 # OS CPE: cpe:/o:linux:linux_kernel:3.10
原理(类比讲解):
🙋 提问:"-O和-sV有什么区别?有时候看-sV的输出也能猜出操作系统啊?"
📝 参考答案:-sV看的是应用层(如Apache/2.4.6 (CentOS)在括号里暗示了CentOS),属于间接推断。-O看的是网络层/传输层的TCP/IP协议栈行为,属于直接指纹识别。两者可以互相印证——比如-sV暗示CentOS,-O识别为Linux 3.10-4.11(CentOS 7的内核版本范围),交叉验证后可信度更高。
# -A = -O + -sV + -sC + --traceroute nmap -A 192.168.1.100 # 一条命令 = OS检测 + 版本侦测 + 默认脚本扫描 + 路由追踪
🔄 过渡语:"讲了这么多参数,脑子里可能一团浆糊。动手敲两遍就清楚了——下面15分钟,大家打开Kali Linux。"
实验环境:
任务清单(按顺序完成):
| 序号 | 任务 | 命令 | 记录内容 |
|---|---|---|---|
| 1 | 主机发现 | nmap -sn 192.168.x.0/24 | 网段内有多少台主机在线?列出IP |
| 2 | SYN端口扫描 | nmap -sS 靶机IP | 开放了哪些TCP端口?端口状态? |
| 3 | 指定端口扫描 | nmap -sS -p 21,22,23,25,80,443,3306 靶机IP | 这些关键端口各自的开放情况 |
| 4 | UDP扫描 | nmap -sU -p 53,69,111,137,161 靶机IP | UDP端口开放情况(注意是open还是open|filtered) |
| 5 | 版本侦测 | nmap -sV 靶机IP | 每个开放端口的服务名+版本号 |
| 6 | OS检测 | sudo nmap -O 靶机IP | 推测的操作系统类型和版本 |
| 7 | 综合扫描 | nmap -A -T4 靶机IP | 完整扫描报告,与分步结果对比 |
实验报告要求:
教师巡视要点:
nmap --script vuln 靶机IP 做漏洞扫描,比较结果本节要点回顾:
-sn主机发现、-sSSYN扫描、-sV版本侦测、-OOS检测、-A综合、-p指定端口、-T4加速下节预告:
任务5.3-5.5 漏洞扫描——拿到端口和服务版本后,下一步就是匹配已知漏洞,找到真正可以攻破的"弱点"。Nessus、OpenVAS等重量级漏洞扫描器即将登场。
课后作业:
-sS 和 -sT 在同一目标上的扫描时间差异,分析原因