mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 14:06:44 +08:00
refactor: 优化插件注册机制,消除启动时不必要实例化
- 添加RegisterPluginWithPorts高效注册方式,直接传递端口信息 - 优化关键服务插件(MySQL/SSH/Redis)使用新注册方式 - 移除无意义的反向适配函数GetPlugin/GetLocalPlugin - 清理总是返回nil的无用接口,提升代码清晰度 性能优化: * 消除服务插件注册时的实例创建开销 * MySQL/SSH/Redis等关键插件不再在启动时被实例化 * 简化插件获取流程,直接使用plugins.Get() 代码清理: * 删除说谎的函数接口,遵循"不要说谎"原则 * 保持向后兼容:旧的RegisterPlugin仍可用但效率较低 * 所有插件控制逻辑和功能保持完整
This commit is contained in:
parent
d981f0100f
commit
3e0617f525
@ -26,19 +26,14 @@ func RegisterLocalPlugin(name string, creator func() Plugin) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetLocalPlugin(name string) Plugin {
|
// GetAllLocalPlugins 获取所有本地插件名称
|
||||||
p := plugins.Get(name)
|
|
||||||
if p == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
// 这里需要反向适配,但为了简化,返回nil
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetAllLocalPlugins() []string {
|
func GetAllLocalPlugins() []string {
|
||||||
return plugins.All()
|
return plugins.All()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 注意:GetLocalPlugin函数已移除,因为它总是返回nil没有任何意义
|
||||||
|
// 如需获取插件实例,请直接使用 plugins.Get(name)
|
||||||
|
|
||||||
// 适配器:将Local插件转换为统一插件接口
|
// 适配器:将Local插件转换为统一插件接口
|
||||||
type localPluginAdapter struct {
|
type localPluginAdapter struct {
|
||||||
localPlugin Plugin
|
localPlugin Plugin
|
||||||
|
@ -144,7 +144,8 @@ func (p *MySQLPlugin) readMySQLBanner(conn net.Conn) string {
|
|||||||
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
RegisterPlugin("mysql", func() Plugin {
|
// 使用高效注册方式:直接传递端口信息,避免实例创建
|
||||||
|
RegisterPluginWithPorts("mysql", func() Plugin {
|
||||||
return NewMySQLPlugin()
|
return NewMySQLPlugin()
|
||||||
})
|
}, []int{3306, 3307, 33060})
|
||||||
}
|
}
|
@ -416,7 +416,8 @@ func (p *RedisPlugin) identifyService(ctx context.Context, info *common.HostInfo
|
|||||||
|
|
||||||
// init 自动注册插件
|
// init 自动注册插件
|
||||||
func init() {
|
func init() {
|
||||||
RegisterPlugin("redis", func() Plugin {
|
// 使用高效注册方式:直接传递端口信息,避免实例创建
|
||||||
|
RegisterPluginWithPorts("redis", func() Plugin {
|
||||||
return NewRedisPlugin()
|
return NewRedisPlugin()
|
||||||
})
|
}, []int{6379, 6380, 6381, 16379, 26379})
|
||||||
}
|
}
|
@ -264,7 +264,8 @@ func (p *SSHPlugin) readSSHBanner(conn net.Conn) string {
|
|||||||
|
|
||||||
// init 自动注册插件
|
// init 自动注册插件
|
||||||
func init() {
|
func init() {
|
||||||
RegisterPlugin("ssh", func() Plugin {
|
// 使用高效注册方式:直接传递端口信息,避免实例创建
|
||||||
|
RegisterPluginWithPorts("ssh", func() Plugin {
|
||||||
return NewSSHPlugin()
|
return NewSSHPlugin()
|
||||||
})
|
}, []int{22, 2222, 2200, 22222})
|
||||||
}
|
}
|
@ -19,31 +19,30 @@ type ExploitResult = plugins.ExploitResult
|
|||||||
type Exploiter = plugins.Exploiter
|
type Exploiter = plugins.Exploiter
|
||||||
type Credential = plugins.Credential
|
type Credential = plugins.Credential
|
||||||
|
|
||||||
// 注册函数:适配旧插件到新系统
|
// RegisterPluginWithPorts 高效注册:直接传递端口信息,避免实例创建
|
||||||
func RegisterPlugin(name string, factory func() Plugin) {
|
func RegisterPluginWithPorts(name string, factory func() Plugin, ports []int) {
|
||||||
// 获取插件端口信息
|
|
||||||
plugin := factory()
|
|
||||||
ports := plugin.GetPorts()
|
|
||||||
|
|
||||||
plugins.RegisterWithPorts(name, func() plugins.Plugin {
|
plugins.RegisterWithPorts(name, func() plugins.Plugin {
|
||||||
return &servicePluginAdapter{factory()}
|
return &servicePluginAdapter{factory()}
|
||||||
}, ports)
|
}, ports)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取函数
|
// RegisterPlugin 向后兼容的注册函数(性能较低,但保持兼容性)
|
||||||
func GetPlugin(name string) Plugin {
|
func RegisterPlugin(name string, factory func() Plugin) {
|
||||||
p := plugins.Get(name)
|
// 获取插件端口信息 - 仍需实例化,但保持向后兼容
|
||||||
if p == nil {
|
plugin := factory()
|
||||||
return nil
|
ports := plugin.GetPorts()
|
||||||
}
|
|
||||||
// 为简化实现,这里不做反向适配
|
RegisterPluginWithPorts(name, factory, ports)
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetAllPlugins 获取所有插件名称
|
||||||
func GetAllPlugins() []string {
|
func GetAllPlugins() []string {
|
||||||
return plugins.All()
|
return plugins.All()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 注意:GetPlugin函数已移除,因为它总是返回nil没有任何意义
|
||||||
|
// 如需获取插件实例,请直接使用 plugins.Get(name)
|
||||||
|
|
||||||
var GenerateCredentials = plugins.GenerateCredentials
|
var GenerateCredentials = plugins.GenerateCredentials
|
||||||
|
|
||||||
// 适配器:将services插件转换为统一插件接口
|
// 适配器:将services插件转换为统一插件接口
|
||||||
|
Loading…
Reference in New Issue
Block a user