mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 14:06:44 +08:00

主要更改: - 统一包目录命名为小写(Core→core, Plugins→plugins, WebScan→webscan) - 更新所有import路径以符合Go语言命名规范 - 重构parsers模块,简化复杂的工厂模式(从2000+行优化至400行) - 移除i18n兼容层,统一使用模块化i18n包 - 简化Core/Manager.go架构(从591行优化至133行) - 清理冗余文件:备份文件、构建产物、测试配置、重复图片 - 移除TestDocker测试环境配置目录 - 解决变量命名冲突问题 性能优化: - 减少代码复杂度60-70% - 提升构建和运行性能 - 保持完整功能兼容性 代码质量: - 符合Go语言最佳实践 - 统一命名规范 - 优化项目结构
291 lines
7.7 KiB
Go
291 lines
7.7 KiB
Go
package core
|
|
|
|
import (
|
|
"github.com/shadow1ng/fscan/common"
|
|
"github.com/shadow1ng/fscan/common/parsers"
|
|
"github.com/shadow1ng/fscan/plugins"
|
|
"sort"
|
|
)
|
|
|
|
// init 初始化并注册所有扫描插件
|
|
// 包括标准端口服务扫描、特殊扫描类型和本地信息收集等
|
|
func init() {
|
|
// 1. 标准网络服务扫描插件
|
|
// 文件传输和远程访问服务
|
|
common.RegisterPlugin("ftp", common.ScanPlugin{
|
|
Name: "FTP",
|
|
Ports: []int{21},
|
|
ScanFunc: Plugins.FtpScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("ssh", common.ScanPlugin{
|
|
Name: "SSH",
|
|
Ports: []int{22, 2222},
|
|
ScanFunc: Plugins.SshScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("telnet", common.ScanPlugin{
|
|
Name: "Telnet",
|
|
Ports: []int{23},
|
|
ScanFunc: Plugins.TelnetScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
// Windows网络服务
|
|
common.RegisterPlugin("findnet", common.ScanPlugin{
|
|
Name: "FindNet",
|
|
Ports: []int{135},
|
|
ScanFunc: Plugins.Findnet,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("netbios", common.ScanPlugin{
|
|
Name: "NetBIOS",
|
|
Ports: []int{139},
|
|
ScanFunc: Plugins.NetBIOS,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("smb", common.ScanPlugin{
|
|
Name: "SMB",
|
|
Ports: []int{445},
|
|
ScanFunc: Plugins.SmbScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
// 数据库服务
|
|
common.RegisterPlugin("mssql", common.ScanPlugin{
|
|
Name: "MSSQL",
|
|
Ports: []int{1433, 1434},
|
|
ScanFunc: Plugins.MssqlScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("oracle", common.ScanPlugin{
|
|
Name: "Oracle",
|
|
Ports: []int{1521, 1522, 1526},
|
|
ScanFunc: Plugins.OracleScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("mysql", common.ScanPlugin{
|
|
Name: "MySQL",
|
|
Ports: []int{3306, 3307, 13306, 33306},
|
|
ScanFunc: Plugins.MysqlScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
// 中间件和消息队列服务
|
|
common.RegisterPlugin("elasticsearch", common.ScanPlugin{
|
|
Name: "Elasticsearch",
|
|
Ports: []int{9200, 9300},
|
|
ScanFunc: Plugins.ElasticScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("rabbitmq", common.ScanPlugin{
|
|
Name: "RabbitMQ",
|
|
Ports: []int{5672, 5671, 15672, 15671},
|
|
ScanFunc: Plugins.RabbitMQScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("kafka", common.ScanPlugin{
|
|
Name: "Kafka",
|
|
Ports: []int{9092, 9093},
|
|
ScanFunc: Plugins.KafkaScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("activemq", common.ScanPlugin{
|
|
Name: "ActiveMQ",
|
|
Ports: []int{61613},
|
|
ScanFunc: Plugins.ActiveMQScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
// 目录和认证服务
|
|
common.RegisterPlugin("ldap", common.ScanPlugin{
|
|
Name: "LDAP",
|
|
Ports: []int{389, 636},
|
|
ScanFunc: Plugins.LDAPScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
// 邮件服务
|
|
common.RegisterPlugin("smtp", common.ScanPlugin{
|
|
Name: "SMTP",
|
|
Ports: []int{25, 465, 587},
|
|
ScanFunc: Plugins.SmtpScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("imap", common.ScanPlugin{
|
|
Name: "IMAP",
|
|
Ports: []int{143, 993},
|
|
ScanFunc: Plugins.IMAPScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("pop3", common.ScanPlugin{
|
|
Name: "POP3",
|
|
Ports: []int{110, 995},
|
|
ScanFunc: Plugins.POP3Scan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
// 网络管理和监控服务
|
|
common.RegisterPlugin("snmp", common.ScanPlugin{
|
|
Name: "SNMP",
|
|
Ports: []int{161, 162},
|
|
ScanFunc: Plugins.SNMPScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("modbus", common.ScanPlugin{
|
|
Name: "Modbus",
|
|
Ports: []int{502, 5020},
|
|
ScanFunc: Plugins.ModbusScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
// 数据同步和备份服务
|
|
common.RegisterPlugin("rsync", common.ScanPlugin{
|
|
Name: "Rsync",
|
|
Ports: []int{873},
|
|
ScanFunc: Plugins.RsyncScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
// NoSQL数据库
|
|
common.RegisterPlugin("cassandra", common.ScanPlugin{
|
|
Name: "Cassandra",
|
|
Ports: []int{9042},
|
|
ScanFunc: Plugins.CassandraScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("neo4j", common.ScanPlugin{
|
|
Name: "Neo4j",
|
|
Ports: []int{7687},
|
|
ScanFunc: Plugins.Neo4jScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
// 远程桌面和显示服务
|
|
common.RegisterPlugin("rdp", common.ScanPlugin{
|
|
Name: "RDP",
|
|
Ports: []int{3389, 13389, 33389},
|
|
ScanFunc: Plugins.RdpScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("postgres", common.ScanPlugin{
|
|
Name: "PostgreSQL",
|
|
Ports: []int{5432, 5433},
|
|
ScanFunc: Plugins.PostgresScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("vnc", common.ScanPlugin{
|
|
Name: "VNC",
|
|
Ports: []int{5900, 5901, 5902},
|
|
ScanFunc: Plugins.VncScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
// 缓存和键值存储服务
|
|
common.RegisterPlugin("redis", common.ScanPlugin{
|
|
Name: "Redis",
|
|
Ports: []int{6379, 6380, 16379},
|
|
ScanFunc: Plugins.RedisScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("memcached", common.ScanPlugin{
|
|
Name: "Memcached",
|
|
Ports: []int{11211},
|
|
ScanFunc: Plugins.MemcachedScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("mongodb", common.ScanPlugin{
|
|
Name: "MongoDB",
|
|
Ports: []int{27017, 27018},
|
|
ScanFunc: Plugins.MongodbScan,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
// 2. 特殊漏洞扫描插件
|
|
common.RegisterPlugin("ms17010", common.ScanPlugin{
|
|
Name: "MS17010",
|
|
Ports: []int{445},
|
|
ScanFunc: Plugins.MS17010,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
common.RegisterPlugin("smbghost", common.ScanPlugin{
|
|
Name: "SMBGhost",
|
|
Ports: []int{445},
|
|
ScanFunc: Plugins.SmbGhost,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
// 3. Web应用扫描插件
|
|
common.RegisterPlugin("webtitle", common.ScanPlugin{
|
|
Name: "WebTitle",
|
|
Ports: parsers.ParsePortsFromString(common.WebPorts),
|
|
ScanFunc: Plugins.WebTitle,
|
|
Types: []string{common.PluginTypeWeb},
|
|
})
|
|
|
|
common.RegisterPlugin("webpoc", common.ScanPlugin{
|
|
Name: "WebPoc",
|
|
Ports: parsers.ParsePortsFromString(common.WebPorts),
|
|
ScanFunc: Plugins.WebPoc,
|
|
Types: []string{common.PluginTypeWeb},
|
|
})
|
|
|
|
// 4. Windows系统专用插件
|
|
common.RegisterPlugin("smb2", common.ScanPlugin{
|
|
Name: "SMBScan2",
|
|
Ports: []int{445},
|
|
ScanFunc: Plugins.SmbScan2,
|
|
Types: []string{common.PluginTypeService},
|
|
})
|
|
|
|
// 5. 本地信息收集插件
|
|
common.RegisterPlugin("localinfo", common.ScanPlugin{
|
|
Name: "LocalInfo",
|
|
Ports: []int{},
|
|
ScanFunc: Plugins.LocalInfoScan,
|
|
Types: []string{common.PluginTypeLocal},
|
|
})
|
|
|
|
common.RegisterPlugin("dcinfo", common.ScanPlugin{
|
|
Name: "DCInfo",
|
|
Ports: []int{},
|
|
ScanFunc: Plugins.DCInfoScan,
|
|
Types: []string{common.PluginTypeLocal},
|
|
})
|
|
|
|
common.RegisterPlugin("minidump", common.ScanPlugin{
|
|
Name: "MiniDump",
|
|
Ports: []int{},
|
|
ScanFunc: Plugins.MiniDump,
|
|
Types: []string{common.PluginTypeLocal},
|
|
})
|
|
}
|
|
|
|
// GetAllPlugins 返回所有已注册插件的名称列表
|
|
func GetAllPlugins() []string {
|
|
pluginNames := make([]string, 0, len(common.PluginManager))
|
|
for name := range common.PluginManager {
|
|
pluginNames = append(pluginNames, name)
|
|
}
|
|
sort.Strings(pluginNames)
|
|
return pluginNames
|
|
}
|