package plugins import ( "context" "github.com/shadow1ng/fscan/common" ) // ============================================================================= // 简化的插件基础架构 - 删除所有过度设计 // ============================================================================= // Plugin 插件接口 - 只保留必要的方法 type Plugin interface { GetName() string GetPorts() []int Scan(ctx context.Context, info *common.HostInfo) *ScanResult } // Exploiter 利用器接口 - 可选实现,用于有利用功能的插件 type Exploiter interface { Exploit(ctx context.Context, info *common.HostInfo, creds Credential) *ExploitResult } // ScanResult 扫描结果 - 删除所有冗余字段 type ScanResult struct { Success bool // 扫描是否成功 Service string // 服务类型 Username string // 发现的用户名(弱密码) Password string // 发现的密码(弱密码) Banner string // 服务版本信息 Error error // 错误信息(如果失败) } // ExploitResult 利用结果 - 仅有利用功能的插件需要 type ExploitResult struct { Success bool // 利用是否成功 Output string // 命令执行输出或操作结果 Error error // 错误信息 } // Credential 凭据结构 - 只保留必要字段 type Credential struct { Username string Password string KeyData []byte // SSH私钥等二进制数据 } // ============================================================================= // 简化的注册系统 - 删除工厂模式垃圾 // ============================================================================= // PluginCreator 插件创建函数类型 type PluginCreator func() Plugin // 全局插件注册表 var registry = make(map[string]PluginCreator) // RegisterPlugin 注册插件 - 直接注册函数,不要工厂 func RegisterPlugin(name string, creator PluginCreator) { registry[name] = creator } // GetPlugin 获取插件实例 func GetPlugin(name string) Plugin { if creator, exists := registry[name]; exists { return creator() } return nil } // GetAllPlugins 获取所有已注册插件名称 func GetAllPlugins() []string { names := make([]string, 0, len(registry)) for name := range registry { names = append(names, name) } return names } // ============================================================================= // 通用辅助函数 // ============================================================================= // GenerateCredentials 生成测试凭据列表 func GenerateCredentials(service string) []Credential { // 获取用户名字典 usernames := common.Userdict[service] if len(usernames) == 0 { // 默认用户名 usernames = []string{"root", "admin", service} } // 生成用户名密码组合 var credentials []Credential for _, username := range usernames { for _, password := range common.Passwords { credentials = append(credentials, Credential{ Username: username, Password: password, }) } } return credentials }