diff --git a/Common/i18n/messages.go b/Common/i18n/messages.go index 8d94769..2d216ca 100644 --- a/Common/i18n/messages.go +++ b/Common/i18n/messages.go @@ -616,10 +616,22 @@ var coreMessages = map[string]map[string]string{ LangZH: "开始主机扫描", LangEN: "Starting host scan", }, + "scan_vulnerability_start": { + LangZH: "开始漏洞扫描", + LangEN: "Starting vulnerability scan", + }, "scan_no_service_plugins": { LangZH: "未找到可用的服务插件", LangEN: "No available service plugins found", }, + "scan_vulnerability_plugins": { + LangZH: "使用漏洞扫描插件: %s", + LangEN: "Using vulnerability scan plugins: %s", + }, + "scan_no_vulnerability_plugins": { + LangZH: "未找到可用的漏洞扫描插件", + LangEN: "No available vulnerability scan plugins found", + }, "scan_complete_ports_found": { LangZH: "扫描完成, 发现 %d 个开放端口", LangEN: "Scan completed, found %d open ports", diff --git a/Core/ServiceScanner.go b/Core/ServiceScanner.go index 77f1b93..c8216fe 100644 --- a/Core/ServiceScanner.go +++ b/Core/ServiceScanner.go @@ -5,6 +5,7 @@ import ( "github.com/shadow1ng/fscan/common" "github.com/shadow1ng/fscan/common/i18n" "github.com/shadow1ng/fscan/common/parsers" + "strconv" "strings" "sync" ) @@ -78,7 +79,9 @@ func (s *ServiceScanStrategy) performHostScan(hosts []string, info common.HostIn // 执行漏洞扫描 if len(targetInfos) > 0 { - common.LogBase("开始漏洞扫描") + common.LogBase(i18n.GetText("scan_vulnerability_start")) + // 显示即将使用的漏洞扫描插件 + s.LogVulnerabilityPluginInfo(targetInfos) ExecuteScanTasks(targetInfos, s, ch, wg) } } @@ -198,6 +201,44 @@ func (s *ServiceScanStrategy) LogPluginInfo() { } } +// LogVulnerabilityPluginInfo 输出漏洞扫描插件信息 +func (s *ServiceScanStrategy) LogVulnerabilityPluginInfo(targets []common.HostInfo) { + allPlugins, isCustomMode := s.GetPlugins() + + // 获取实际会被使用的插件列表 + var vulnerabilityPlugins []string + pluginUsed := make(map[string]bool) + + for _, target := range targets { + targetPort := 0 + if target.Ports != "" { + targetPort, _ = strconv.Atoi(target.Ports) + } + + for _, pluginName := range allPlugins { + plugin, exists := common.PluginManager[pluginName] + if !exists { + continue + } + + // 检查插件是否适用于当前目标(使用与ExecuteScanTasks相同的逻辑) + if s.IsPluginApplicable(plugin, targetPort, isCustomMode) { + if !pluginUsed[pluginName] { + vulnerabilityPlugins = append(vulnerabilityPlugins, pluginName) + pluginUsed[pluginName] = true + } + } + } + } + + // 输出插件信息 + if len(vulnerabilityPlugins) > 0 { + common.LogBase(fmt.Sprintf(i18n.GetText("scan_vulnerability_plugins"), strings.Join(vulnerabilityPlugins, ", "))) + } else { + common.LogBase(i18n.GetText("scan_no_vulnerability_plugins")) + } +} + // IsPluginApplicable 判断插件是否适用于服务扫描 func (s *ServiceScanStrategy) IsPluginApplicable(plugin common.ScanPlugin, targetPort int, isCustomMode bool) bool { // 自定义模式下运行所有明确指定的插件