mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-24 20:21:52 +08:00
refactor: 大型重构
This commit is contained in:
+1
-1
@@ -35,7 +35,7 @@ func Flag(Info *HostInfo) {
|
||||
flag.StringVar(&SshKeyPath, "sshkey", "", "SSH密钥文件(id_rsa)")
|
||||
|
||||
// 扫描配置
|
||||
flag.StringVar(&ScanMode, "m", "all", "扫描类型,例如: -m ssh")
|
||||
flag.StringVar(&ScanMode, "m", "All", "扫描类型,例如: -m ssh")
|
||||
flag.IntVar(&ThreadNum, "t", 600, "线程数量")
|
||||
flag.Int64Var(&Timeout, "time", 3, "超时时间(秒)")
|
||||
flag.IntVar(&LiveTop, "top", 10, "显示存活主机数量")
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
package Common
|
||||
|
||||
import "fmt"
|
||||
|
||||
// 扫描模式常量 - 使用大写开头表示这是一个预设的扫描模式
|
||||
const (
|
||||
ModeAll = "All" // 全量扫描
|
||||
ModeBasic = "Basic" // 基础扫描
|
||||
ModeDatabase = "Database" // 数据库扫描
|
||||
ModeWeb = "Web" // Web扫描
|
||||
ModeService = "Service" // 服务扫描
|
||||
ModeVul = "Vul" // 漏洞扫描
|
||||
ModePort = "Port" // 端口扫描
|
||||
ModeICMP = "ICMP" // ICMP探测
|
||||
ModeLocal = "Local" // 本地信息收集
|
||||
)
|
||||
|
||||
// 插件分类映射表 - 所有插件名使用小写
|
||||
var pluginGroups = map[string][]string{
|
||||
ModeAll: {
|
||||
"web", "fcgi", // web类
|
||||
"mysql", "mssql", "redis", "mongodb", "postgres", // 数据库类
|
||||
"oracle", "memcached", // 数据库类
|
||||
"ftp", "ssh", "smb", "rdp", "vnc", "netbios", // 服务类
|
||||
"ms17010", "smbghost", "smb2", // 漏洞类
|
||||
"findnet", "wmiexec", // 其他
|
||||
},
|
||||
ModeBasic: {
|
||||
"web", "ftp", "ssh", "smb", "findnet",
|
||||
},
|
||||
ModeDatabase: {
|
||||
"mysql", "mssql", "redis", "mongodb",
|
||||
"postgres", "oracle", "memcached",
|
||||
},
|
||||
ModeWeb: {
|
||||
"web", "fcgi",
|
||||
},
|
||||
ModeService: {
|
||||
"ftp", "ssh", "smb", "rdp", "vnc", "netbios",
|
||||
},
|
||||
ModeVul: {
|
||||
"ms17010", "smbghost", "smb2",
|
||||
},
|
||||
ModeLocal: {
|
||||
"localinfo",
|
||||
},
|
||||
}
|
||||
|
||||
// ParseScanMode 解析扫描模式
|
||||
func ParseScanMode(mode string) {
|
||||
fmt.Printf("[*] 解析扫描模式: %s\n", mode)
|
||||
|
||||
// 检查是否是预设模式
|
||||
presetModes := []string{
|
||||
ModeAll, ModeBasic, ModeDatabase, ModeWeb,
|
||||
ModeService, ModeVul, ModePort, ModeICMP, ModeLocal,
|
||||
}
|
||||
|
||||
for _, presetMode := range presetModes {
|
||||
if mode == presetMode {
|
||||
ScanMode = mode
|
||||
if plugins := GetPluginsForMode(mode); plugins != nil {
|
||||
fmt.Printf("[+] 使用预设模式: %s, 包含插件: %v\n", mode, plugins)
|
||||
} else {
|
||||
fmt.Printf("[+] 使用预设模式: %s\n", mode)
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否是有效的插件名
|
||||
if _, exists := PluginManager[mode]; exists {
|
||||
ScanMode = mode
|
||||
fmt.Printf("[+] 使用单个插件: %s\n", mode)
|
||||
return
|
||||
}
|
||||
|
||||
// 默认使用All模式
|
||||
ScanMode = ModeAll
|
||||
fmt.Printf("[*] 未识别的模式,使用默认模式: %s\n", ModeAll)
|
||||
fmt.Printf("[+] 包含插件: %v\n", pluginGroups[ModeAll])
|
||||
}
|
||||
|
||||
// GetPluginsForMode 获取指定模式下的插件列表
|
||||
func GetPluginsForMode(mode string) []string {
|
||||
plugins, exists := pluginGroups[mode]
|
||||
if exists {
|
||||
return plugins
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 辅助函数
|
||||
func IsPortScan() bool { return ScanMode == ModePort }
|
||||
func IsICMPScan() bool { return ScanMode == ModeICMP }
|
||||
func IsLocalScan() bool { return ScanMode == ModeLocal }
|
||||
func IsWebScan() bool { return ScanMode == ModeWeb }
|
||||
func GetScanMode() string { return ScanMode }
|
||||
Reference in New Issue
Block a user