ZacharyZcR
|
6d7e6cd394
|
fix: 修复3个实测输出问题
1. 静默模式NDJSON banner截断至200字符
Redis INFO响应~5KB导致JSONL单行过长,截断后加...后缀
2. CSV漏洞Type列补全
ResultTypeVuln的fillDetail未设type字段,CSV Vulns列为空
统一设为"vulnerability"
3. ICMP权限不足告警精简
4行告警(listen失败/连接失败/权限不足/切换ping)合并为1行
|
2026-06-14 22:23:51 +08:00 |
|
ZacharyZcR
|
626d8f79bb
|
fix: 修复3个实测发现的问题
1. -pwd 支持逗号分隔多个密码
之前 -pwd "123,456,root" 被当作单个密码,SSH root:123 无法匹配
现在逗号分隔为独立密码,空格保留(可能是密码的一部分)
2. -nobr 禁用爆破时仍检测 Redis 未授权访问
未授权访问是服务探测不是爆破,不应被 -nobr 跳过
将未授权检测移到 DisableBrute 判断之前
3. 指定端口时跳过 UDP 插件调度
-p 80 只扫 HTTP 时不需要 SNMP/BACnet/DNS 等 UDP 探测
仅在默认端口扫描时才分发 UDP 插件
效果: -p 80 从 9 秒降到 3 秒
|
2026-06-14 22:23:51 +08:00 |
|
ZacharyZcR
|
a52e93e84c
|
fix: 非终端输出时禁用进度条,防止ANSI控制码覆盖扫描结果
|
2026-06-14 22:23:50 +08:00 |
|
ZacharyZcR
|
04cae2e42d
|
fix: 彻底解决UDP插件阻塞导致扫描无法结束的问题
根因分析(通过 goroutine dump 定位):
1. UDP conn.Write 在 WSL2 上可能永久阻塞(SetDeadline 对 Write 不生效)
2. SNMP community 爆破混入通用密码字典(57个),串行 × 10s超时 = 10分钟
修复:
- 提取 udpProbe() 公共函数,用 context timeout + conn.Close 双保险
超时后强制关闭连接,中断阻塞的 Write/Read
- BACnet/DNS/IPMI/TFTP 统一使用 udpProbe()
- SNMP probe 使用 goroutine + context select 保护
- SNMP community 列表不再混入通用密码字典(8个专用 community 足够)
- SNMP 后续 community 爆破用 3s 短超时 + 连续失败 3 次快速退出
效果: 同样的扫描从无限卡死 → 9秒完成
|
2026-06-14 22:23:50 +08:00 |
|
ZacharyZcR
|
4169eb6ee0
|
fix: UDP插件改用 conn.SetDeadline 替代类型断言
|
2026-06-14 22:23:50 +08:00 |
|
ZacharyZcR
|
63631d6cdf
|
fix: 所有UDP插件添加ReadDeadline防止无限阻塞
SNMP/BACnet/DNS/IPMI/TFTP 的 conn.Read() 在目标不响应时
无限阻塞(goroutine 泄漏),导致整个扫描无法结束。
在 Write 前设置 ReadDeadline 确保超时后返回。
|
2026-06-14 22:23:50 +08:00 |
|
ZacharyZcR
|
4f6bb28138
|
fix: 修复6个运行时问题
1. 抑制 gmtls 库的 handshake error stdout 噪声
gmtls/conn.go:1304 硬编码了 fmt.Println,在调用时临时重定向 os.Stdout
2. MySQL 3306 服务名误识别为 genetec-5400
nmap 指纹库将 MySQL 握手包的随机 salt 误匹配,通过 banner 特征校正
3. 管道输出时自动禁用 ANSI 控制码
检测 stdout 是否为终端,非终端时自动启用 NoColor
4. 进度条完成消息措辞精确化
去掉冗余冒号,保持信息简洁一致
5. URL 模式跳过不必要的 TLS 探测
用户已通过 -u 显式指定 http:// 协议时直接使用,不再做 TLS 握手
6. 无网络探测数据时降低默认重试次数
-np 跳过存活探测后,将默认重试从 3 降到 2,加速不可达主机的超时
|
2026-06-14 22:23:49 +08:00 |
|
ZacharyZcR
|
46a6d812a4
|
fix: DetectPocFormat 误判含 transport 的 fscan POC 为 xray 格式
有 transport 字段但 rules 是数组的 POC(如 apache-httpd-cve-2021-40438)
属于 fscan 格式,不应被 xray 分支兜底。移除错误的 fallback return,
让这类 POC 正确落入 fscan 格式检测分支。
修复前: 388个POC成功380个,失败8个
修复后: 388个POC成功388个,失败0个
|
2026-06-14 22:23:49 +08:00 |
|
ZacharyZcR
|
d4f4e65dec
|
refactor: 4项架构优化 — CEL缓存/POC隔离/服务缓存/结果统一
1. CEL 表达式编译缓存
- 新增 CelProgCache,同一 POC 的所有规则/参数组合共享编译后的 Program
- clusterpoc 热路径上消除重复的 Compile+Program 调用
2. POC 全局状态消除
- allPocs/pocLoaded 全局变量改为 pocStore 按 PocPath 缓存
- 不同 PocPath 的扫描独立加载,Web API 并发场景不再互相覆盖
3. serviceCache 下沉到 per-session State
- 服务识别缓存从包级全局 map 迁移到 State.serviceCache (sync.Map)
- BaseScanStrategy 通过 SetState 注入 session state
- 消除多个并发扫描之间的服务识别缓存串台
4. POC 结果输出路径统一
- 提取 buildVulnDetails/buildVulnLogMsg/saveVulnResult 三个公共函数
- CheckMultiPoc 和 recordVulnerabilityResult 共用统一的结果构造逻辑
- 消除 details 字段名不一致和日志格式差异
|
2026-06-14 22:23:49 +08:00 |
|
ZacharyZcR
|
a115499793
|
fix+perf: 修复10个bug & 10项性能优化
Bug修复:
- clustersend CEL结果判断从字符串比较改为类型断言
- Nuclei DSL matcher安全降级为false避免误报
- clusterpoc发现漏洞后返回true修正语义
- reverseCheck加10s超时防止ceye API阻塞
- doSearch/bmatches正则编译结果缓存到sync.Map
- evalset CEL求值失败时存空字符串而非原始表达式
- CEL wait()函数加nil Reverse指针检查防panic
- MongoDB readMongoMsg应用timeout参数设置读超时
- TXTWriter.Close确保Sync失败后仍调用file.Close
性能优化:
- 指纹regex缓存从RWMutex+map改为sync.Map消除锁竞争
- CaseInsensitive指纹词加载时预小写化避免匹配时分配
- 版本提取FindAllStringSubmatch限制返回数量
- i18n.Tr用strconv.Itoa替代Sprintf减少分配
- POC加载用atomic.Bool+DCLP消除热路径锁
- 结果缓冲map预分配容量减少rehash
- HTTP连接池参数随并发数动态调整
- getRuleHash去除反射+Headers排序保证确定性dedup
- POC并发加载用channel替代Mutex收集结果
|
2026-06-14 22:23:49 +08:00 |
|
ZacharyZcR
|
8402be98e3
|
优化自适应扫描系统 & 修复 POC 调度问题
自适应扫描优化:
- target/ceiling 分离,自适应池可向上探索而非锁死在 target
- assessHealth 阈值按网络环境区分(LAN 收紧 / Internet 放宽)
- RTT 漂移时动态压低 target,配合 AIMD 双重降速
- 去掉 semaphore 双层流控,由 ants pool 统一反压
- 探测端口从 3 个扩充到 8 个,减少 RTT 采样偏差
- computeRetries 按环境调整目标概率和上限
Bug 修复:
- AdaptivePool.Wait() 加 10 分钟超时,防止 goroutine 卡死时永久挂起
- CEL 环境初始化失败后允许重试(sync.Once → sync.Mutex + 标志位)
- CAS 自旋加 runtime.Gosched() 退避,减少高并发下 CPU 空转
- -full 模式下 web 插件跳过 IsMarkedWebService 检查 #588
- 不确定服务补做 HTTP 回退探测,覆盖自定义框架漏网场景
- POC sets 纯字面量值跳过 CEL 编译,消除大量误报错误日志
|
2026-06-14 22:23:48 +08:00 |
|
ZacharyZcR
|
c49c23c7f0
|
Harden scan robustness and tests
|
2026-06-14 22:23:48 +08:00 |
|
ZacharyZcR
|
5ad914a1bb
|
feat: 统一服务缓存 + 指纹驱动插件匹配
将 webServiceCache 扩展为通用 serviceCache,所有指纹识别结果
统一缓存,插件匹配时端口不命中则回退到服务名称匹配。
删除多余的 service_cache.go,复用已有的 ServiceInfo 体系。
补充 nil 防御、Explicit 标记、大量单元/集成/回归测试。
|
2026-06-14 22:23:47 +08:00 |
|
ZacharyZcR
|
2ab7c4d9b2
|
fix: 非标准端口的服务无法匹配对应插件 #588
端口扫描识别到 8881 上运行 SSH,但 SSH 插件只注册了 [22,2222,2200,22222],
端口不匹配导致插件不执行。
新增服务名称缓存:端口扫描阶段记录 host:port → serviceName,
插件匹配时端口不命中则回退到服务名称匹配。
|
2026-06-14 22:23:46 +08:00 |
|
ZacharyZcR
|
5c251b123d
|
fix: 移除误导性的"无可用插件"日志 #588
扫描开始前的插件预检基于端口列表静态匹配,不代表实际扫描中插件
不会执行。移除"无可用插件"提示,避免用户误以为插件未工作。
|
2026-06-14 22:23:46 +08:00 |
|
ZacharyZcR
|
800cc30794
|
Fix credential cleanup and explicit tuning flags
|
2026-06-14 22:23:46 +08:00 |
|
ZacharyZcR
|
8e3cac303d
|
fix: webtitle HTTP 请求失败时重试,修复批量扫描 POC 缺失 #587
批量扫描(-hf)时并发压力导致 HTTP 请求瞬时失败,getWebTitle
直接返回 error,跳过指纹识别和 POC 触发。
加入指数退避重试(200ms→400ms),最多 3 次,复用 config.MaxRetries。
|
2026-06-14 22:23:45 +08:00 |
|
ZacharyZcR
|
4b79cb7a18
|
ci: 升级 CI Go 版本到 1.25
|
2026-06-14 22:23:45 +08:00 |
|
ZacharyZcR
|
9d38874a03
|
fix: 降级 modernc.org/sqlite 到 v1.39.0 适配 CI
|
2026-06-14 22:23:45 +08:00 |
|
ZacharyZcR
|
88c7e4f2be
|
feat: 自适应并发调度 — 网络探测 + AIMD + 参数智能推导
扫描前自动探测网络环境(RTT、丢包率、fd limit),基于探测数据
推导 6 个关键参数,替代硬编码默认值:
- Timeout: median_RTT + 4σ(覆盖 99.9% 正常连接)
- ModuleThreadNum: target_concurrency / 30
- MaxRetries: ceil(log(0.01)/log(loss_rate))(全失败概率 <1%)
- ICMPRate: 环境基准 × fd 系数
- PocNum: 跟随 ModuleThreadNum
- DisablePing: 已有 ICMP 权限降级机制
线程池从单信号(资源耗尽率)升级为 AIMD + 慢启动:
- 慢启动:target/4 起步,500ms 翻倍
- 稳态 AIMD:健康 +5%,拥塞 ×0.5
- 双信号:资源耗尽率 + RTT 趋势(双 EMA)
用户 -t 显式指定时作为 ceiling,探测仍调整其他参数。
测试:单元 + 边界 + 集成 + 真实网络,core 包 580+ 用例全通过。
|
2026-06-14 22:23:45 +08:00 |
|
ZacharyZcR
|
e0468ecd35
|
feat: Web 版独立入口 + SQLite 持久化存储
- 拆分 main.go 为 main_cli.go 和 main_web.go,Web 版不再包含 CLI 参数解析
- Web 版直接启动 HTTP 服务,通过 -port/-lang 控制,无需 -web flag
- 结果存储从内存 map 替换为 SQLite(modernc.org/sqlite,纯 Go 零 CGO)
- 数据库文件 ~/.fscan/results.db,进程重启后结果不丢失
- 修复结果分布面板跟随 tab 筛选联动的问题
|
2026-06-14 22:23:44 +08:00 |
|
ZacharyZcR
|
d0295dcb92
|
fix: 修复 SSH 扫描 goroutine 泄漏
ssh.NewClientConn 不接受 context,context 取消后底层 TCP 连接未关闭,
导致 readLoop goroutine 永久阻塞在 conn.Read 上。大规模扫描时泄漏数万
goroutine。
- doSSHAuth 新增 goroutine 监听 context 取消并关闭底层连接
- TestSingleCredential 移除 5 秒超时放弃逻辑,改为持续等待清理
|
2026-06-14 22:23:44 +08:00 |
|
ZacharyZcR
|
ade9cd1bff
|
修复默认扫描 POC 结果缺失 #586
|
2026-06-14 22:23:44 +08:00 |
|
ZacharyZcR
|
6d91b544de
|
显示 Web 服务识别 URL
|
2026-06-14 22:23:44 +08:00 |
|
ZacharyZcR
|
72042111c6
|
Merge pull request #580 from shadow1ng/dev
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
v2.2.0-rc Release
v2.2.0-rc
|
2026-06-01 08:54:24 +08:00 |
|
ZacharyZcR
|
08a87b3128
|
ci: 完善发版流程
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
- release workflow 自动读取 .github/release-notes/<tag>.md 覆盖 body
- 移除手动 prerelease input(goreleaser auto 模式根据 tag 后缀判断)
- 新增 RELEASE.md 发版流程文档
|
2026-06-01 08:42:17 +08:00 |
|
ZacharyZcR
|
cc1af631f0
|
fix: CI 测试排除路径 mylib → libs
|
2026-06-01 08:40:14 +08:00 |
|
ZacharyZcR
|
5078fbc975
|
fix: 更新 lint 排除路径 mylib → libs
|
2026-06-01 08:39:49 +08:00 |
|
ZacharyZcR
|
354ad2e24b
|
chore: 移除 fscan-lite (C 版本)
功能过于单一(仅 TCP 端口扫描),与 fscan 品牌定位不符。
fscan-nolocal 已是精简版的正确方案。
- 删除 fscan-lite 源码和构建脚本
- goreleaser 移除 lite 构建步骤
- CI 不再安装 mingw 交叉编译工具
|
2026-06-01 08:37:04 +08:00 |
|
ZacharyZcR
|
942f0fa6c3
|
fix: web API 版本号改为动态获取,不再硬编码
|
2026-06-01 08:34:42 +08:00 |
|
ZacharyZcR
|
37b77f9c86
|
docs: 添加 v2.2.0-rc Release Notes 草稿
用于发版时 gh release create --notes-file 引用。
|
2026-06-01 08:28:59 +08:00 |
|
ZacharyZcR
|
a02eed0518
|
refactor: mylib 重命名为 libs
更清晰的目录命名,libs/ 存放内嵌的独立协议实现库。
|
2026-06-01 08:22:13 +08:00 |
|
ZacharyZcR
|
019d13c9d4
|
chore: 版本号更新为 2.2.0-rc
- README/README_EN 版本标记更新
- globals.go version 常量更新
- 移除 Issue 模板中不可用的安全报告链接
|
2026-06-01 08:20:01 +08:00 |
|
ZacharyZcR
|
c43982f834
|
chore: 更新 Issue 模板
- 版本号更新至 2.2.0-rc / 2.1.3 / 2.1.2
- 移除 placeholder 预填充内容,避免用户不删不改直接提交
- 新增 SDK、代理、mips 等选项
- macOS/Ubuntu 版本更新
- 新增安全漏洞报告入口指引
- 模板顶部增加"未填写有效信息会被关闭"提示
|
2026-06-01 08:17:00 +08:00 |
|
ZacharyZcR
|
d6d323854a
|
refactor: 完成全局状态到 session 的完整迁移
将 plugins/services、plugins/local、plugins/web、webscan 层的日志输出、
漏洞结果保存和 TCP 计数器从全局 common.Log*/GetGlobalState() 迁移到
session 实例方法,确保 SDK 并发扫描时各实例完全隔离。
- 50 个文件,所有插件日志走 session.Log*
- DoRequest 加入 session 参数,计数器走 session.State
- POC 执行器通过 POCContext.Session 传递
- 仅保留 init() 和 CEL runtime 等无 session 场景的全局回退
|
2026-06-01 08:13:23 +08:00 |
|
ZacharyZcR
|
569d21a8bc
|
fix: harden address parsing edge cases
|
2026-06-01 04:03:46 +08:00 |
|
ZacharyZcR
|
8ec96bfe6d
|
fix: harden scan edge cases
|
2026-06-01 03:32:13 +08:00 |
|
ZacharyZcR
|
8b558b4f12
|
fix: align atomic counters on arm
|
2026-06-01 03:03:40 +08:00 |
|
ZacharyZcR
|
3e4e2db722
|
feat: stream large host scans
|
2026-06-01 02:55:28 +08:00 |
|
ZacharyZcR
|
ac755a9b4a
|
test: avoid expanding massive CIDRs
|
2026-06-01 02:33:10 +08:00 |
|
ZacharyZcR
|
ea17b5b1bc
|
feat: allow multiple added passwords
Fixes #584
|
2026-06-01 02:06:15 +08:00 |
|
ZacharyZcR
|
bfc0e0fb52
|
fix: support SOCKS5 proxy auth
Fixes #585
|
2026-06-01 01:59:08 +08:00 |
|
ZacharyZcR
|
40b0eee654
|
Remove SimpleMaxHosts limit to fix large CIDR scanning
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
Closes #583
|
2026-05-27 16:16:42 +08:00 |
|
ZacharyZcR
|
8d30ee334c
|
Add native protocol service plugins
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
|
2026-05-23 15:51:50 +08:00 |
|
ZacharyZcR
|
73cbe803c4
|
Expand i18n coverage
|
2026-05-23 15:18:40 +08:00 |
|
ZacharyZcR
|
9ed6cc95b6
|
replace string builder sprintf with fprintf
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
|
2026-05-23 07:53:28 +08:00 |
|
ZacharyZcR
|
a0f0379c6c
|
silence ci warnings and staticcheck suggestions
|
2026-05-23 07:50:49 +08:00 |
|
ZacharyZcR
|
3c7823355d
|
tighten scan session and HTTP paths
|
2026-05-23 07:46:53 +08:00 |
|
ZacharyZcR
|
1a714f6a0c
|
reduce scanner client fingerprints
|
2026-05-23 07:20:24 +08:00 |
|
ZacharyZcR
|
0046817c2e
|
fix mssql login client metadata
|
2026-05-23 07:17:55 +08:00 |
|