mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 05:56:46 +08:00

- 重构插件注册架构采用现代工厂模式和自动发现机制 - 新增完整的插件元数据管理系统支持版本能力标签等信息 - 实现智能插件适配器提供向后兼容的桥接功能 - 建立MySQL Redis SSH三个标准插件作为新架构参考实现 - 优化插件扫描逻辑支持按端口按类型的智能查询和过滤 - 添加国际化支持和完善的文档体系 - 代码量减少67%维护成本大幅降低扩展性显著提升 新架构特点: - 零配置插件注册import即用 - 工厂模式延迟初始化和依赖注入 - 丰富元数据系统和能力声明 - 完全解耦的模块化设计 - 面向未来的可扩展架构 测试验证: MySQL和Redis插件功能完整包括弱密码检测未授权访问检测和自动利用攻击
59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package core
|
||
|
||
import (
|
||
"fmt"
|
||
"github.com/shadow1ng/fscan/common"
|
||
"strings"
|
||
)
|
||
|
||
// 插件列表解析和验证
|
||
func parsePluginList(pluginStr string) []string {
|
||
if pluginStr == "" {
|
||
return nil
|
||
}
|
||
|
||
// 按逗号分割并去除每个插件名称两端的空白
|
||
plugins := strings.Split(pluginStr, ",")
|
||
for i, p := range plugins {
|
||
plugins[i] = strings.TrimSpace(p)
|
||
}
|
||
|
||
// 过滤空字符串
|
||
var result []string
|
||
for _, p := range plugins {
|
||
if p != "" {
|
||
result = append(result, p)
|
||
}
|
||
}
|
||
|
||
return result
|
||
}
|
||
|
||
// 验证扫描插件的有效性
|
||
func validateScanPlugins() error {
|
||
// 如果未指定扫描模式或使用All模式,则无需验证
|
||
if common.ScanMode == "" || common.ScanMode == "all" {
|
||
return nil
|
||
}
|
||
|
||
// 解析插件列表
|
||
plugins := parsePluginList(common.ScanMode)
|
||
if len(plugins) == 0 {
|
||
plugins = []string{common.ScanMode}
|
||
}
|
||
|
||
// 验证每个插件是否有效(使用新插件系统)
|
||
var invalidPlugins []string
|
||
for _, plugin := range plugins {
|
||
if !GlobalPluginAdapter.PluginExists(plugin) {
|
||
invalidPlugins = append(invalidPlugins, plugin)
|
||
}
|
||
}
|
||
|
||
if len(invalidPlugins) > 0 {
|
||
return fmt.Errorf("无效的插件: %s", strings.Join(invalidPlugins, ", "))
|
||
}
|
||
|
||
return nil
|
||
}
|