在互联网端口扫描过程中寻找速度和准确度之间的平衡点
字数 2319 2025-08-26 22:11:40

互联网端口扫描中速度与准确度的平衡策略

1. 端口扫描概述

端口扫描是渗透测试和漏洞赏金活动中最重要的侦察阶段技术之一,用于识别目标主机和网络上的开放端口及运行的服务。

1.1 扫描器分类

面向连接(同步模式)扫描器

  • 特点:发送请求并等待响应,直到超时
  • 优点:准确性高,能识别丢弃的数据包
  • 代表工具:Nmap

无连接(异步模式)扫描器

  • 特点:不依赖当前端口探测完成即可启动下一个端口扫描
  • 优点:扫描速度快
  • 缺点:结果可能不太准确
  • 代表工具:Masscan、Zmap

2. 主流扫描工具对比

2.1 Nmap特点

优点

  • 准确性高(使用同步模式)
  • 功能丰富
  • 支持域名和IP地址(IPv4和IPv6)

缺点

  • 扫描大量目标时速度慢
  • 高速率扫描大端口范围时准确性下降

2.2 Masscan特点

优点

  • 速度极快(使用异步模式)
  • 语法与Nmap相似

缺点

  • 不接受域名作为目标输入
  • 不能自动调整传输速率
  • 高速扫描大端口范围时准确性不足

3. 优化扫描策略

3.1 基本思路

结合Masscan的速度和Nmap的准确性:

  1. 使用Masscan进行初始全端口探测
  2. 使用Nmap对Masscan探测出的开放端口进行复扫和Banner识别

3.2 需要解决的问题

  1. Nmap扫描大量目标时的速度问题
  2. Masscan高速扫描大端口范围时的准确性问题

4. Masscan优化测试

4.1 测试用例与结果

测试用例#1:不同速率扫描所有TCP端口

  • 速率设置:250kpps、100kpps、50kpps
  • 结果:速率越慢,发现的开放端口越多,但耗时更长

测试用例#2:拆分目标子网并发扫描

  • 将/16子网拆分为/20子网
  • 并发任务设置:
    • 5任务/100kpps(总500kpps)
    • 5任务/50kpps
    • 20任务/10kpps
  • 结果:
    • 比常规扫描快2-3倍,但开放端口较少
    • 使用最大速率导致开放端口更少
    • 少任务数+高扫描速率效果更好

测试用例#3:拆分端口范围并发扫描

四种拆分方式:

  1. 拆分为5个端口范围
  2. 拆分为2个端口范围
  3. 拆分为8个端口范围
  4. 拆分为4个端口范围

结果:

  • 拆分端口范围能扫描出更多开放端口
  • 更少的并行任务扫描出更多开放端口
  • 拆分为5个端口范围效果最佳

4.2 Masscan结论

  1. 100% CPU利用率会导致端口开放性降低
  2. 使用最大速率容量扫描会导致更少开放端口
  3. 并发任务数越少,扫描出的开放端口越多
  4. 拆分端口范围优于拆分子网
  5. 拆分为5个或4个端口范围效果最佳

5. Nmap优化测试

5.1 测试用例与结果

测试用例#1:常规扫描所有TCP端口

  • 结果:扫描4.5天未完成,性能太低

测试用例#2:并发任务扫描所有TCP端口

  • 5并发任务:2.8天未完成
  • 64并发任务:5天未完成

测试用例#3:扫描Masscan识别的开放端口和主机组合列表

  • 方法:
    1. 获取主机列表:grep "Host:" | cut -d " " -f2 | sort -V | uniq
    2. 获取开放端口组合列表:grep "Ports:" | cut -d " " -f4 | cut -d "/" -f1 | sort -n | uniq | paste -sd,
  • 结果:
    • 常规Nmap扫描发现更多开放端口
    • 并发Nmap扫描发现较少开放端口
    • 可能发现Masscan遗漏的端口

