1. 概述

端口扫描是一种用于探测目标主机上哪些 TCP/IP 端口处于开放状态的技术。

无论是网络安全人员还是黑客,都会使用端口扫描来查找网络系统中的漏洞。黑客通过发现漏洞实施攻击,而安全人员则通过发现漏洞进行修复,从而提升系统的安全性。

本文将介绍端口扫描的基本概念、类型及其常用方法。

2. 什么是端口?

端口是一个操作系统中用于网络通信的虚拟地址,它通过编号来标识。不同的服务运行在不同的端口上,各自接收对应的网络流量。端口号的范围是从 0 到 65535。

防火墙控制着计算机端口上的网络流量,它可以允许或阻止特定端口的通信。

以下是一些常见的默认端口和服务:

  • 端口 20 和 21:FTP(文件传输协议),用于在客户端和服务器之间传输文件
  • 端口 22:SSH(安全外壳协议),用于远程登录和命令执行
  • 端口 25:SMTP(简单邮件传输协议),用于电子邮件的传输
  • 端口 53:DNS(域名系统),用于将域名解析为对应的 IP 地址
  • 端口 80:HTTP(超文本传输协议),用于传输超媒体文档

进行端口扫描时,我们常用的一个工具是 Nmap(网络映射器),它是目前最流行、最强大的开源端口扫描工具之一。

3. 端口扫描的类型与结果

端口扫描主要分为两种类型:

  • 水平扫描(Horizontal Scanning):对一组 IP 地址扫描某个特定端口
  • 垂直扫描(Vertical Scanning):对某个特定 IP 地址扫描多个端口

例如,水平扫描的结构如下图所示:

Horizontal Scanning

端口扫描的结果通常分为以下几种状态:

  • Open(开放):该端口有服务在监听,并且可以接受连接
  • Closed(关闭):没有服务在监听该端口
  • ⚠️ Filtered(过滤):防火墙或其他网络设备阻止了连接,无法确定端口是否开放
  • ⚠️ Open|Filtered(开放或过滤):无法判断端口是开放还是被过滤

4. 端口扫描的方法

端口扫描有多种实现方式,大多数基于 TCP 或 UDP 协议。

4.1. TCP SYN 扫描

这是最常用的扫描方法,速度快且相对隐蔽。它不会完成完整的 TCP 三次握手,因此也被称为“半开放扫描”。

TCP SYN

扫描器发送一个 SYN 包后:

  • 如果收到 SYN/ACK 回复,说明端口是 开放的
  • 如果收到 RST 回复,说明端口是 关闭的
  • 如果多次请求都没有响应,说明端口是 被过滤的

4.2. TCP Connect 扫描

这种方法通过操作系统发起完整的 TCP 连接来判断端口状态。适用于没有原始报文权限的场景(如某些受限环境)。

TCP Connect

缺点是:

  • 速度慢,需要更多数据包
  • 由于建立了完整连接,更容易被目标系统记录日志

4.3. TCP ACK 扫描

这种扫描用于探测防火墙规则,判断其是否为状态防火墙,并识别哪些端口被过滤。

TCP ACK

发送仅设置 ACK 标志的 TCP 包:

  • 如果收到 RST 响应,说明端口是 未被过滤的
  • 但无法判断端口是开放还是关闭

4.4. TCP NULL、FIN 和 XMAS 扫描

这三种方法利用了 TCP RFC 793 中的漏洞来判断端口状态:

  • NULL 扫描:不设置任何标志位
  • FIN 扫描:设置 FIN 标志位
  • XMAS 扫描:设置 FIN、PSH 和 URG 标志位

如果端口是关闭的,目标系统会返回 RST;如果是开放或被过滤的,则不会响应。如果收到 ICMP 不可达错误(如 type 3, code 3),说明端口被过滤。

示例:XMAS 扫描结果如下图所示:

TCP XMAS

4.5. UDP 扫描

UDP 是无连接协议,因此 UDP 扫描不如 TCP 精确。

扫描器发送 UDP 包后:

  • 若收到 ICMP 端口不可达(type 3, code 3),说明端口 关闭
  • 若收到其他 ICMP 不可达错误(如 type 3, code 1/2/9/10/13),说明端口 被过滤
  • 若收到 UDP 响应包,说明端口 开放
  • 若多次重试都没有响应,说明端口是 开放或被过滤

示意图如下:

UDP Scan

5. 总结

本文介绍了端口的基本概念、端口扫描的类型和常用方法。黑客利用扫描结果寻找攻击入口,而安全人员则用它来加固系统防护。掌握这些知识对于理解网络攻击原理和防御策略至关重要。

踩坑提醒:使用 Nmap 时务必遵守法律和道德规范,未经授权的扫描行为可能违法。
⚠️ 建议:实际测试时建议在内网或授权环境中进行,避免误伤他人系统。


原始标题:Port Scanning Explained