mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-22 03:10:42 +08:00
- UDP 插件在 -p 指定端口时被跳过 - Redis exploit 无超时保护 / readReply 吞没非超时错误 - service_probe 连接丢失后静默成功 - SNMP 探测成功但终端无输出 - SSH 爆破不稳定 (并发过高 + 自适应超时过短 + 限流误判) - 进度条 isActive 竞态 新增 Config.ModuleTimeout() 协议级超时下限 (≥3s) 新增 ErrorTypeThrottle 限流错误分类
3.3 KiB
3.3 KiB
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.isActive从bool改为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 |
反馈与贡献
- 🐛 发现 Bug → 提交 Bug 报告
- 🎯 结果不准 → 提交误报/漏报
- ✨ 功能建议 → 提交功能请求
- 💬 使用疑问 → Discussions