Files
fscan/.github/release-notes/v2.2.0-rc.1.md
T
ZacharyZcR 42092d8664 fix: 修复实机测试发现的可靠性问题 (v2.2.0-rc.1)
- UDP 插件在 -p 指定端口时被跳过
- Redis exploit 无超时保护 / readReply 吞没非超时错误
- service_probe 连接丢失后静默成功
- SNMP 探测成功但终端无输出
- SSH 爆破不稳定 (并发过高 + 自适应超时过短 + 限流误判)
- 进度条 isActive 竞态

新增 Config.ModuleTimeout() 协议级超时下限 (≥3s)
新增 ErrorTypeThrottle 限流错误分类
2026-06-14 22:14:02 +08:00

3.3 KiB
Raw Blame History

fscan v2.2.0-rc.1

⚠️ 这是预发布版本 (Release Candidate),可能存在未发现的问题。 如果你在使用中遇到任何异常,请积极通过 Issue 反馈,帮助我们尽快稳定正式版。 生产环境建议继续使用 v2.1.3


与 v2.2.0-rc 的变更

本版本聚焦实机测试发现的可靠性问题修复,无新功能。

🐛 Bug 修复

  • UDP 插件在 -p 指定端口时被跳过 — 用户指定 -p 53,161 等包含 UDP 端口时,DNS/SNMP 等 UDP 插件不会执行。现在按用户指定的端口过滤并正确调度
  • Redis exploit 操作无超时保护 — exploit 阶段移除了全部 deadline,服务端卡滞时 goroutine 永久阻塞。现在设置 30s 操作超时
  • Redis readReply 吞没非超时错误 — 只要读到任何数据就忽略所有错误,可能返回截断响应。现在仅对 timeout 类型错误做容忍
  • service_probe 连接丢失后静默成功 — Write/Read 在 Conn=nil 时返回 nil 而非错误,导致后续探测静默跳过。现在返回明确的 errConnLost
  • SNMP 探测成功但终端无输出 — SNMP 插件缺少 session.LogVuln 调用,成功结果只写入文件不在终端显示

可靠性改善

  • 协议级超时下限(ModuleTimeout — 新增 Config.ModuleTimeout() 方法,保证插件级交互超时不低于 3s。自适应系统将端口扫描超时压到 1s 时,SSH 握手/SNMP 探测/数据库认证等多轮交互协议不再受影响。全部 44 个服务插件已迁移
  • SSH 爆破并发优化 — SSH 并发从 30 降至 3,避免触发 OpenSSH MaxStartups 限流导致大量连接被丢弃
  • SSH 限流错误分类(ErrorTypeThrottle — 新增限流错误类型,区分服务端限流(MaxStartups)和真正的网络不可达。限流错误不计入连续失败计数,仅触发 500ms 退避后继续,避免误判目标不可达而提前放弃
  • SSH 握手 TCP deadline — 在 SSH NewClientConn 前设置 TCP 级别 deadline 兜底整个握手过程,握手成功后清除
  • 进度条竞态修复ProgressManager.isActivebool 改为 atomic.Bool,消除 UpdateProgress 与 FinishProgress 之间的数据竞态
  • gmtls stdout 竞态修复 — 移除 suppressGMTLSStdout 中对 os.Stdout 的非同步重定向,消除与 gmtls 内部 goroutine 的数据竞态
  • Lint 清理 — 修复 cassandra/ipmi/mongodb/webscan 中的 ineffassign、unused、errcheck 问题

📊 实测验证

指标 v2.2.0-rc v2.2.0-rc.1
SSH -m ssh 爆破成功率 ~60% 100% (10/10)
SNMP -p 161 终端输出 ✗ 不显示 ✓ 正常
UDP 插件 -p 指定端口 ✗ 跳过 ✓ 正确调度
Redis exploit 超时保护 ✗ 无 ✓ 30s

反馈与贡献