From e082e2bb591956425d0cb693cee36cb3917fac50 Mon Sep 17 00:00:00 2001 From: ZacharyZcR Date: Tue, 26 Aug 2025 00:02:13 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E7=BB=84=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E7=9B=AE=E5=BD=95=E7=BB=93=E6=9E=84=EF=BC=8C=E6=8F=90?= =?UTF-8?q?=E5=8D=87=E7=AE=A1=E7=90=86=E7=9B=B4=E8=A7=82=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将所有服务插件移动到plugins/services/目录下,使目录结构更加清晰直观: • 创建plugins/services/目录统一管理服务扫描插件 • 添加init.go提供类型别名和函数导出 • 更新main.go导入路径 • 所有20个服务插件功能验证正常 新的目录结构更便于插件管理和维护。 --- main.go | 4 +- plugins/services/README.md | 46 +++++++++++++++++++ plugins/{ => services}/activemq.go | 2 +- plugins/{ => services}/cassandra.go | 2 +- plugins/{ => services}/ftp.go | 2 +- plugins/services/init.go | 23 ++++++++++ plugins/{ => services}/kafka.go | 2 +- plugins/{ => services}/ldap.go | 2 +- plugins/{ => services}/memcached.go | 2 +- plugins/{ => services}/mongodb.go | 2 +- plugins/{ => services}/mssql.go | 2 +- plugins/{ => services}/mysql.go | 2 +- plugins/{ => services}/neo4j.go | 2 +- plugins/{ => services}/oracle.go | 2 +- plugins/{ => services}/postgresql.go | 2 +- plugins/{ => services}/rabbitmq.go | 2 +- plugins/{ => services}/redis.go | 2 +- plugins/{ => services}/rsync.go | 2 +- plugins/{ => services}/smtp.go | 2 +- plugins/{ => services}/snmp.go | 2 +- plugins/{ => services}/ssh.go | 2 +- plugins/{ => services}/telnet.go | 2 +- plugins/{ => services}/vnc.go | 2 +- plugins/test_mysql.go | 68 ---------------------------- 24 files changed, 91 insertions(+), 90 deletions(-) create mode 100644 plugins/services/README.md rename plugins/{ => services}/activemq.go (99%) rename plugins/{ => services}/cassandra.go (99%) rename plugins/{ => services}/ftp.go (99%) create mode 100644 plugins/services/init.go rename plugins/{ => services}/kafka.go (99%) rename plugins/{ => services}/ldap.go (99%) rename plugins/{ => services}/memcached.go (99%) rename plugins/{ => services}/mongodb.go (99%) rename plugins/{ => services}/mssql.go (99%) rename plugins/{ => services}/mysql.go (99%) rename plugins/{ => services}/neo4j.go (99%) rename plugins/{ => services}/oracle.go (99%) rename plugins/{ => services}/postgresql.go (99%) rename plugins/{ => services}/rabbitmq.go (99%) rename plugins/{ => services}/redis.go (99%) rename plugins/{ => services}/rsync.go (99%) rename plugins/{ => services}/smtp.go (99%) rename plugins/{ => services}/snmp.go (99%) rename plugins/{ => services}/ssh.go (99%) rename plugins/{ => services}/telnet.go (99%) rename plugins/{ => services}/vnc.go (99%) delete mode 100644 plugins/test_mysql.go diff --git a/main.go b/main.go index e9bacdf..cea5603 100644 --- a/main.go +++ b/main.go @@ -8,8 +8,8 @@ import ( "github.com/shadow1ng/fscan/app" "github.com/shadow1ng/fscan/common" - // 导入新的单文件插件架构 - _ "github.com/shadow1ng/fscan/plugins" + // 导入服务插件 + _ "github.com/shadow1ng/fscan/plugins/services" ) func main() { diff --git a/plugins/services/README.md b/plugins/services/README.md new file mode 100644 index 0000000..a79df5e --- /dev/null +++ b/plugins/services/README.md @@ -0,0 +1,46 @@ +# 服务扫描插件目录 + +本目录包含所有服务扫描插件,采用简化的单文件插件架构。 + +## 已实现插件 + +### 数据库服务 +- `mysql.go` - MySQL数据库扫描 +- `postgresql.go` - PostgreSQL数据库扫描 +- `redis.go` - Redis内存数据库扫描 +- `mongodb.go` - MongoDB文档数据库扫描 +- `mssql.go` - Microsoft SQL Server扫描 +- `oracle.go` - Oracle数据库扫描 +- `memcached.go` - Memcached缓存扫描 +- `neo4j.go` - Neo4j图数据库扫描 + +### 消息队列服务 +- `rabbitmq.go` - RabbitMQ消息队列扫描 +- `activemq.go` - ActiveMQ消息队列扫描 +- `kafka.go` - Apache Kafka扫描 + +### 网络服务 +- `ssh.go` - SSH远程登录服务扫描 +- `ftp.go` - FTP文件传输服务扫描 +- `telnet.go` - Telnet远程终端服务扫描 +- `smtp.go` - SMTP邮件服务扫描 +- `snmp.go` - SNMP网络管理协议扫描 +- `ldap.go` - LDAP目录服务扫描 +- `rsync.go` - Rsync文件同步服务扫描 + +### 其他服务 +- `vnc.go` - VNC远程桌面服务扫描 +- `cassandra.go` - Apache Cassandra数据库扫描 + +## 插件特性 + +每个插件都包含: +- ✅ 服务识别功能 +- ✅ 弱密码检测功能 +- ✅ 完整的利用功能 +- ✅ 错误处理和超时控制 +- ✅ 统一的结果输出格式 + +## 开发规范 + +所有插件都遵循 `../README.md` 中定义的开发规范。 \ No newline at end of file diff --git a/plugins/activemq.go b/plugins/services/activemq.go similarity index 99% rename from plugins/activemq.go rename to plugins/services/activemq.go index 10a4674..6e9859d 100644 --- a/plugins/activemq.go +++ b/plugins/services/activemq.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/cassandra.go b/plugins/services/cassandra.go similarity index 99% rename from plugins/cassandra.go rename to plugins/services/cassandra.go index a443406..12278a5 100644 --- a/plugins/cassandra.go +++ b/plugins/services/cassandra.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/ftp.go b/plugins/services/ftp.go similarity index 99% rename from plugins/ftp.go rename to plugins/services/ftp.go index 41135fa..1bfd972 100644 --- a/plugins/ftp.go +++ b/plugins/services/ftp.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/services/init.go b/plugins/services/init.go new file mode 100644 index 0000000..0e36443 --- /dev/null +++ b/plugins/services/init.go @@ -0,0 +1,23 @@ +package services + +// 从父目录导入插件基础类型 +import ( + "github.com/shadow1ng/fscan/plugins" +) + +// 类型别名,让services包中的插件可以直接使用这些类型 +type ( + Plugin = plugins.Plugin + Exploiter = plugins.Exploiter + ScanResult = plugins.ScanResult + ExploitResult = plugins.ExploitResult + Credential = plugins.Credential +) + +// 导出函数,让services包中的插件可以调用 +var ( + RegisterPlugin = plugins.RegisterPlugin + GetPlugin = plugins.GetPlugin + GetAllPlugins = plugins.GetAllPlugins + GenerateCredentials = plugins.GenerateCredentials +) \ No newline at end of file diff --git a/plugins/kafka.go b/plugins/services/kafka.go similarity index 99% rename from plugins/kafka.go rename to plugins/services/kafka.go index c203a9d..58595e3 100644 --- a/plugins/kafka.go +++ b/plugins/services/kafka.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/ldap.go b/plugins/services/ldap.go similarity index 99% rename from plugins/ldap.go rename to plugins/services/ldap.go index 4413511..2926597 100644 --- a/plugins/ldap.go +++ b/plugins/services/ldap.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/memcached.go b/plugins/services/memcached.go similarity index 99% rename from plugins/memcached.go rename to plugins/services/memcached.go index b33d783..c1885fa 100644 --- a/plugins/memcached.go +++ b/plugins/services/memcached.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/mongodb.go b/plugins/services/mongodb.go similarity index 99% rename from plugins/mongodb.go rename to plugins/services/mongodb.go index f87ba10..bdc5535 100644 --- a/plugins/mongodb.go +++ b/plugins/services/mongodb.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/mssql.go b/plugins/services/mssql.go similarity index 99% rename from plugins/mssql.go rename to plugins/services/mssql.go index ad3bbcf..f13dd94 100644 --- a/plugins/mssql.go +++ b/plugins/services/mssql.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/mysql.go b/plugins/services/mysql.go similarity index 99% rename from plugins/mysql.go rename to plugins/services/mysql.go index 0b5605c..7b85825 100644 --- a/plugins/mysql.go +++ b/plugins/services/mysql.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/neo4j.go b/plugins/services/neo4j.go similarity index 99% rename from plugins/neo4j.go rename to plugins/services/neo4j.go index 79d0849..1ddc863 100644 --- a/plugins/neo4j.go +++ b/plugins/services/neo4j.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/oracle.go b/plugins/services/oracle.go similarity index 99% rename from plugins/oracle.go rename to plugins/services/oracle.go index 9242111..4a8bdfd 100644 --- a/plugins/oracle.go +++ b/plugins/services/oracle.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/postgresql.go b/plugins/services/postgresql.go similarity index 99% rename from plugins/postgresql.go rename to plugins/services/postgresql.go index 2fa53d8..8429f3b 100644 --- a/plugins/postgresql.go +++ b/plugins/services/postgresql.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/rabbitmq.go b/plugins/services/rabbitmq.go similarity index 99% rename from plugins/rabbitmq.go rename to plugins/services/rabbitmq.go index 0ce74d5..0d18fd0 100644 --- a/plugins/rabbitmq.go +++ b/plugins/services/rabbitmq.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/redis.go b/plugins/services/redis.go similarity index 99% rename from plugins/redis.go rename to plugins/services/redis.go index 515f895..4c20234 100644 --- a/plugins/redis.go +++ b/plugins/services/redis.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/rsync.go b/plugins/services/rsync.go similarity index 99% rename from plugins/rsync.go rename to plugins/services/rsync.go index 1491f36..baae596 100644 --- a/plugins/rsync.go +++ b/plugins/services/rsync.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "bufio" diff --git a/plugins/smtp.go b/plugins/services/smtp.go similarity index 99% rename from plugins/smtp.go rename to plugins/services/smtp.go index db3692d..a512192 100644 --- a/plugins/smtp.go +++ b/plugins/services/smtp.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/snmp.go b/plugins/services/snmp.go similarity index 99% rename from plugins/snmp.go rename to plugins/services/snmp.go index 9b71e48..a69badc 100644 --- a/plugins/snmp.go +++ b/plugins/services/snmp.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/ssh.go b/plugins/services/ssh.go similarity index 99% rename from plugins/ssh.go rename to plugins/services/ssh.go index 4caeef8..cf35e31 100644 --- a/plugins/ssh.go +++ b/plugins/services/ssh.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/telnet.go b/plugins/services/telnet.go similarity index 99% rename from plugins/telnet.go rename to plugins/services/telnet.go index 742cc0c..81e1865 100644 --- a/plugins/telnet.go +++ b/plugins/services/telnet.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/vnc.go b/plugins/services/vnc.go similarity index 99% rename from plugins/vnc.go rename to plugins/services/vnc.go index 7179f62..fd8559d 100644 --- a/plugins/vnc.go +++ b/plugins/services/vnc.go @@ -1,4 +1,4 @@ -package plugins +package services import ( "context" diff --git a/plugins/test_mysql.go b/plugins/test_mysql.go deleted file mode 100644 index fce68c4..0000000 --- a/plugins/test_mysql.go +++ /dev/null @@ -1,68 +0,0 @@ -package plugins - -import ( - "context" - "fmt" - "time" - - "github.com/shadow1ng/fscan/common" -) - -// TestMySQLPlugin 测试新的MySQL插件实现 -func TestMySQLPlugin() { - fmt.Println("=== 测试简化的MySQL插件 ===") - - // 初始化必要的全局变量 - common.Timeout = 5 - common.DisableBrute = false - common.Passwords = []string{"", "root", "123456", "admin", "password"} - common.Userdict = map[string][]string{ - "mysql": {"root", "mysql", "admin"}, - } - - // 创建插件实例 - plugin := NewMySQLPlugin() - - fmt.Printf("插件名称: %s\n", plugin.GetName()) - fmt.Printf("支持端口: %v\n", plugin.GetPorts()) - - // 测试用例1:本地不存在的MySQL服务(应该失败) - fmt.Println("\n--- 测试1: 连接不存在的MySQL服务 ---") - testHost := &common.HostInfo{ - Host: "127.0.0.1", - Ports: "3306", - } - - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - result := plugin.Scan(ctx, testHost) - fmt.Printf("扫描结果: Success=%v, Service=%s\n", result.Success, result.Service) - if result.Error != nil { - fmt.Printf("错误信息: %v\n", result.Error) - } - if result.Success { - fmt.Printf("发现弱密码: %s/%s\n", result.Username, result.Password) - } - - // 测试用例2:禁用暴力破解模式 - fmt.Println("\n--- 测试2: 禁用暴力破解模式 ---") - common.DisableBrute = true - - result2 := plugin.Scan(ctx, testHost) - fmt.Printf("服务识别结果: Success=%v, Service=%s\n", result2.Success, result2.Service) - if result2.Banner != "" { - fmt.Printf("服务Banner: %s\n", result2.Banner) - } - if result2.Error != nil { - fmt.Printf("错误信息: %v\n", result2.Error) - } - - fmt.Println("\n=== MySQL插件测试完成 ===") -} - -// 如果直接运行这个文件,执行测试 -func init() { - // 注释掉自动测试,避免在导入时执行 - // TestMySQLPlugin() -} \ No newline at end of file