Skip to content

端口扫描与nmap

什么是端口扫描?

端口扫描是一种网络探测技术,用于发现目标系统上开放的端口和运行的服务。就像检查一栋大楼有哪些房间的门是开着的一样。

端口扫描的目的:

  • 发现服务:找出目标系统运行的服务

  • 风险评估:识别潜在的安全漏洞

  • 网络映射:了解目标网络结构

  • 合规检查:验证安全策略执行情况

Nmap 简介

Nmap(Network Mapper)是业界最著名的端口扫描工具,功能强大且灵活。

基本语法:

nmap [扫描类型] [选项] {目标规范}

不同扫描方式的详细区别

1. TCP SYN 扫描 (-sS) - 最常用

原理:发送TCP SYN包,根据响应判断端口状态

nmap -sS target.com
工作流程:

  1. 发送 SYN 包到目标端口

  2. 如果收到 SYN-ACK → 端口开放(然后发送 RST 断开)

  3. 如果收到 RST → 端口关闭

  4. 没有响应 → 端口被过滤

优点:

  • ✅ 快速高效

  • ✅ 隐蔽性好(不建立完整连接)

  • ✅ 被大多数系统日志记录为连接尝试

缺点:

  • ❌ 需要 root 权限

  • ❌ 可能被高级IDS检测

适用场景:大多数渗透测试和CTF场景

2. TCP Connect 扫描 (-sT)

原理:完成完整的三次握手

nmap -sT target.com
工作流程:

  1. 发送 SYN → 收到 SYN-ACK → 发送 ACK(建立连接)

  2. 立即关闭连接

优点:

  • ✅ 不需要 root 权限

  • ✅ 在所有系统上都能工作

  • ✅ 结果非常准确

缺点:

  • ❌ 速度较慢

  • ❌ 会在目标日志中留下完整连接记录

  • ❌ 容易被检测

适用场景:没有root权限时的扫描

3. UDP 扫描 (-sU)

原理:发送UDP包探测UDP服务

nmap -sU target.com
nmap -sU -p 53,161,162 target.com  # 扫描特定UDP端口
工作流程:

  1. 发送空的UDP包到目标端口

  2. 如果收到ICMP端口不可达 → 端口关闭

  3. 如果收到UDP响应 → 端口开放

  4. 没有响应 → 端口开放或被过滤

优点:

  • ✅ 能发现UDP服务

  • ✅ 很多系统不记录UDP扫描

缺点:

  • ❌ 非常慢(因为UDP无连接)

  • ❌ 结果可能不准确

  • ❌ 需要root权限

适用场景:DNS、SNMP、DHCP等UDP服务扫描

4. TCP ACK 扫描 (-sA)

原理:发送ACK包探测防火墙规则

nmap -sA target.com
工作流程:

  1. 发送ACK包到目标端口

  2. 分析返回的RST包

  3. 判断防火墙状态(过滤/未过滤)

优点:

  • ✅ 能绕过简单的状态检测防火墙

  • ✅ 探测防火墙规则

缺点:

  • ❌ 不能确定端口是否开放

  • ❌ 需要root权限

适用场景:防火墙规则探测

5. TCP Window 扫描 (-sW)

原理:基于TCP窗口大小判断端口状态

nmap -sW target.com
工作流程:

  1. 类似于ACK扫描

  2. 检查返回RST包的TCP窗口字段

  3. 非零窗口 = 端口开放,零窗口 = 端口关闭

优点:

  • ✅ 在某些系统上能准确判断端口状态

缺点:

  • ❌ 不是所有系统都支持

  • ❌ 可靠性有限

适用场景:特定系统的精确扫描

6. TCP FIN 扫描 (-sF)

原理:发送FIN包(类似连接结束)

nmap -sF target.com
工作流程:

  1. 发送FIN包到目标端口

  2. 如果收到RST → 端口关闭

  3. 没有响应 → 端口开放

优点:

  • ✅ 能绕过一些不记录FIN包的IDS

缺点:

  • ❌ 不适用于Windows系统

  • ❌ 需要root权限

