### Nmap 的 FIN 扫描和空扫描是什么

1. FIN 扫描 (FIN Scan)

- 命令：`nmap -sF <target>`
- 原理：
  - FIN 扫描的原理基于 TCP 协议的 RFC 793 规范
  - 攻击者向目标端口发送一个只包含 `FIN`（Finish）标志位的 TCP 数据包
  - 如果端口是关闭的：根据 TCP 协议规范，目标系统会回复一个带有 `RST`（Reset）标志位的 TCP 包，表示连接已重置
  - 如果端口是开放的：根据 TCP 协议规范，目标系统会忽略这个包，不回复任何信息
- 优点：
  - 隐蔽性：由于不进行完整的三次握手，许多基本的防火墙和 IDS 都不会记录这种连接尝试，从而使扫描行为更加隐蔽
  - 绕过状态防火墙：一些状态防火墙只跟踪那些以 `SYN` 包开始的连接。由于 FIN 扫描不使用 `SYN` 包，因此可以绕过这类防火墙
- 缺点：
  - Windows 兼容性：FIN 扫描在许多非 Windows 系统（如 Linux、BSD）上表现良好，但在 Windows 系统上，即使端口是开放的，它也可能回复一个 `RST` 包，导致扫描结果不准确。这是因为 Windows 系统的 TCP/IP 栈实现与 RFC 规范略有不同

2. 空扫描 (Null Scan)

- 命令：`nmap -sN <target>`
- 原理：
  - 空扫描的原理与 FIN 扫描类似，也基于 TCP 协议规范
  - 攻击者向目标端口发送一个没有任何标志位（`SYN`, `ACK`, `FIN`, `RST` 等）的 TCP 数据包
  - 如果端口是关闭的：根据 TCP 协议规范，目标系统会回复一个带有 `RST` 标志位的 TCP 包
  - 如果端口是开放的：根据 TCP 协议规范，目标系统会忽略这个包，不回复任何信息
- 优点：
  - 极度隐蔽：由于发送的数据包没有任何标志位，空扫描比 FIN 扫描更具隐蔽性，因为数据包看起来像是损坏或无效的，许多 IDS 可能会直接忽略它
- 缺点：
  - Windows 兼容性：与 FIN 扫描一样，空扫描在 Windows 系统上同样表现不佳，即使端口开放，也可能收到 `RST` 回复，导致误报