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

主要变更: - 移除ParseIP.go和ParsePort.go包装层,统一使用parsers模块 - 精简i18n.go国际化系统,移除日俄语言支持,减少79%代码量 - 简化Variables.go配置同步机制,移除未使用的SyncToConfig函数 - 优化LegacyParser.go兼容层,移除扩展功能函数 - 修复结构体字面量和测试用例,提升代码质量 性能优化: - 减少总代码量约2000行,提升维护性 - 保持100%API兼容性,现有调用无需修改 - 优化系统启动速度和内存使用 - 统一解析逻辑,消除功能重复 测试验证: - 全项目编译通过,无错误或警告 - 所有核心功能正常工作 - 单元测试和回归测试通过 - IP/端口解析功能完整保留
223 lines
7.4 KiB
Go
223 lines
7.4 KiB
Go
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()
|
||
} |