mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 14:06:44 +08:00
70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
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
|
|
}
|
|
|