深入解析Nmap核心端口扫描技术:TCP连接、SYN与UDP扫描
本文对应的TryHackMe实验房间地址:https://tryhackme.com/room/nmap02
本文核心内容:详细解释Nmap中TCP连接扫描、TCP SYN扫描和UDP端口扫描的工作机制与差异。
TCP和UDP端口的状态分类
IP地址用于标识网络上的主机,而TCP或UDP端口则用于定位该主机上运行的特定服务。例如,HTTP服务通常绑定到TCP 80端口,HTTPS服务则使用443端口,但管理员也可自定义这些端口。在同一IP地址上,每个端口只能被一个服务监听。
基础端口状态分为两种:
- Open:端口上存在正在监听的服务。
- Closed:端口上没有服务监听。
实际环境中,防火墙等安全设备会增加复杂性。Nmap定义了六种状态:
- Open:服务正在监听。
- Closed:端口可访问,但无服务监听。
- Filtered:因防火墙或设备拦截,Nmap无法判断端口状态。
- Unfiltered:端口可访问,但Nmap无法确定状态(常见于ACK扫描)。
- Open|Filtered:无法判定是开启还是被过滤。
- Closed|Filtered:无法判定是关闭还是被过滤。
TCP头部标志位
Nmap的多种TCP扫描依赖对TCP头部标志位的操控。TCP头部前24字节中,标志位区域尤为关键:
- URG:紧急指针有效,数据需优先处理。
- ACK:确认号有效,用于确认数据接收。
- PSH:推送数据,要求立即交付给应用层。
- RST:重置连接,由防火墙或目标主机发送以中断通信。
- SYN:同步序列号,用于建立TCP连接。
- FIN:发送方无更多数据发送。
TCP连接扫描 (-sT)
TCP连接扫描通过完成三次握手来确认端口状态。过程如下:客户端发送SYN包,若端口开放,服务器回应SYN/ACK,客户端再发送ACK完成握手。之后,Nmap发送RST/ACK断开连接。
此扫描方式适用于非特权用户(非root或非sudoer)。默认扫描1000个常见端口,可通过-F缩减至100个。示例命令及输出:
nmap -sT 10.10.10.1
输出结果会列出开放端口及其服务信息。
TCP SYN扫描 (-sS)
SYN扫描是Nmap的默认模式,但需要root权限。它不完成三次握手:发送SYN后,若收到SYN/ACK即判定端口开放,并立即回复RST断开连接。这种方式更隐蔽,降低被日志记录的风险。
扫描关闭端口时,目标会回复RST/ACK。示例命令:
sudo nmap -sS 10.10.10.1
与TCP连接扫描相比,SYN扫描更快且不易被察觉。
UDP扫描 (-sU)
UDP是无连接的,因此扫描方式不同:发送UDP数据包后,若端口开放,通常无响应(Nmap据此判定为开放或过滤);若端口关闭,目标会返回ICMP"端口不可达"错误(类型3,代码3)。
由于UDP扫描需等待超时,速度较慢。可添加-F(快速模式)和-v(详细输出)提升效率。示例:
sudo nmap -sU -F -v 10.10.10.1
端口范围与性能调优
可自定义扫描端口:
-p 22,80,443:扫描指定端口。-p 1-1023:扫描范围。-p-:扫描所有65535个端口。--top-ports 10:扫描最常见的前10个端口。
速度控制通过-T0至-T5实现,-T0最慢(避开IDS),-T5最快(可能丢包)。常用选项:
-T4:CTF及渗透测试常用。-T1:实战中保持隐蔽。
更细粒度控制:--min-rate 10和--max-rate 50限制发包速率;--min-parallelism 512设置并行探针数。