mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-07-13 12:52:44 +08:00
89 lines
1.8 KiB
Markdown
89 lines
1.8 KiB
Markdown
# FScan 插件开发指南
|
||
|
||
## 1. 创建插件
|
||
在 `Plugins` 目录下创建你的插件文件,例如 `myPlugin.go`:
|
||
|
||
```go
|
||
package Plugins
|
||
|
||
import (
|
||
"github.com/shadow1ng/fscan/Common"
|
||
)
|
||
|
||
func MyPluginScan(info *Common.HostInfo) error {
|
||
// 1. 基础检查
|
||
if info == nil {
|
||
return errors.New("Invalid host info")
|
||
}
|
||
|
||
// 2. 实现扫描逻辑
|
||
result, err := doScan(info)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
// 3. 处理结果
|
||
if result.Vulnerable {
|
||
Common.LogSuccess(fmt.Sprintf("Found vulnerability in %s:%d", info.Host, info.Port))
|
||
}
|
||
|
||
return nil
|
||
}
|
||
```
|
||
|
||
## 2. 注册插件
|
||
在 `Core/Registry.go` 中注册你的插件:
|
||
|
||
```go
|
||
Common.RegisterPlugin("myplugin", Common.ScanPlugin{
|
||
Name: "MyPlugin",
|
||
Port: 12345, // 指定端口,如果是web类插件可设为0
|
||
ScanFunc: Plugins.MyPluginScan,
|
||
})
|
||
```
|
||
|
||
## 3. 开发规范
|
||
|
||
### 插件结构
|
||
- 每个插件应当是独立的功能模块
|
||
- 使用清晰的函数名和变量名
|
||
- 添加必要的注释说明功能和实现逻辑
|
||
|
||
### 错误处理
|
||
```go
|
||
// 推荐的错误处理方式
|
||
if err != nil {
|
||
return fmt.Errorf("plugin_name scan error: %v", err)
|
||
}
|
||
```
|
||
|
||
### 日志输出
|
||
```go
|
||
// 使用内置的日志函数
|
||
Common.LogSuccess("发现漏洞")
|
||
Common.LogError("扫描错误")
|
||
```
|
||
|
||
## 4. 测试验证
|
||
|
||
- 编译整个项目确保无错误
|
||
- 实际环境测试插件功能
|
||
- 验证与其他插件的兼容性
|
||
|
||
## 5. 提交流程
|
||
|
||
1. Fork 项目仓库
|
||
2. 创建功能分支
|
||
3. 提交代码更改
|
||
4. 编写清晰的提交信息
|
||
5. 创建 Pull Request
|
||
|
||
## 注意事项
|
||
|
||
- 遵循 Go 编码规范
|
||
- 保证代码可读性和可维护性
|
||
- 禁止提交恶意代码
|
||
- 做好异常处理和超时控制
|
||
- 避免过度消耗系统资源
|
||
- 注意信息安全,不要泄露敏感数据
|