fscan/Common/Variables.go
ZacharyZcR 5b1dde0a59 refactor: 重构配置系统为模块化架构
- 将Config相关文件重构为独立的config模块
- 创建config/Types.go定义核心配置数据结构
- 新增config/ServiceDict.go管理服务认证字典(线程安全)
- 新增config/PortMapping.go管理端口探测器映射(线程安全)
- 新增config/ScanOptions.go提供扫描选项管理(线程安全)
- 新增config/Manager.go统一配置管理器
- 新增Variables.go作为向后兼容桥接层
- 重构Config.go为兼容入口点,委托给新模块
- 删除原有的单体配置文件
- 修复用户字典和密码字典初始化问题
- 保持完全向后兼容性,现有API无需修改
- 提升代码组织性和可维护性
2025-08-05 02:42:17 +08:00

399 lines
13 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package Common
/*
Variables.go - 全局变量定义和config模块桥接
为了保持向后兼容性定义Flag.go和其他文件需要的全局变量
并将它们与新的config模块进行桥接同步。
这个文件作为过渡期间的兼容层,确保现有代码正常工作。
*/
import (
"github.com/shadow1ng/fscan/Common/config"
)
// =========================================================
// 目标配置变量
// =========================================================
var (
ExcludeHosts string // 要排除的主机列表
Ports string // 要扫描的端口列表
ExcludePorts string // 要排除的端口列表
AddPorts string // 额外添加的端口列表
HostsFile string // 包含目标主机的文件路径
PortsFile string // 包含端口列表的文件路径
HostPort []string // 主机:端口格式的目标列表
)
// =========================================================
// 扫描控制变量
// =========================================================
var (
ScanMode string // 扫描模式或指定的插件列表
ThreadNum int // 并发扫描线程数
ModuleThreadNum int // 模块内部线程数
Timeout int64 // 单个扫描操作超时时间(秒)
GlobalTimeout int64 // 整体扫描超时时间(秒)
LiveTop int // 显示的存活主机排名数量
DisablePing bool // 是否禁用主机存活性检测
UsePing bool // 是否使用ICMP Ping检测主机存活
EnableFingerprint bool // 是否启用服务指纹识别
LocalMode bool // 是否启用本地信息收集模式
)
// =========================================================
// 认证与凭据变量
// =========================================================
var (
Username string // 用于认证的用户名
Password string // 用于认证的密码
AddUsers string // 额外添加的用户名列表
AddPasswords string // 额外添加的密码列表
UsersFile string // 包含用户名列表的文件路径
PasswordsFile string // 包含密码列表的文件路径
HashFile string // 包含哈希值的文件路径
HashValue string // 用于哈希认证的单个哈希值
HashValues []string // 哈希值列表
HashBytes [][]byte // 二进制格式的哈希值列表
Domain string // Active Directory/SMB域名
SshKeyPath string // SSH私钥文件路径
Userdict map[string][]string // 用户字典
Passwords []string // 密码列表
)
// =========================================================
// Web扫描变量
// =========================================================
var (
TargetURL string // 单个目标URL
URLsFile string // 包含URL列表的文件路径
URLs []string // 解析后的URL目标列表
Cookie string // Cookie字符串
WebTimeout int64 // Web请求超时时间(秒)
HttpProxy string // HTTP代理地址
Socks5Proxy string // SOCKS5代理地址
UserAgent string // 用户代理字符串
Accept string // Accept头部
)
// =========================================================
// POC测试变量
// =========================================================
var (
PocPath string // POC脚本路径
Pocinfo config.PocInfo // POC详细信息结构
PocFull bool // 是否启用完整POC扫描
DnsLog bool // 是否启用DNS日志
PocNum int // POC并发数
DisablePocScan bool // 是否禁用POC扫描
)
// =========================================================
// Redis利用变量
// =========================================================
var (
RedisFile string // Redis利用目标文件
RedisShell string // Redis反弹Shell命令
DisableRedis bool // 是否禁用Redis利用测试
RedisWritePath string // Redis文件写入路径
RedisWriteContent string // Redis文件写入内容
RedisWriteFile string // Redis写入的源文件
)
// =========================================================
// 暴力破解控制变量
// =========================================================
var (
DisableBrute bool // 是否禁用暴力破解模块
MaxRetries int // 连接失败最大重试次数
)
// =========================================================
// 输出与显示控制变量
// =========================================================
var (
DisableSave bool // 是否禁止保存扫描结果
Silent bool // 是否启用静默模式
NoColor bool // 是否禁用彩色输出
LogLevel string // 日志输出级别
ShowProgress bool // 是否显示进度条
ShowScanPlan bool // 是否显示扫描计划详情
SlowLogOutput bool // 是否启用慢速日志输出
Language string // 界面语言设置
)
// =========================================================
// 其他变量
// =========================================================
var (
Shellcode string // 用于MS17010等漏洞利用的Shellcode
PortMap map[int][]string // 端口到探测器的映射
DefaultMap []string // 默认探测器列表
)
// =========================================================
// 向config模块同步变量的函数
// =========================================================
// SyncToConfig 将当前变量值同步到config模块
func SyncToConfig() {
cfg := config.GetGlobalConfig()
if cfg == nil {
return
}
// 同步扫描目标配置
if cfg.ScanTarget != nil {
cfg.ScanTarget.Ports = Ports
cfg.ScanTarget.ExcludePorts = ExcludePorts
cfg.ScanTarget.ExcludeHosts = ExcludeHosts
cfg.ScanTarget.AddPorts = AddPorts
cfg.ScanTarget.HostPort = HostPort
}
// 同步认证凭据配置
if cfg.Credential != nil {
cfg.Credential.Username = Username
cfg.Credential.Password = Password
cfg.Credential.AddUsers = AddUsers
cfg.Credential.AddPasswords = AddPasswords
cfg.Credential.Domain = Domain
cfg.Credential.HashValue = HashValue
cfg.Credential.HashValues = HashValues
cfg.Credential.HashBytes = HashBytes
cfg.Credential.HashFile = HashFile
cfg.Credential.SshKeyPath = SshKeyPath
}
// 同步扫描控制配置
if cfg.ScanControl != nil {
cfg.ScanControl.ScanMode = ScanMode
cfg.ScanControl.ThreadNum = ThreadNum
cfg.ScanControl.ModuleThreadNum = ModuleThreadNum
cfg.ScanControl.Timeout = Timeout
cfg.ScanControl.GlobalTimeout = GlobalTimeout
cfg.ScanControl.LiveTop = LiveTop
cfg.ScanControl.DisablePing = DisablePing
cfg.ScanControl.UsePing = UsePing
cfg.ScanControl.EnableFingerprint = EnableFingerprint
cfg.ScanControl.LocalMode = LocalMode
}
// 同步输入文件配置
if cfg.InputFile != nil {
cfg.InputFile.HostsFile = HostsFile
cfg.InputFile.UsersFile = UsersFile
cfg.InputFile.PasswordsFile = PasswordsFile
cfg.InputFile.PortsFile = PortsFile
}
// 同步Web扫描配置
if cfg.WebScan != nil {
cfg.WebScan.TargetURL = TargetURL
cfg.WebScan.URLsFile = URLsFile
cfg.WebScan.URLs = URLs
cfg.WebScan.WebTimeout = WebTimeout
cfg.WebScan.HttpProxy = HttpProxy
cfg.WebScan.Socks5Proxy = Socks5Proxy
}
// 同步漏洞利用配置
if cfg.VulnExploit != nil {
cfg.VulnExploit.PocPath = PocPath
cfg.VulnExploit.PocInfo = Pocinfo
cfg.VulnExploit.DisablePocScan = DisablePocScan
cfg.VulnExploit.RedisFile = RedisFile
cfg.VulnExploit.RedisShell = RedisShell
cfg.VulnExploit.DisableRedis = DisableRedis
cfg.VulnExploit.RedisWritePath = RedisWritePath
cfg.VulnExploit.RedisWriteContent = RedisWriteContent
cfg.VulnExploit.RedisWriteFile = RedisWriteFile
cfg.VulnExploit.Shellcode = Shellcode
}
// 同步暴力破解配置
if cfg.BruteForce != nil {
cfg.BruteForce.DisableBrute = DisableBrute
cfg.BruteForce.MaxRetries = MaxRetries
}
// 同步显示配置
if cfg.Display != nil {
cfg.Display.DisableSave = DisableSave
cfg.Display.Silent = Silent
cfg.Display.NoColor = NoColor
cfg.Display.LogLevel = LogLevel
cfg.Display.ShowProgress = ShowProgress
cfg.Display.ShowScanPlan = ShowScanPlan
cfg.Display.SlowLogOutput = SlowLogOutput
cfg.Display.Language = Language
}
// 同步输出配置这些已经在Config.go中处理
// Outputfile 和 OutputFormat 在Config.go中直接同步
// 同步网络配置
if cfg.Network != nil {
cfg.Network.UserAgent = UserAgent
cfg.Network.Accept = Accept
cfg.Network.Cookie = Cookie
cfg.Network.DnsLog = DnsLog
cfg.Network.PocNum = PocNum
cfg.Network.PocFull = PocFull
}
// 保存配置
config.SetGlobalManagerConfig(cfg)
}
// SyncFromConfig 从config模块同步变量值
func SyncFromConfig() {
cfg := config.GetGlobalConfig()
if cfg == nil {
return
}
// 从扫描目标配置同步
if cfg.ScanTarget != nil {
Ports = cfg.ScanTarget.Ports
ExcludePorts = cfg.ScanTarget.ExcludePorts
ExcludeHosts = cfg.ScanTarget.ExcludeHosts
AddPorts = cfg.ScanTarget.AddPorts
HostPort = cfg.ScanTarget.HostPort
}
// 从认证凭据配置同步
if cfg.Credential != nil {
Username = cfg.Credential.Username
Password = cfg.Credential.Password
AddUsers = cfg.Credential.AddUsers
AddPasswords = cfg.Credential.AddPasswords
Domain = cfg.Credential.Domain
HashValue = cfg.Credential.HashValue
HashValues = cfg.Credential.HashValues
HashBytes = cfg.Credential.HashBytes
HashFile = cfg.Credential.HashFile
SshKeyPath = cfg.Credential.SshKeyPath
}
// 从扫描控制配置同步
if cfg.ScanControl != nil {
ScanMode = cfg.ScanControl.ScanMode
ThreadNum = cfg.ScanControl.ThreadNum
ModuleThreadNum = cfg.ScanControl.ModuleThreadNum
Timeout = cfg.ScanControl.Timeout
GlobalTimeout = cfg.ScanControl.GlobalTimeout
LiveTop = cfg.ScanControl.LiveTop
DisablePing = cfg.ScanControl.DisablePing
UsePing = cfg.ScanControl.UsePing
EnableFingerprint = cfg.ScanControl.EnableFingerprint
LocalMode = cfg.ScanControl.LocalMode
}
// 从输入文件配置同步
if cfg.InputFile != nil {
HostsFile = cfg.InputFile.HostsFile
UsersFile = cfg.InputFile.UsersFile
PasswordsFile = cfg.InputFile.PasswordsFile
PortsFile = cfg.InputFile.PortsFile
}
// 从Web扫描配置同步
if cfg.WebScan != nil {
TargetURL = cfg.WebScan.TargetURL
URLsFile = cfg.WebScan.URLsFile
URLs = cfg.WebScan.URLs
WebTimeout = cfg.WebScan.WebTimeout
HttpProxy = cfg.WebScan.HttpProxy
Socks5Proxy = cfg.WebScan.Socks5Proxy
}
// 从漏洞利用配置同步
if cfg.VulnExploit != nil {
PocPath = cfg.VulnExploit.PocPath
Pocinfo = cfg.VulnExploit.PocInfo
DisablePocScan = cfg.VulnExploit.DisablePocScan
RedisFile = cfg.VulnExploit.RedisFile
RedisShell = cfg.VulnExploit.RedisShell
DisableRedis = cfg.VulnExploit.DisableRedis
RedisWritePath = cfg.VulnExploit.RedisWritePath
RedisWriteContent = cfg.VulnExploit.RedisWriteContent
RedisWriteFile = cfg.VulnExploit.RedisWriteFile
Shellcode = cfg.VulnExploit.Shellcode
}
// 从暴力破解配置同步
if cfg.BruteForce != nil {
DisableBrute = cfg.BruteForce.DisableBrute
MaxRetries = cfg.BruteForce.MaxRetries
}
// 从显示配置同步
if cfg.Display != nil {
DisableSave = cfg.Display.DisableSave
Silent = cfg.Display.Silent
NoColor = cfg.Display.NoColor
LogLevel = cfg.Display.LogLevel
ShowProgress = cfg.Display.ShowProgress
ShowScanPlan = cfg.Display.ShowScanPlan
SlowLogOutput = cfg.Display.SlowLogOutput
Language = cfg.Display.Language
}
// 从网络配置同步
if cfg.Network != nil {
UserAgent = cfg.Network.UserAgent
Accept = cfg.Network.Accept
Cookie = cfg.Network.Cookie
DnsLog = cfg.Network.DnsLog
PocNum = cfg.Network.PocNum
PocFull = cfg.Network.PocFull
}
}
// init 初始化函数,设置默认值并同步
func init() {
// 设置默认值
ScanMode = "all"
ThreadNum = 600
Timeout = 3
ModuleThreadNum = 10
GlobalTimeout = 180
LiveTop = 10
WebTimeout = 5
PocNum = 20
MaxRetries = 3
LogLevel = LogLevelBaseInfoSuccess
Language = "zh"
// 初始化用户字典
Userdict = make(map[string][]string)
// 从config模块初始化用户字典和密码字典
serviceDict := config.GetGlobalServiceDict()
if serviceDict != nil {
Userdict = serviceDict.GetAllUserDicts()
Passwords = serviceDict.GetPasswords()
}
// 初始化端口映射
PortMap = make(map[int][]string)
DefaultMap = make([]string, 0)
// 从config模块初始化端口映射
probeMapping := config.GetGlobalProbeMapping()
if probeMapping != nil {
PortMap = probeMapping.GetAllPortMappings()
DefaultMap = probeMapping.GetDefaultProbes()
}
// 初始化其他切片
HostPort = make([]string, 0)
URLs = make([]string, 0)
HashValues = make([]string, 0)
HashBytes = make([][]byte, 0)
// 从config模块同步初始值
SyncFromConfig()
}