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

优化目标: - 解决单文件过大问题(970行 -> 4个模块文件) - 提升代码可维护性和可读性 - 保持包的一致性和向后兼容性 拆分方案: - Config.go (48行): 主配置文件,包含版本信息和基础配置 - ConfigServiceDict.go (65行): 服务认证字典和默认密码管理 - ConfigPortMapping.go (850行): 端口与探测器映射关系 - ConfigScanOptions.go (260行): 扫描相关的各种配置选项 技术优势: - 模块化组织,职责分明 - 同包结构避免导入复杂性 - 完全向后兼容,现有代码无需修改 - 便于后续功能扩展和维护 为v2.0.2版本架构优化奠定基础
246 lines
6.9 KiB
Go
246 lines
6.9 KiB
Go
package Common
|
||
|
||
import "fmt"
|
||
|
||
// ConfigScanOptions.go - 扫描相关的各种配置和全局变量
|
||
|
||
// =========================================================
|
||
// 扫描目标配置
|
||
// =========================================================
|
||
var (
|
||
Ports string // 要扫描的端口列表,如"80,443,8080"
|
||
ExcludePorts string // 要排除的端口列表
|
||
ExcludeHosts string // 要排除的主机列表
|
||
AddPorts string // 额外添加的端口列表
|
||
HostPort []string // 主机:端口格式的目标列表
|
||
)
|
||
|
||
// =========================================================
|
||
// 认证与凭据配置
|
||
// =========================================================
|
||
var (
|
||
Username string // 用于认证的用户名
|
||
Password string // 用于认证的密码
|
||
AddUsers string // 额外添加的用户名列表
|
||
AddPasswords string // 额外添加的密码列表
|
||
|
||
// 特定服务认证
|
||
Domain string // Active Directory/SMB域名
|
||
HashValue string // 用于哈希认证的单个哈希值
|
||
HashValues []string // 哈希值列表
|
||
HashBytes [][]byte // 二进制格式的哈希值列表
|
||
HashFile string // 包含哈希值的文件路径
|
||
SshKeyPath string // SSH私钥文件路径
|
||
)
|
||
|
||
// =========================================================
|
||
// 扫描控制配置
|
||
// =========================================================
|
||
var (
|
||
ScanMode string // 扫描模式或指定的插件列表
|
||
ThreadNum int // 并发扫描线程数
|
||
ModuleThreadNum int // 模块内部线程数
|
||
Timeout int64 // 单个扫描操作超时时间(秒)
|
||
GlobalTimeout int64 // 整体扫描超时时间(秒)
|
||
LiveTop int // 显示的存活主机排名数量
|
||
DisablePing bool // 是否禁用主机存活性检测
|
||
UsePing bool // 是否使用ICMP Ping检测主机存活
|
||
EnableFingerprint bool // 是否启用服务指纹识别
|
||
LocalMode bool // 是否启用本地信息收集模式
|
||
)
|
||
|
||
// =========================================================
|
||
// 输入文件配置
|
||
// =========================================================
|
||
var (
|
||
HostsFile string // 包含目标主机的文件路径
|
||
UsersFile string // 包含用户名列表的文件路径
|
||
PasswordsFile string // 包含密码列表的文件路径
|
||
PortsFile string // 包含端口列表的文件路径
|
||
)
|
||
|
||
// =========================================================
|
||
// Web扫描配置
|
||
// =========================================================
|
||
var (
|
||
TargetURL string // 单个目标URL
|
||
URLsFile string // 包含URL列表的文件路径
|
||
URLs []string // 解析后的URL目标列表
|
||
WebTimeout int64 // Web请求超时时间(秒),默认5秒
|
||
HttpProxy string // HTTP代理地址
|
||
Socks5Proxy string // SOCKS5代理地址
|
||
)
|
||
|
||
// =========================================================
|
||
// POC与漏洞利用配置
|
||
// =========================================================
|
||
var (
|
||
// POC配置
|
||
PocPath string // POC脚本路径
|
||
Pocinfo PocInfo // POC详细信息结构
|
||
DisablePocScan bool // 是否禁用POC扫描
|
||
|
||
// Redis利用
|
||
RedisFile string // Redis利用目标文件
|
||
RedisShell string // Redis反弹Shell命令
|
||
DisableRedis bool // 是否禁用Redis利用测试
|
||
RedisWritePath string // Redis文件写入路径
|
||
RedisWriteContent string // Redis文件写入内容
|
||
RedisWriteFile string // Redis写入的源文件
|
||
|
||
// 其他漏洞利用
|
||
Shellcode string // 用于MS17010等漏洞利用的Shellcode
|
||
)
|
||
|
||
// =========================================================
|
||
// 暴力破解控制
|
||
// =========================================================
|
||
var (
|
||
DisableBrute bool // 是否禁用暴力破解模块
|
||
MaxRetries int // 连接失败最大重试次数
|
||
)
|
||
|
||
// =========================================================
|
||
// 输出与显示配置
|
||
// =========================================================
|
||
var (
|
||
DisableSave bool // 是否禁止保存扫描结果
|
||
Silent bool // 是否启用静默模式
|
||
NoColor bool // 是否禁用彩色输出
|
||
LogLevel string // 日志输出级别
|
||
ShowProgress bool // 是否显示进度条
|
||
ShowScanPlan bool // 是否显示扫描计划详情
|
||
SlowLogOutput bool // 是否启用慢速日志输出
|
||
Language string // 界面语言设置
|
||
)
|
||
|
||
// =========================================================
|
||
// 网络配置
|
||
// =========================================================
|
||
var (
|
||
UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
|
||
Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
|
||
DnsLog bool
|
||
PocNum int
|
||
PocFull bool
|
||
Cookie string
|
||
)
|
||
|
||
// =========================================================
|
||
// 配置管理函数
|
||
// =========================================================
|
||
|
||
// SetScanDefaults 设置扫描的默认值
|
||
func SetScanDefaults() {
|
||
if ThreadNum <= 0 {
|
||
ThreadNum = 600
|
||
}
|
||
if ModuleThreadNum <= 0 {
|
||
ModuleThreadNum = 10
|
||
}
|
||
if Timeout <= 0 {
|
||
Timeout = 3
|
||
}
|
||
if GlobalTimeout <= 0 {
|
||
GlobalTimeout = 300 // 5分钟
|
||
}
|
||
if WebTimeout <= 0 {
|
||
WebTimeout = 5
|
||
}
|
||
if MaxRetries <= 0 {
|
||
MaxRetries = 3
|
||
}
|
||
}
|
||
|
||
// ValidateConfig 验证配置的有效性
|
||
func ValidateConfig() error {
|
||
// 验证线程数
|
||
if ThreadNum > 2000 {
|
||
return fmt.Errorf("线程数不能超过2000")
|
||
}
|
||
|
||
// 验证超时设置
|
||
if Timeout > 60 {
|
||
return fmt.Errorf("单次扫描超时时间不能超过60秒")
|
||
}
|
||
|
||
if GlobalTimeout > 3600 {
|
||
return fmt.Errorf("全局超时时间不能超过1小时")
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
// ResetConfig 重置所有配置到默认值
|
||
func ResetConfig() {
|
||
// 重置扫描目标配置
|
||
Ports = ""
|
||
ExcludePorts = ""
|
||
ExcludeHosts = ""
|
||
AddPorts = ""
|
||
HostPort = nil
|
||
|
||
// 重置认证配置
|
||
Username = ""
|
||
Password = ""
|
||
AddUsers = ""
|
||
AddPasswords = ""
|
||
Domain = ""
|
||
HashValue = ""
|
||
HashValues = nil
|
||
HashBytes = nil
|
||
HashFile = ""
|
||
SshKeyPath = ""
|
||
|
||
// 重置扫描控制配置
|
||
ScanMode = ""
|
||
ThreadNum = 0
|
||
ModuleThreadNum = 0
|
||
Timeout = 0
|
||
GlobalTimeout = 0
|
||
LiveTop = 0
|
||
DisablePing = false
|
||
UsePing = false
|
||
EnableFingerprint = false
|
||
LocalMode = false
|
||
|
||
// 重置文件配置
|
||
HostsFile = ""
|
||
UsersFile = ""
|
||
PasswordsFile = ""
|
||
PortsFile = ""
|
||
|
||
// 重置暴力破解配置
|
||
DisableBrute = false
|
||
MaxRetries = 0
|
||
|
||
// 重置Web配置
|
||
TargetURL = ""
|
||
URLsFile = ""
|
||
URLs = nil
|
||
WebTimeout = 0
|
||
HttpProxy = ""
|
||
Socks5Proxy = ""
|
||
|
||
// 重置POC配置
|
||
PocPath = ""
|
||
Pocinfo = PocInfo{}
|
||
DisablePocScan = false
|
||
RedisFile = ""
|
||
RedisShell = ""
|
||
DisableRedis = false
|
||
RedisWritePath = ""
|
||
RedisWriteContent = ""
|
||
RedisWriteFile = ""
|
||
Shellcode = ""
|
||
|
||
// 重置输出配置
|
||
DisableSave = false
|
||
Silent = false
|
||
NoColor = false
|
||
LogLevel = ""
|
||
ShowProgress = false
|
||
ShowScanPlan = false
|
||
SlowLogOutput = false
|
||
Language = ""
|
||
} |