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

主要修复: 1. 修复时间显示Bug - StartTime初始化问题 2. 修复Web智能探测错误检测预定义端口而非用户指定端口 3. 修复本地插件被错误调用到端口扫描中的问题 4. 修复host:port格式双重处理导致的多余端口扫描 5. 统一插件过滤逻辑,消除接口不一致性 6. 优化Web检测缓存机制,减少重复HTTP请求 技术改进: - 重构插件适用性检查逻辑,确保策略过滤器正确工作 - 区分Web检测的自动发现模式和用户指定端口模式 - 在解析阶段正确处理host:port格式,避免与默认端口冲突 - 完善缓存机制,提升性能 测试验证: - ./fscan -h 127.0.0.1:3306 现在只检测3306端口 - 本地插件不再参与端口扫描 - Web检测只对指定端口进行协议检测 - 时间显示正确
179 lines
5.6 KiB
Go
179 lines
5.6 KiB
Go
package common
|
||
|
||
import (
|
||
"sync"
|
||
"time"
|
||
|
||
"github.com/shadow1ng/fscan/common/config"
|
||
)
|
||
|
||
/*
|
||
globals.go - 全局配置变量
|
||
|
||
直接定义全局变量,消除base包的双重声明。
|
||
*/
|
||
|
||
var (
|
||
// =============================================================================
|
||
// 核心扫描配置
|
||
// =============================================================================
|
||
|
||
ScanMode string = DefaultScanMode // 扫描模式
|
||
ThreadNum int = DefaultThreadNum // 线程数
|
||
Timeout int64 = DefaultTimeout // 超时时间
|
||
DisablePing bool = false // 禁用ping
|
||
LocalMode bool = false // 本地模式
|
||
LocalPlugin string // 本地插件选择
|
||
AliveOnly bool // 仅存活检测
|
||
DisableBrute bool // 禁用暴力破解
|
||
MaxRetries int = 3 // 最大重试次数
|
||
|
||
// =============================================================================
|
||
// 认证相关配置
|
||
// =============================================================================
|
||
|
||
Username string // 用户名
|
||
Password string // 密码
|
||
Domain string // 域
|
||
Userdict map[string][]string // 用户字典
|
||
Passwords []string // 密码列表
|
||
|
||
// =============================================================================
|
||
// 网络配置
|
||
// =============================================================================
|
||
|
||
HttpProxy string // HTTP代理
|
||
Socks5Proxy string // SOCKS5代理
|
||
WebTimeout int64 = 5 // Web超时时间
|
||
|
||
// =============================================================================
|
||
// 文件路径
|
||
// =============================================================================
|
||
|
||
SshKeyPath string // SSH密钥路径
|
||
PersistenceTargetFile string // Linux持久化目标文件
|
||
WinPEFile string // Windows PE文件
|
||
|
||
// =============================================================================
|
||
// 功能开关
|
||
// =============================================================================
|
||
|
||
NoColor bool // 禁用颜色
|
||
Silent bool // 静默模式
|
||
DisableSave bool // 禁用保存
|
||
DisableProgress bool // 禁用进度条
|
||
Language string = DefaultLanguage // 语言
|
||
LogLevel string = DefaultLogLevel // 日志级别
|
||
|
||
// =============================================================================
|
||
// 高级功能
|
||
// =============================================================================
|
||
|
||
Shellcode string // Shellcode
|
||
LocalPluginsList []string // 本地插件列表
|
||
DnsLog bool // DNS日志
|
||
ForwardShellActive bool // 正向Shell状态
|
||
ReverseShellActive bool // 反向Shell状态
|
||
Socks5ProxyActive bool // SOCKS5代理状态
|
||
|
||
// =============================================================================
|
||
// 端口和服务映射
|
||
// =============================================================================
|
||
|
||
PortMap map[int][]string // 端口到服务映射
|
||
DefaultMap []string // 默认探测器映射
|
||
|
||
// =============================================================================
|
||
// 输出控制
|
||
// =============================================================================
|
||
|
||
Outputfile string = "result.txt" // 输出文件
|
||
OutputFormat string = "txt" // 输出格式
|
||
ShowProgress bool = true // 显示进度条
|
||
StartTime time.Time // 开始时间
|
||
ProgressBar interface{} // 进度条实例
|
||
OutputMutex sync.Mutex // 输出互斥锁
|
||
|
||
// =============================================================================
|
||
// 计数器
|
||
// =============================================================================
|
||
|
||
End int64 // 结束计数器
|
||
Num int64 // 数量计数器
|
||
|
||
// =============================================================================
|
||
// 初始化控制
|
||
// =============================================================================
|
||
|
||
initOnce sync.Once // 确保初始化只执行一次
|
||
)
|
||
|
||
// InitGlobalConfig 初始化全局配置
|
||
func InitGlobalConfig() {
|
||
initOnce.Do(func() {
|
||
// 初始化时间
|
||
if StartTime.IsZero() {
|
||
StartTime = time.Now()
|
||
}
|
||
|
||
// 初始化映射和切片
|
||
if Userdict == nil {
|
||
Userdict = make(map[string][]string)
|
||
}
|
||
if PortMap == nil {
|
||
PortMap = make(map[int][]string)
|
||
}
|
||
if DefaultMap == nil {
|
||
DefaultMap = make([]string, 0)
|
||
}
|
||
if Passwords == nil {
|
||
Passwords = make([]string, 0)
|
||
}
|
||
|
||
// 从config模块获取字典和映射
|
||
if serviceDict := config.GetGlobalServiceDict(); serviceDict != nil {
|
||
Userdict = serviceDict.GetAllUserDicts()
|
||
Passwords = serviceDict.GetPasswords()
|
||
}
|
||
|
||
if probeMapping := config.GetGlobalProbeMapping(); probeMapping != nil {
|
||
PortMap = probeMapping.GetAllPortMappings()
|
||
DefaultMap = probeMapping.GetDefaultProbes()
|
||
}
|
||
})
|
||
}
|
||
|
||
// init 自动初始化
|
||
func init() {
|
||
InitGlobalConfig()
|
||
}
|
||
|
||
// POCInfo POC相关信息
|
||
type PocInfo struct {
|
||
Target string
|
||
PocName string
|
||
}
|
||
|
||
var Pocinfo PocInfo
|
||
|
||
// 版本信息
|
||
const version = "2.2.1"
|
||
|
||
// 日志级别常量
|
||
const (
|
||
LogLevelAll = "all"
|
||
LogLevelError = "error"
|
||
LogLevelBase = "base"
|
||
LogLevelInfo = "info"
|
||
LogLevelSuccess = "success"
|
||
LogLevelDebug = "debug"
|
||
LogLevelInfoSuccess = "info,success"
|
||
LogLevelBaseInfoSuccess = "base,info,success"
|
||
)
|
||
|
||
// SyncToCore 同步配置到core包 - 简化实现
|
||
func SyncToCore() {
|
||
// 简化实现,暂时为空
|
||
}
|
||
|
||
// LogWithProgress 已在progressmanager.go中定义,此处不重复
|