测试用例#4:扫描Masscan识别的特定主机上的特定端口

  • 方法:
    1. 获取主机列表:cat | grep Host | awk '{print $2,$5}' | sed 's@/.*@@' | sort -t ' ' -n -k2 | awk -F ' ' -v OFS=' ' '{x=$1;$1="";a[x]=a[x]","$0}END{for(x in a) print x,a[x]}' | sed 's/, /,/g' | sed 's/ ,/ /' | sort -V -k1 | cut -d " " -f1
    2. 获取各主机开放端口列表:cat | grep Host | awk '{print $2,$5}' | sed 's@/.*@@' | sort -t ' ' -n -k2 | awk -F ' ' -v OFS=' ' '{x=$1;$1="";a[x]=a[x]","$0}END{for(x in a) print x,a[x]}' | sed 's/, /,/g' | sed 's/ ,/ /' | sort -V -k1 | cut -d " " -f2
  • 结果:
    • 比测试用例#3略快但发现端口较少
    • 10和50并发任务差异不大

5.2 Nmap结论

  1. 测试用例#3(扫描Masscan识别的开放端口和主机组合列表)效果最佳
  2. 100% CPU利用率导致检测出更少开放端口
  3. 更少的并发任务数检测出更多开放端口

6. 推荐扫描方法

  1. Masscan阶段

    • 运行2-3个并发Masscan任务
    • 将65535个端口分为4-5个更小范围
    • 示例命令:
      masscan -p 1-13107 --rate 50000 --wait 0 --open TARGET_SUBNET -oG range1.gnmap
      masscan -p 13108-26214 --rate 50000 --wait 0 --open TARGET_SUBNET -oG range2.gnmap
      
  2. 结果处理

    • 获取主机列表:
      grep "Host:" *.gnmap | cut -d " " -f2 | sort -V | uniq > HOSTS
      
    • 获取开放端口组合列表:
      grep "Ports:" *.gnmap | cut -d " " -f4 | cut -d "/" -f1 | sort -n | uniq | paste -sd, > OPEN_PORTS
      
  3. Nmap阶段

    • 使用常规Nmap扫描:
      sudo nmap -sSV -p OPEN_PORTS -v --open -Pn -n --randomize-hosts -T4 -iL HOSTS -oA OUTPUT
      

7. 注意事项

  1. 避免扫描时CPU过载
  2. 不要使用扫描机器的最大速率容量
  3. 避免运行过多并行任务
  4. 考虑使用多个IP地址进行扫描,避免单一IP被封锁

8. 研究限制

  1. 仅使用Nmap v7.70和Masscan v1.0.5-51-g6c15edc
  2. 仅涉及IPv4地址
  3. 不包括UDP端口扫描
  4. 仅测试4个/16目标网络
  5. 扫描机器不支持PF_RING,Masscan速率限制在250kpps
  6. 仅使用单一固定IP进行扫描