适用场景:避开某些IDS的检测

7. TCP NULL 扫描 (-sN)

原理:发送没有任何标志位的TCP包

nmap -sN target.com
工作流程:

  1. 发送无标志TCP包

  2. 如果收到RST → 端口关闭

  3. 没有响应 → 端口开放

优点:

  • ✅ 高度隐蔽

缺点:

  • ❌ 不适用于Windows系统

  • ❌ 需要root权限

适用场景:需要高度隐蔽的扫描

8. TCP Xmas 扫描 (-sX)

原理:发送FIN、PSH、URG标志都设置的TCP包

nmap -sX target.com
工作流程:

  1. 发送特殊标志组合的TCP包

  2. 如果收到RST → 端口关闭

  3. 没有响应 → 端口开放

优点:

  • ✅ 非常隐蔽

缺点:

  • ❌ 不适用于Windows系统

  • ❌ 需要root权限

适用场景:避开高级IDS检测

扫描方式对比表

扫描类型 命令 需要Root 速度 隐蔽性 准确性 适用系统
TCP SYN -sS ✅ 快 高 高 所有
TCP Connect -sT ❌ 中 低 高 所有
UDP -sU ✅ 很慢 中 中 所有
TCP ACK -sA ✅ 快 中 中 所有
TCP FIN -sF ✅ 快 高 中 Unix
TCP NULL -sN ✅ 快 很高 中 Unix
TCP Xmas -sX ✅ 快 很高 中 Unix

高级扫描技巧

1. 版本检测 (-sV)

nmap -sV target.com
探测服务的具体版本信息。

2. 操作系统检测 (-O)

nmap -O target.com
猜测目标操作系统。

3. 脚本扫描 (-sC 或 --script)

nmap -sC target.com                    # 默认脚本
nmap --script vuln target.com          # 漏洞扫描脚本
nmap --script http* target.com         # 所有HTTP相关脚本

4. 时序控制 (-T)

nmap -T0 target.com    # 非常慢(隐蔽)
nmap -T1 target.com    # 慢速
nmap -T2 target.com    # 正常偏慢
nmap -T3 target.com    # 正常(默认)
nmap -T4 target.com    # 快速(推荐)
nmap -T5 target.com    # 极快

实际CTF应用示例

基础信息收集:

# 快速扫描
nmap -T4 -F target.com

# 全面扫描
nmap -T4 -A -p- target.com

# 隐蔽扫描
nmap -T2 -sS -p- target.com

针对特定服务(-p指定扫描端口):

# Web服务扫描
nmap -sV -p 80,443,8080,8443 target.com

# 数据库扫描
nmap -sV -p 3306,5432,27017 target.com

# 扫描指定范围的端口
nmap -sT -Pn -p9000-11000 192.168.192.3

结果解读

端口状态含义:

  • open:端口开放,有服务监听

  • closed:端口关闭,但主机可达

  • filtered:端口被防火墙过滤

  • unfiltered:端口可达,但状态未知

  • open|filtered:无法确定是开放还是过滤

  • closed|filtered:无法确定是关闭还是过滤

示例输出解读:

PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 8.2p1
80/tcp   open  http       Apache httpd 2.4.41
443/tcp  open  ssl/http   Apache httpd 2.4.41
3306/tcp open  mysql      MySQL 5.7.33

防御措施

如何检测端口扫描:

# 使用网络监控工具
tcpdump -i any 'tcp[13] & 2 != 0'  # 检测SYN扫描

# 使用IDS/IPS
suricata
snort

防护建议:

  • 关闭不必要的端口和服务

  • 使用防火墙限制访问

  • 定期进行安全审计

  • 监控异常网络活动

总结

掌握不同的Nmap扫描技术对于网络安全和CTF比赛至关重要:

  • 日常使用:TCP SYN扫描 (-sS)

  • 无权限时:TCP Connect扫描 (-sT)

  • UDP服务:UDP扫描 (-sU)

  • 隐蔽扫描:FIN/NULL/Xmas扫描

  • 全面评估:结合版本检测和脚本扫描