主动扫描

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

一、什么是主动扫描

主动扫描是指直接与目标主机进行交互,通过构造特定协议的数据包,观察目标的响应行为。

可以获得的信息有:

  • 目标主机是否在线

  • 哪些端口处于开放状态

  • 开放端口上运行的服务类型及版本

  • 目标主机的操作系统类型

与被动扫描不同,主动扫描具有更高的准确性和信息丰富度,但同时也更容易被目标系统的防火墙或入侵检测系统(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.0192.168.177.255 共 256 个 IP 执行主机发现和端口扫描。

2. 扫描单个主机

最简单的用法是直接指定 IP 或域名:

nmap 192.168.177.142

Nmap 默认会:

  • 发送 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

image-mrcQ.png

注意: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 脚本包含三部分:

  1. Head:元数据(作者、描述、类别)

  2. Rule:执行条件(如 port.number == 80

  3. 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等配套工具,为网络安全评估与渗透测试提供了完整、高效的侦察流程。