Scan
🎯 `pkg/scan/scan.go` — 批量扫描编排。
pkg/scan 在 Runner 之上做批量编排:目标展开、并发调度、池复用、重试、结果聚合。
📁 源码:
pkg/scan/scan.go
核心类型
| 符号 | 源码 | 说明 |
|---|---|---|
Config | L18 | 扫描配置(线程/重试/池) |
Scanner | L28 | 单浏览器扫描器 |
NewScanner(opts) | L43 | 构造单实例扫描器 |
NewPooledScanner(opts, cfg) | L107 | 构造池化扫描器 |
ExpandTargets(input) | L196 | 展开目标(含 CIDR/文件) |
(*Scanner) Scan(targets) | L230 | 执行扫描 |
Config 字段
| 字段 | 说明 |
|---|---|
Threads | 并发数 |
MaxRetries | 单目标最大重试 |
UsePool | 是否用 DriverPool |
PoolSize | 池大小 |
ContinueOnError | 出错继续 |
OutputPath | 结果输出路径 |
Scan 流程
ExpandTargets
ExpandTargets 把多种输入归一为目标列表:
支持 CIDR 见 scan cidr,文件见 scan file。
单实例 vs 池化
选型:少量用 NewScanner,批量用 NewPooledScanner
NewScanner:每次新建 Runner,适合少量目标或简单场景——省去建池开销NewPooledScanner:复用 Chrome 池,适合批量——避免反复启动浏览器的巨大开销
10 个以内目标用
NewScanner即可;上百上千必上NewPooledScanner,否则每个目标都启停一次 Chrome 会慢到无法接受。
与 CLI/API 的关系
CLI scan * 与 API /screenshot、/batch 最终都构造 Scanner/PooledScanner 执行: