refactor: 引入 ScanSession,替代全局状态穿透扫描管道 (Phase 1-3)

- 新增 common/session.go: ScanSession 结构体封装 Config/State/Params/Dialer
- RunScan/Strategy/ExecuteScanTasks/executeScanTask 全部接收 session
- Plugin 接口从 Scan(ctx, info, config, state) 改为 Scan(ctx, info, session)
- 48 个插件实现统一更新签名
- Web API 构建 ScanSession 传给 RunScan
- CLI 模式通过 Initialize() 创建 session
This commit is contained in:
ZacharyZcR
2026-04-27 23:00:06 +08:00
parent 3d7cdcbe5f
commit a865e5d45e
62 changed files with 283 additions and 89 deletions
+1 -1
View File
@@ -10,7 +10,7 @@ import (
// WebPlugin Web插件接口 - 使用智能HTTP检测,不需要预定义端口
type WebPlugin interface {
Name() string
Scan(ctx context.Context, info *common.HostInfo, config *common.Config, state *common.State) *WebScanResult
Scan(ctx context.Context, info *common.HostInfo, session *common.ScanSession) *WebScanResult
}
// WebScanResult Web扫描结果类型别名
+2 -1
View File
@@ -87,7 +87,8 @@ func NewWebPocPlugin() *WebPocPlugin {
// Scan 执行Web POC扫描
// 注意:非全量模式下,POC扫描由webtitle插件在指纹识别后触发,此插件不执行
// 全量模式(-full)下,此插件独立执行全量POC扫描
func (p *WebPocPlugin) Scan(ctx context.Context, info *common.HostInfo, config *common.Config, state *common.State) *WebScanResult {
func (p *WebPocPlugin) Scan(ctx context.Context, info *common.HostInfo, session *common.ScanSession) *WebScanResult {
config := session.Config
if config.POC.Disabled {
return &WebScanResult{
Success: false,
+2 -1
View File
@@ -39,7 +39,8 @@ func NewWebTitlePlugin() *WebTitlePlugin {
}
// Scan 执行WebTitle扫描
func (p *WebTitlePlugin) Scan(ctx context.Context, info *common.HostInfo, config *common.Config, state *common.State) *WebScanResult {
func (p *WebTitlePlugin) Scan(ctx context.Context, info *common.HostInfo, session *common.ScanSession) *WebScanResult {
config := session.Config
title, status, length, server, fingerprints, url, err := p.getWebTitle(ctx, info, config)
if err != nil {
return &WebScanResult{