package core import ( "github.com/shadow1ng/fscan/common" "github.com/shadow1ng/fscan/common/i18n" "strings" "sync" ) // WebScanStrategy Web扫描策略 type WebScanStrategy struct { *BaseScanStrategy } // NewWebScanStrategy 创建新的Web扫描策略 func NewWebScanStrategy() *WebScanStrategy { return &WebScanStrategy{ BaseScanStrategy: NewBaseScanStrategy("Web扫描", FilterWeb), } } // Name 返回策略名称 func (s *WebScanStrategy) Name() string { return i18n.GetText("scan_strategy_web_name") } // Description 返回策略描述 func (s *WebScanStrategy) Description() string { return i18n.GetText("scan_strategy_web_desc") } // Execute 执行Web扫描策略 func (s *WebScanStrategy) Execute(info common.HostInfo, ch *chan struct{}, wg *sync.WaitGroup) { // 输出扫描开始信息 s.LogScanStart() // 验证插件配置 if err := s.ValidateConfiguration(); err != nil { common.LogError(err.Error()) return } // 准备URL目标 targets := s.PrepareTargets(info) // 输出插件信息 s.LogPluginInfo() // 执行扫描任务 ExecuteScanTasks(targets, s, ch, wg) } // PrepareTargets 准备URL目标列表 func (s *WebScanStrategy) PrepareTargets(baseInfo common.HostInfo) []common.HostInfo { var targetInfos []common.HostInfo for _, url := range common.URLs { urlInfo := baseInfo // 确保URL包含协议头 if !strings.HasPrefix(url, "http://") && !strings.HasPrefix(url, "https://") { url = "http://" + url } urlInfo.Url = url targetInfos = append(targetInfos, urlInfo) } return targetInfos }