主动扫描与Nmap的使用
主动扫描
在数字互联时代,网络安全是信息基础设施稳定运行的核心保障。主动扫描作为渗透测试与安全评估的首要环节,通过向目标系统发送特制数据包并分析响应,可精准获取网络状态、服务配置及潜在漏洞,是网络安全检测的关键技术。
一、什么是主动扫描

主动扫描是指直接与目标主机进行交互,通过构造特定协议的数据包,观察目标的响应行为。
可以获得的信息有:
目标主机是否在线
哪些端口处于开放状态
开放端口上运行的服务类型及版本
目标主机的操作系统类型
与被动扫描不同,主动扫描具有更高的准确性和信息丰富度,但同时也更容易被目标系统的防火墙或入侵检测系统(IDS)识别和记录。
二、主机发现:识别网络中的活跃设备
在开展深入扫描前,首先需要确定哪些IP地址对应的是活跃主机。这一过程称为主机发现(Host Discovery),主要依赖于以下几种协议层次的方法:


1. 二层发现:ARP协议

在局域网内,使用ARP(Address Resolution Protocol)请求是最快速且可靠的方式。但是由于ARP不可路由,所以仅适用于同一子网内的主机探测。
2. 三层发现:ICMP协议

通过发送ICMP Echo Request(即ping)并等待Echo Reply,可跨网段判断主机可达性。然而,许多防火墙默认会过滤ICMP流量,导致该方法在实际中可能失效。
3. 四层发现:TCP/UDP协议

向目标主机的特定端口(如80、443)发送SYN或UDP包,根据是否有响应(如RST或ICMP端口不可达)来判断主机是否在线。这种方法绕过了ICMP限制,可靠性更高。
三、端口扫描:揭示服务入口
端口是网络服务的“门牌号”。标准端口号为16位,范围0–65535,其中0–1023为知名端口(Well-known Ports),通常对应常见服务,例如:
HTTP:80
HTTPS:443
SSH:22
MySQL:3306
SQL Server:1433

常见的TCP端口扫描技术包括:
TCP Connect 扫描:完成完整的三次握手,易被日志记录。

TCP SYN 扫描(半开扫描):仅发送SYN包,若收到SYN-ACK则判定端口开放,效率高且隐蔽性较好。

TCP FIN 扫描:向关闭端口发送FIN包,某些系统(如Windows)会返回RST,可用于操作系统识别。

UDP端口扫描则更为复杂,因为UDP是无连接协议。通常通过发送空UDP包,若收到ICMP“端口不可达”(ICMP_PORT_UNREACH错误)消息,则说明端口关闭;若无响应,可能为开放或被过滤。

端口状态通常分为五类:
Open:端口开放,服务正在监听
Closed:端口关闭,但主机可达
Filtered:防火墙阻止了探测包
Unfiltered:端口可访问,但无法确定是否开放
Open|Filtered:无法明确区分开放或被过滤
四、操作系统与服务识别
不同厂商对TCP/IP协议栈的实现存在细微差异,这些差异构成了协议栈指纹(Stack Fingerprinting)的基础。通过分析以下字段,可推测目标大概的操作系统和版本:
IP TTL(Time to Live)初始值
TCP窗口大小(Window Size)
IP服务类型(TOS)
DF(Don’t Fragment)标志位
TCP初始序列号(ISN)生成模式
例如,Linux、Windows、FreeBSD等系统在ISN生成策略上各不相同:有的采用时间相关递增,有的使用伪随机算法。
此外,通过向开放端口发送特定请求并捕获Banner信息(如HTTP服务器返回的Server: Apache/2.4.41),可进一步识别服务软件及其版本,这对后续漏洞利用至关重要。
Nmap 的简单使用
一、Nmap 核心功能概览
Nmap 支持多种扫描技术,覆盖网络层(L3)、传输层(L4)甚至应用层(L7)。主要功能包括:
| 功能 | 对应参数 | 说明 |
|---|---|---|
| 主机发现 | -sn, -PR, -sP |
判断哪些 IP 在线 |
| 端口扫描 | -sS, -sT, -sU |
探测 TCP/UDP 开放端口 |
| 服务识别 | -sV |
识别服务名称与版本 |
| OS 识别 | -O |
推断操作系统类型 |
| 脚本扩展 | --script |
执行 NSE 脚本(如漏洞检测) |
注意:Nmap 命令大小写敏感!例如
-sS和-ss完全不同。
Nmap 功能架构图

二、Nmap 基础命令实战
1. 扫描整个子网
使用 CIDR 表示法可一次性扫描整个网段:
nmap 192.168.177.0/24该命令将可以对 192.168.177.0 到 192.168.177.255 共 256 个 IP 执行主机发现和端口扫描。

2. 扫描单个主机
最简单的用法是直接指定 IP 或域名:
nmap 192.168.177.142Nmap 默认会:
发送 ICMP Echo 和 TCP ACK 包进行主机发现;
对 top 1000 个常用端口执行 SYN 扫描;
尝试识别开放端口上的服务。

