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 // 默认探测器列表 ) // ========================================================= // 配置同步函数 // ========================================================= // SyncFromConfig 从config模块同步变量值(轻量级初始化) func SyncFromConfig() { cfg := config.GetGlobalConfig() if cfg == nil { return // 配置未初始化时直接返回,使用默认值 } // 仅同步核心扫描配置 if cfg.ScanControl != nil { if cfg.ScanControl.ThreadNum > 0 { ThreadNum = cfg.ScanControl.ThreadNum } if cfg.ScanControl.Timeout > 0 { Timeout = cfg.ScanControl.Timeout } if cfg.ScanControl.GlobalTimeout > 0 { GlobalTimeout = cfg.ScanControl.GlobalTimeout } DisablePing = cfg.ScanControl.DisablePing LocalMode = cfg.ScanControl.LocalMode } // 仅同步必要的Web配置 if cfg.WebScan != nil && cfg.WebScan.WebTimeout > 0 { WebTimeout = cfg.WebScan.WebTimeout } // 仅同步显示和语言配置 if cfg.Display != nil { if cfg.Display.LogLevel != "" { LogLevel = cfg.Display.LogLevel } if cfg.Display.Language != "" { Language = cfg.Display.Language } Silent = cfg.Display.Silent NoColor = cfg.Display.NoColor } } // 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() }