fix: 修复 -m 指定本地插件时误走服务扫描策略的问题

当通过 -m 参数指定本地插件(如 systeminfo)时,由于 LocalMode 未被设置,
会错误地进入服务扫描流程,导致不必要的端口扫描和插件重复执行。
现在 determineScanMode 会自动检测 -m 指定的插件类型,
全部为 local 类型时自动切换到本地扫描模式。
This commit is contained in:
ZacharyZcR
2026-05-15 22:40:52 +08:00
parent bc28df2ed1
commit a0fc7881f2
+22
View File
@@ -6,6 +6,7 @@ import (
"net/url"
"os"
"os/signal"
"strings"
"sync"
"syscall"
"time"
@@ -54,6 +55,10 @@ func determineScanMode(config *common.Config, state *common.State) ScanMode {
return ScanModeAlive
case config.LocalMode:
return ScanModeLocal
case isAllLocalPlugins(config.Mode):
config.LocalMode = true
config.LocalPlugin = config.Mode
return ScanModeLocal
case len(state.GetURLs()) > 0:
return ScanModeWeb
default:
@@ -61,6 +66,23 @@ func determineScanMode(config *common.Config, state *common.State) ScanMode {
}
}
// isAllLocalPlugins 检查 -m 指定的插件是否全部为 local 类型
func isAllLocalPlugins(mode string) bool {
if mode == "" || mode == "all" {
return false
}
for _, name := range strings.Split(mode, ",") {
name = strings.TrimSpace(name)
if name == "" {
continue
}
if !plugins.HasType(name, plugins.PluginTypeLocal) {
return false
}
}
return true
}
// selectStrategy 根据扫描模式选择策略
func selectStrategy(config *common.Config, state *common.State, info common.HostInfo) ScanStrategy {
mode := determineScanMode(config, state)