3. 主机发现:跳过 Ping 或强制探测
许多服务器会禁用 ICMP(即“禁 ping”),此时需调整策略:
| 场景 | 命令 | 说明 |
|---|---|---|
| 跳过 Ping,强制扫描 | nmap -Pn 192.168.1.100 |
即使无响应也继续扫描端口 |
| 仅做主机发现(不扫端口) | nmap -sn 192.168.1.0/24 |
快速列出所有在线主机 |
| 内网 ARP 扫描(最快最准) | nmap -PR 192.168.1.0/24 |
利用二层 ARP 协议,无法被防火墙过滤 |
| TCP SYN 探测 | nmap -sS 192.168.1.100 |
发送 SYN 包判断主机是否可达 |
| UDP 探测 | nmap -sU 192.168.1.100 |
适用于 DNS、SNMP 等 UDP 服务 |
💡 原理补充:ARP 扫描之所以高效,是因为同一局域网内的设备收到 ARP 请求后必须回复,且 ARP 不经过路由器,因此不会被三层防火墙拦截。
三、端口扫描详解
端口状态的五种类型
端口状态通常分为五类,
Nmap 会根据响应将端口归类为以下状态:
| 状态 | 含义 | 常见原因 |
|---|---|---|
open |
端口开放 | 服务正在监听 |
closed |
端口关闭 | 主机可达,但无服务 |
filtered |
被过滤 | 防火墙丢弃探测包,无响应 |
unfiltered |
未过滤 | 主机响应,但无法判断开闭(罕见) |
| `open | filtered` | 不确定 |
扫描策略选择
| 扫描类型 | 命令 | 特点 |
|---|---|---|
| SYN 扫描(默认) | nmap -sS |
隐蔽、高效,需 root 权限 |
| Connect 扫描 | nmap -sT |
使用系统 connect(),无需 root,但易被日志记录 |
| UDP 扫描 | nmap -sU |
慢且不可靠(依赖 ICMP 错误),但必要 |
扫描指定端口或常用端口
有时只关心特定服务,可精准指定端口:
# 扫描 Web 和数据库端口
nmap -p 80,443,3306,1433 192.168.177.142
# 扫描前 50 个最常用端口
nmap --top-ports 50 192.168.177.142
# 扫描全部 65535 个端口
nmap -p- 192.168.177.142📌 知名端口速查:
HTTP: 80
HTTPS: 443
SSH: 22
SMB: 139 / 445
RDP: 3389
MySQL: 3306
SQL Server: 1433
Oracle: 1521
四、服务与操作系统识别
1. 服务版本检测
使用 -sV 参数可抓取服务 Banner,识别具体软件与版本:
nmap -sV -p 80,22,3306 192.168.177.142
这对后续漏洞匹配至关重要——例如,Apache 2.4.41 可能受 CVE-2021-41773 影响。
2. 操作系统指纹识别(OS Fingerprinting)
不同操作系统对 TCP/IP 协议栈的实现存在细微差异,Nmap 利用这些“指纹”推断 OS 类型:
IP TTL(Linux ≈ 64,Windows ≈ 128)
TCP 窗口大小
DF(Don’t Fragment)位设置
对异常包(如 FIN)的响应行为
ISN(初始序列号)生成算法
启用 OS 识别:
nmap -O 192.168.177.142
注意:OS 识别需要 root 权限。
五、Nmap 脚本引擎(NSE):自动化安全检测
Nmap 的真正威力在于 NSE(Nmap Scripting Engine) ——一个基于 Lua 的脚本系统,可扩展数千种功能。
常用脚本类别
| 类别 | 用途 | 示例命令 |
|---|---|---|
vuln |
检测已知漏洞 | nmap --script vuln target |
brute |
暴力破解 | nmap --script brute -p 22 target |
discovery |
信息收集(SMB、SNMP) | nmap --script smb-enum-shares target |
safe |
安全非侵入式探测 | nmap --script safe target |
version |
增强版本识别 | 自动随 -sV 加载 |
实战示例
工业控制系统识别(Ethernet/IP)
nmap -sU -p 44818 --script enip-info 192.168.177.142
Web 指纹识别(配合 whatweb)
虽然 Nmap 可识别 Web 服务,但更专业的工具如 whatweb 能提供更细粒度的指纹:
whatweb -v http://192.168.177.142

自定义 NSE 脚本(简要)
一个 NSE 脚本包含三部分:
Head:元数据(作者、描述、类别)
Rule:执行条件(如
port.number == 80)Action:实际逻辑
示例:检测 80 端口并返回提示
portrule = function(host, port)
return port.protocol == "tcp" and port.number == 80 and port.state == "open"
end
action = function(host, port)
return "Web server detected!"
end六、配套工具推荐
Nmap 并非万能,常需与其他工具配合:
dirb/gobuster:爆破 Web 目录(如/admin,/backup.zip)whatweb:深度网站指纹识别Shodan/ZoomEye:互联网资产搜索引擎,用于前期侦察
七、Nmap 核心命令速查表
| 目标 | 命令 |
|---|---|
| 快速扫描单主机 | nmap 192.168.1.100 |
| 扫描整个子网 | nmap 192.168.1.0/24 |
| 禁 ping 时扫描 | nmap -Pn target |
| 仅发现主机 | nmap -sn target |
| 内网 ARP 扫描 | nmap -PR target |
| 指定端口扫描 | nmap -p 80,443 target |
| 扫描常用端口 | nmap --top-ports 100 target |
| 识别操作系统 | nmap -O target |
| 识别服务版本 | nmap -sV target |
| 全面扫描(含脚本) | nmap -A target |
| 漏洞检测 | nmap --script vuln target |
总结
本文系统介绍了主动扫描的基本原理与实践方法,重点围绕Nmap工具,详细讲解了主机发现、端口扫描、服务及操作系统识别等关键技术,并涵盖Nmap常用参数(如 -sS、-sV、-O)和脚本引擎(NSE)在漏洞检测中的应用,同时推荐了whatweb、gobuster等配套工具,为网络安全评估与渗透测试提供了完整、高效的侦察流程。
- 感谢你赐予我前进的力量

