mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-22 03:10:42 +08:00
fix: 修复 -m 指定本地插件时误走服务扫描策略的问题
当通过 -m 参数指定本地插件(如 systeminfo)时,由于 LocalMode 未被设置, 会错误地进入服务扫描流程,导致不必要的端口扫描和插件重复执行。 现在 determineScanMode 会自动检测 -m 指定的插件类型, 全部为 local 类型时自动切换到本地扫描模式。
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
@@ -54,6 +55,10 @@ func determineScanMode(config *common.Config, state *common.State) ScanMode {
|
|||||||
return ScanModeAlive
|
return ScanModeAlive
|
||||||
case config.LocalMode:
|
case config.LocalMode:
|
||||||
return ScanModeLocal
|
return ScanModeLocal
|
||||||
|
case isAllLocalPlugins(config.Mode):
|
||||||
|
config.LocalMode = true
|
||||||
|
config.LocalPlugin = config.Mode
|
||||||
|
return ScanModeLocal
|
||||||
case len(state.GetURLs()) > 0:
|
case len(state.GetURLs()) > 0:
|
||||||
return ScanModeWeb
|
return ScanModeWeb
|
||||||
default:
|
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 根据扫描模式选择策略
|
// selectStrategy 根据扫描模式选择策略
|
||||||
func selectStrategy(config *common.Config, state *common.State, info common.HostInfo) ScanStrategy {
|
func selectStrategy(config *common.Config, state *common.State, info common.HostInfo) ScanStrategy {
|
||||||
mode := determineScanMode(config, state)
|
mode := determineScanMode(config, state)
|
||||||
|
|||||||
Reference in New Issue
Block a user