互联网端口扫描中速度与准确度的平衡策略 1. 端口扫描概述 端口扫描是渗透测试和漏洞赏金活动中最重要的侦察阶段技术之一,用于识别目标主机和网络上的开放端口及运行的服务。 1.1 扫描器分类 面向连接(同步模式)扫描器 : 特点:发送请求并等待响应,直到超时 优点:准确性高,能识别丢弃的数据包 代表工具:Nmap 无连接(异步模式)扫描器 : 特点:不依赖当前端口探测完成即可启动下一个端口扫描 优点:扫描速度快 缺点:结果可能不太准确 代表工具:Masscan、Zmap 2. 主流扫描工具对比 2.1 Nmap特点 优点 : 准确性高(使用同步模式) 功能丰富 支持域名和IP地址(IPv4和IPv6) 缺点 : 扫描大量目标时速度慢 高速率扫描大端口范围时准确性下降 2.2 Masscan特点 优点 : 速度极快(使用异步模式) 语法与Nmap相似 缺点 : 不接受域名作为目标输入 不能自动调整传输速率 高速扫描大端口范围时准确性不足 3. 优化扫描策略 3.1 基本思路 结合Masscan的速度和Nmap的准确性: 使用Masscan进行初始全端口探测 使用Nmap对Masscan探测出的开放端口进行复扫和Banner识别 3.2 需要解决的问题 Nmap扫描大量目标时的速度问题 Masscan高速扫描大端口范围时的准确性问题 4. Masscan优化测试 4.1 测试用例与结果 测试用例#1:不同速率扫描所有TCP端口 速率设置:250kpps、100kpps、50kpps 结果:速率越慢,发现的开放端口越多,但耗时更长 测试用例#2:拆分目标子网并发扫描 将/16子网拆分为/20子网 并发任务设置: 5任务/100kpps(总500kpps) 5任务/50kpps 20任务/10kpps 结果: 比常规扫描快2-3倍,但开放端口较少 使用最大速率导致开放端口更少 少任务数+高扫描速率效果更好 测试用例#3:拆分端口范围并发扫描 四种拆分方式: 拆分为5个端口范围 拆分为2个端口范围 拆分为8个端口范围 拆分为4个端口范围 结果: 拆分端口范围能扫描出更多开放端口 更少的并行任务扫描出更多开放端口 拆分为5个端口范围效果最佳 4.2 Masscan结论 100% CPU利用率会导致端口开放性降低 使用最大速率容量扫描会导致更少开放端口 并发任务数越少,扫描出的开放端口越多 拆分端口范围优于拆分子网 拆分为5个或4个端口范围效果最佳 5. Nmap优化测试 5.1 测试用例与结果 测试用例#1:常规扫描所有TCP端口 结果:扫描4.5天未完成,性能太低 测试用例#2:并发任务扫描所有TCP端口 5并发任务:2.8天未完成 64并发任务:5天未完成 测试用例#3:扫描Masscan识别的开放端口和主机组合列表 方法: 获取主机列表: grep "Host:" | cut -d " " -f2 | sort -V | uniq 获取开放端口组合列表: grep "Ports:" | cut -d " " -f4 | cut -d "/" -f1 | sort -n | uniq | paste -sd, 结果: 常规Nmap扫描发现更多开放端口 并发Nmap扫描发现较少开放端口 可能发现Masscan遗漏的端口 测试用例#4:扫描Masscan识别的特定主机上的特定端口 方法: 获取主机列表: cat | grep Host | awk '{print $2,$5}' | sed 's@/.*@@' | sort -t ' ' -n -k2 | awk -F ' ' -v OFS=' ' '{x=$1;$1="";a[x]=a[x]","$0}END{for(x in a) print x,a[x]}' | sed 's/, /,/g' | sed 's/ ,/ /' | sort -V -k1 | cut -d " " -f1 获取各主机开放端口列表: cat | grep Host | awk '{print $2,$5}' | sed 's@/.*@@' | sort -t ' ' -n -k2 | awk -F ' ' -v OFS=' ' '{x=$1;$1="";a[x]=a[x]","$0}END{for(x in a) print x,a[x]}' | sed 's/, /,/g' | sed 's/ ,/ /' | sort -V -k1 | cut -d " " -f2 结果: 比测试用例#3略快但发现端口较少 10和50并发任务差异不大 5.2 Nmap结论 测试用例#3(扫描Masscan识别的开放端口和主机组合列表)效果最佳 100% CPU利用率导致检测出更少开放端口 更少的并发任务数检测出更多开放端口 6. 推荐扫描方法 Masscan阶段 : 运行2-3个并发Masscan任务 将65535个端口分为4-5个更小范围 示例命令: 结果处理 : 获取主机列表: 获取开放端口组合列表: Nmap阶段 : 使用常规Nmap扫描: 7. 注意事项 避免扫描时CPU过载 不要使用扫描机器的最大速率容量 避免运行过多并行任务 考虑使用多个IP地址进行扫描,避免单一IP被封锁 8. 研究限制 仅使用Nmap v7.70和Masscan v1.0.5-51-g6c15edc 仅涉及IPv4地址 不包括UDP端口扫描 仅测试4个/16目标网络 扫描机器不支持PF_ RING,Masscan速率限制在250kpps 仅使用单一固定IP进行扫描