mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 05:56:46 +08:00
refactor: 清理common/config包中的死代码
- 删除Manager.go: 完全未使用的配置管理器模式(239行) - 删除ScanOptions.go: 完全未使用的扫描选项管理器(408行) - 简化PortMapping.go: 保留核心功能,删除未使用方法(减少151行) - 简化ServiceDict.go: 保留核心功能,删除未使用方法(减少152行) - 清理Types.go: 删除未使用的NewConfig函数(24行) - 清理constants.go: 删除未使用的版本和验证常量(54行) 总计减少1032行死代码,包大小减少85%,保持功能完整性
This commit is contained in:
parent
619aa632d0
commit
aee8720a72
@ -1,239 +0,0 @@
|
|||||||
package config
|
|
||||||
|
|
||||||
import (
|
|
||||||
"sync"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/schollz/progressbar/v3"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Manager 配置管理器,统一管理所有配置
|
|
||||||
type Manager struct {
|
|
||||||
mu sync.RWMutex
|
|
||||||
config *Config
|
|
||||||
serviceDict *ServiceDictionary
|
|
||||||
probeMapping *ProbeMapping
|
|
||||||
scanOptions *ScanOptionsManager
|
|
||||||
initialized bool
|
|
||||||
lastUpdate time.Time
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewManager 创建配置管理器
|
|
||||||
func NewManager() *Manager {
|
|
||||||
m := &Manager{
|
|
||||||
config: NewConfig(),
|
|
||||||
serviceDict: NewServiceDictionary(),
|
|
||||||
probeMapping: NewProbeMapping(),
|
|
||||||
scanOptions: NewScanOptionsManager(),
|
|
||||||
initialized: true,
|
|
||||||
lastUpdate: time.Now(),
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置默认值
|
|
||||||
m.scanOptions.SetDefaults()
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetConfig 获取完整配置
|
|
||||||
func (m *Manager) GetConfig() *Config {
|
|
||||||
m.mu.RLock()
|
|
||||||
defer m.mu.RUnlock()
|
|
||||||
|
|
||||||
return m.scanOptions.GetConfig()
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetConfig 设置完整配置
|
|
||||||
func (m *Manager) SetConfig(config *Config) {
|
|
||||||
m.mu.Lock()
|
|
||||||
defer m.mu.Unlock()
|
|
||||||
|
|
||||||
if config != nil {
|
|
||||||
m.scanOptions.SetConfig(config)
|
|
||||||
m.config = config
|
|
||||||
m.lastUpdate = time.Now()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetServiceDictionary 获取服务字典管理器
|
|
||||||
func (m *Manager) GetServiceDictionary() *ServiceDictionary {
|
|
||||||
m.mu.RLock()
|
|
||||||
defer m.mu.RUnlock()
|
|
||||||
|
|
||||||
return m.serviceDict
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetProbeMapping 获取探测器映射管理器
|
|
||||||
func (m *Manager) GetProbeMapping() *ProbeMapping {
|
|
||||||
m.mu.RLock()
|
|
||||||
defer m.mu.RUnlock()
|
|
||||||
|
|
||||||
return m.probeMapping
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetScanOptions 获取扫描选项管理器
|
|
||||||
func (m *Manager) GetScanOptions() *ScanOptionsManager {
|
|
||||||
m.mu.RLock()
|
|
||||||
defer m.mu.RUnlock()
|
|
||||||
|
|
||||||
return m.scanOptions
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetProgressBar 设置进度条
|
|
||||||
func (m *Manager) SetProgressBar(pb *progressbar.ProgressBar) {
|
|
||||||
m.mu.Lock()
|
|
||||||
defer m.mu.Unlock()
|
|
||||||
|
|
||||||
if m.config.Application != nil {
|
|
||||||
m.config.Application.ProgressBar = pb
|
|
||||||
m.lastUpdate = time.Now()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetProgressBar 获取进度条
|
|
||||||
func (m *Manager) GetProgressBar() *progressbar.ProgressBar {
|
|
||||||
m.mu.RLock()
|
|
||||||
defer m.mu.RUnlock()
|
|
||||||
|
|
||||||
if m.config.Application != nil {
|
|
||||||
return m.config.Application.ProgressBar
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetVersion 获取版本信息
|
|
||||||
func (m *Manager) GetVersion() string {
|
|
||||||
m.mu.RLock()
|
|
||||||
defer m.mu.RUnlock()
|
|
||||||
|
|
||||||
return m.config.Application.Version.Full
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetVersion 设置版本信息
|
|
||||||
func (m *Manager) SetVersion(version string) {
|
|
||||||
m.mu.Lock()
|
|
||||||
defer m.mu.Unlock()
|
|
||||||
|
|
||||||
if m.config.Application != nil {
|
|
||||||
m.config.Application.Version.Full = version
|
|
||||||
m.lastUpdate = time.Now()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetOutputMutex 获取输出互斥锁
|
|
||||||
func (m *Manager) GetOutputMutex() *sync.Mutex {
|
|
||||||
m.mu.RLock()
|
|
||||||
defer m.mu.RUnlock()
|
|
||||||
|
|
||||||
if m.config.Application != nil {
|
|
||||||
return &m.config.Application.OutputMutex
|
|
||||||
}
|
|
||||||
return &sync.Mutex{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetDefaults 设置所有模块的默认值
|
|
||||||
func (m *Manager) SetDefaults() {
|
|
||||||
m.mu.Lock()
|
|
||||||
defer m.mu.Unlock()
|
|
||||||
|
|
||||||
m.scanOptions.SetDefaults()
|
|
||||||
m.serviceDict.ResetToDefaults()
|
|
||||||
m.probeMapping.ResetToDefaults()
|
|
||||||
|
|
||||||
// 设置应用程序默认值
|
|
||||||
if m.config.Application != nil {
|
|
||||||
m.config.Application.Version = Version{
|
|
||||||
Major: VersionMajor,
|
|
||||||
Minor: VersionMinor,
|
|
||||||
Patch: VersionPatch,
|
|
||||||
Full: VersionFull,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m.lastUpdate = time.Now()
|
|
||||||
}
|
|
||||||
|
|
||||||
// ValidateAll 验证所有配置
|
|
||||||
func (m *Manager) ValidateAll() []string {
|
|
||||||
m.mu.RLock()
|
|
||||||
defer m.mu.RUnlock()
|
|
||||||
|
|
||||||
var warnings []string
|
|
||||||
|
|
||||||
// 验证扫描选项
|
|
||||||
warnings = append(warnings, m.scanOptions.ValidateConfig()...)
|
|
||||||
|
|
||||||
// 可以添加其他模块的验证逻辑
|
|
||||||
|
|
||||||
return warnings
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetSummary 获取完整配置摘要
|
|
||||||
func (m *Manager) GetSummary() map[string]interface{} {
|
|
||||||
m.mu.RLock()
|
|
||||||
defer m.mu.RUnlock()
|
|
||||||
|
|
||||||
summary := m.scanOptions.GetSummary()
|
|
||||||
|
|
||||||
// 添加其他模块信息
|
|
||||||
summary["service_count"] = len(m.serviceDict.GetServiceNames())
|
|
||||||
summary["password_count"] = m.serviceDict.GetPasswordCount()
|
|
||||||
summary["mapped_ports_count"] = len(m.probeMapping.GetMappedPorts())
|
|
||||||
summary["version"] = m.GetVersion()
|
|
||||||
summary["last_updated"] = m.lastUpdate
|
|
||||||
|
|
||||||
return summary
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset 重置所有配置为默认值
|
|
||||||
func (m *Manager) Reset() {
|
|
||||||
m.mu.Lock()
|
|
||||||
defer m.mu.Unlock()
|
|
||||||
|
|
||||||
m.config = NewConfig()
|
|
||||||
m.serviceDict.ResetToDefaults()
|
|
||||||
m.probeMapping.ResetToDefaults()
|
|
||||||
m.scanOptions = NewScanOptionsManager()
|
|
||||||
m.scanOptions.SetDefaults()
|
|
||||||
m.lastUpdate = time.Now()
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsInitialized 检查是否已初始化
|
|
||||||
func (m *Manager) IsInitialized() bool {
|
|
||||||
m.mu.RLock()
|
|
||||||
defer m.mu.RUnlock()
|
|
||||||
|
|
||||||
return m.initialized
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetLastUpdate 获取最后更新时间
|
|
||||||
func (m *Manager) GetLastUpdate() time.Time {
|
|
||||||
m.mu.RLock()
|
|
||||||
defer m.mu.RUnlock()
|
|
||||||
|
|
||||||
return m.lastUpdate
|
|
||||||
}
|
|
||||||
|
|
||||||
// 全局配置管理器实例
|
|
||||||
var (
|
|
||||||
globalManager *Manager
|
|
||||||
managerOnce sync.Once
|
|
||||||
)
|
|
||||||
|
|
||||||
// GetGlobalManager 获取全局配置管理器实例
|
|
||||||
func GetGlobalManager() *Manager {
|
|
||||||
managerOnce.Do(func() {
|
|
||||||
globalManager = NewManager()
|
|
||||||
})
|
|
||||||
return globalManager
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetGlobalVersion 设置全局版本信息
|
|
||||||
func SetGlobalVersion(version string) {
|
|
||||||
GetGlobalManager().SetVersion(version)
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetGlobalProgressBar 获取全局进度条
|
|
||||||
func GetGlobalProgressBar() *progressbar.ProgressBar {
|
|
||||||
return GetGlobalManager().GetProgressBar()
|
|
||||||
}
|
|
@ -1,7 +1,6 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"sort"
|
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -42,84 +41,6 @@ func getDefaultPortMap() map[int][]string {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetProbesForPort 获取指定端口的探测器列表
|
|
||||||
func (pm *ProbeMapping) GetProbesForPort(port int) []string {
|
|
||||||
pm.mu.RLock()
|
|
||||||
defer pm.mu.RUnlock()
|
|
||||||
|
|
||||||
if probes, exists := pm.portMap[port]; exists {
|
|
||||||
// 返回副本,避免外部修改
|
|
||||||
result := make([]string, len(probes))
|
|
||||||
copy(result, probes)
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// 返回默认探测器
|
|
||||||
result := make([]string, len(pm.defaultMap))
|
|
||||||
copy(result, pm.defaultMap)
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetProbesForPort 设置指定端口的探测器列表
|
|
||||||
func (pm *ProbeMapping) SetProbesForPort(port int, probes []string) {
|
|
||||||
pm.mu.Lock()
|
|
||||||
defer pm.mu.Unlock()
|
|
||||||
|
|
||||||
if len(probes) > 0 {
|
|
||||||
// 创建副本
|
|
||||||
probesCopy := make([]string, len(probes))
|
|
||||||
copy(probesCopy, probes)
|
|
||||||
pm.portMap[port] = probesCopy
|
|
||||||
} else {
|
|
||||||
delete(pm.portMap, port)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddProbeToPort 向指定端口添加探测器
|
|
||||||
func (pm *ProbeMapping) AddProbeToPort(port int, probe string) {
|
|
||||||
pm.mu.Lock()
|
|
||||||
defer pm.mu.Unlock()
|
|
||||||
|
|
||||||
if probe == "" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if existing, exists := pm.portMap[port]; exists {
|
|
||||||
// 检查是否已存在
|
|
||||||
for _, p := range existing {
|
|
||||||
if p == probe {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 添加到现有列表
|
|
||||||
pm.portMap[port] = append(existing, probe)
|
|
||||||
} else {
|
|
||||||
// 创建新列表
|
|
||||||
pm.portMap[port] = []string{probe}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// RemoveProbeFromPort 从指定端口移除探测器
|
|
||||||
func (pm *ProbeMapping) RemoveProbeFromPort(port int, probe string) {
|
|
||||||
pm.mu.Lock()
|
|
||||||
defer pm.mu.Unlock()
|
|
||||||
|
|
||||||
if existing, exists := pm.portMap[port]; exists {
|
|
||||||
var result []string
|
|
||||||
for _, p := range existing {
|
|
||||||
if p != probe {
|
|
||||||
result = append(result, p)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(result) > 0 {
|
|
||||||
pm.portMap[port] = result
|
|
||||||
} else {
|
|
||||||
delete(pm.portMap, port)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetDefaultProbes 获取默认探测器列表
|
// GetDefaultProbes 获取默认探测器列表
|
||||||
func (pm *ProbeMapping) GetDefaultProbes() []string {
|
func (pm *ProbeMapping) GetDefaultProbes() []string {
|
||||||
pm.mu.RLock()
|
pm.mu.RLock()
|
||||||
@ -130,18 +51,6 @@ func (pm *ProbeMapping) GetDefaultProbes() []string {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetDefaultProbes 设置默认探测器列表
|
|
||||||
func (pm *ProbeMapping) SetDefaultProbes(probes []string) {
|
|
||||||
pm.mu.Lock()
|
|
||||||
defer pm.mu.Unlock()
|
|
||||||
|
|
||||||
if len(probes) > 0 {
|
|
||||||
defaultCopy := make([]string, len(probes))
|
|
||||||
copy(defaultCopy, probes)
|
|
||||||
pm.defaultMap = defaultCopy
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetAllPortMappings 获取所有端口映射
|
// GetAllPortMappings 获取所有端口映射
|
||||||
func (pm *ProbeMapping) GetAllPortMappings() map[int][]string {
|
func (pm *ProbeMapping) GetAllPortMappings() map[int][]string {
|
||||||
pm.mu.RLock()
|
pm.mu.RLock()
|
||||||
@ -156,64 +65,6 @@ func (pm *ProbeMapping) GetAllPortMappings() map[int][]string {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMappedPorts 获取所有已映射的端口列表
|
|
||||||
func (pm *ProbeMapping) GetMappedPorts() []int {
|
|
||||||
pm.mu.RLock()
|
|
||||||
defer pm.mu.RUnlock()
|
|
||||||
|
|
||||||
ports := make([]int, 0, len(pm.portMap))
|
|
||||||
for port := range pm.portMap {
|
|
||||||
ports = append(ports, port)
|
|
||||||
}
|
|
||||||
|
|
||||||
sort.Ints(ports)
|
|
||||||
return ports
|
|
||||||
}
|
|
||||||
|
|
||||||
// HasMappingForPort 检查指定端口是否有自定义映射
|
|
||||||
func (pm *ProbeMapping) HasMappingForPort(port int) bool {
|
|
||||||
pm.mu.RLock()
|
|
||||||
defer pm.mu.RUnlock()
|
|
||||||
|
|
||||||
_, exists := pm.portMap[port]
|
|
||||||
return exists
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetProbeCount 获取指定端口的探测器数量
|
|
||||||
func (pm *ProbeMapping) GetProbeCount(port int) int {
|
|
||||||
pm.mu.RLock()
|
|
||||||
defer pm.mu.RUnlock()
|
|
||||||
|
|
||||||
if probes, exists := pm.portMap[port]; exists {
|
|
||||||
return len(probes)
|
|
||||||
}
|
|
||||||
return len(pm.defaultMap)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ResetToDefaults 重置为默认映射
|
|
||||||
func (pm *ProbeMapping) ResetToDefaults() {
|
|
||||||
pm.mu.Lock()
|
|
||||||
defer pm.mu.Unlock()
|
|
||||||
|
|
||||||
pm.defaultMap = getDefaultProbeMap()
|
|
||||||
pm.portMap = getDefaultPortMap()
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClearPortMapping 清除指定端口的映射
|
|
||||||
func (pm *ProbeMapping) ClearPortMapping(port int) {
|
|
||||||
pm.mu.Lock()
|
|
||||||
defer pm.mu.Unlock()
|
|
||||||
|
|
||||||
delete(pm.portMap, port)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClearAllMappings 清除所有端口映射
|
|
||||||
func (pm *ProbeMapping) ClearAllMappings() {
|
|
||||||
pm.mu.Lock()
|
|
||||||
defer pm.mu.Unlock()
|
|
||||||
|
|
||||||
pm.portMap = make(map[int][]string)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 全局探测器映射实例
|
// 全局探测器映射实例
|
||||||
var (
|
var (
|
||||||
@ -227,4 +78,4 @@ func GetGlobalProbeMapping() *ProbeMapping {
|
|||||||
globalProbeMapping = NewProbeMapping()
|
globalProbeMapping = NewProbeMapping()
|
||||||
})
|
})
|
||||||
return globalProbeMapping
|
return globalProbeMapping
|
||||||
}
|
}
|
@ -1,408 +0,0 @@
|
|||||||
package config
|
|
||||||
|
|
||||||
import (
|
|
||||||
"sync"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/shadow1ng/fscan/common/i18n"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ScanOptionsManager 扫描选项管理器
|
|
||||||
type ScanOptionsManager struct {
|
|
||||||
mu sync.RWMutex
|
|
||||||
options *Config
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewScanOptionsManager 创建扫描选项管理器
|
|
||||||
func NewScanOptionsManager() *ScanOptionsManager {
|
|
||||||
return &ScanOptionsManager{
|
|
||||||
options: NewConfig(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetConfig 获取完整配置
|
|
||||||
func (som *ScanOptionsManager) GetConfig() *Config {
|
|
||||||
som.mu.RLock()
|
|
||||||
defer som.mu.RUnlock()
|
|
||||||
|
|
||||||
// 返回深拷贝,避免外部修改
|
|
||||||
return som.copyConfig(som.options)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetConfig 设置完整配置
|
|
||||||
func (som *ScanOptionsManager) SetConfig(config *Config) {
|
|
||||||
som.mu.Lock()
|
|
||||||
defer som.mu.Unlock()
|
|
||||||
|
|
||||||
if config != nil {
|
|
||||||
som.options = som.copyConfig(config)
|
|
||||||
som.options.LastUpdated = time.Now()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdateScanTarget 更新扫描目标配置
|
|
||||||
func (som *ScanOptionsManager) UpdateScanTarget(target *ScanTargetConfig) {
|
|
||||||
som.mu.Lock()
|
|
||||||
defer som.mu.Unlock()
|
|
||||||
|
|
||||||
if target != nil {
|
|
||||||
som.options.ScanTarget = target
|
|
||||||
som.options.LastUpdated = time.Now()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdateCredential 更新认证配置
|
|
||||||
func (som *ScanOptionsManager) UpdateCredential(credential *CredentialConfig) {
|
|
||||||
som.mu.Lock()
|
|
||||||
defer som.mu.Unlock()
|
|
||||||
|
|
||||||
if credential != nil {
|
|
||||||
som.options.Credential = credential
|
|
||||||
som.options.LastUpdated = time.Now()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdateScanControl 更新扫描控制配置
|
|
||||||
func (som *ScanOptionsManager) UpdateScanControl(control *ScanControlConfig) {
|
|
||||||
som.mu.Lock()
|
|
||||||
defer som.mu.Unlock()
|
|
||||||
|
|
||||||
if control != nil {
|
|
||||||
som.options.ScanControl = control
|
|
||||||
som.options.LastUpdated = time.Now()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdateWebScan 更新Web扫描配置
|
|
||||||
func (som *ScanOptionsManager) UpdateWebScan(webScan *WebScanConfig) {
|
|
||||||
som.mu.Lock()
|
|
||||||
defer som.mu.Unlock()
|
|
||||||
|
|
||||||
if webScan != nil {
|
|
||||||
som.options.WebScan = webScan
|
|
||||||
som.options.LastUpdated = time.Now()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdateDisplay 更新显示配置
|
|
||||||
func (som *ScanOptionsManager) UpdateDisplay(display *DisplayConfig) {
|
|
||||||
som.mu.Lock()
|
|
||||||
defer som.mu.Unlock()
|
|
||||||
|
|
||||||
if display != nil {
|
|
||||||
som.options.Display = display
|
|
||||||
som.options.LastUpdated = time.Now()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdateOutput 更新输出配置
|
|
||||||
func (som *ScanOptionsManager) UpdateOutput(output *OutputConfig) {
|
|
||||||
som.mu.Lock()
|
|
||||||
defer som.mu.Unlock()
|
|
||||||
|
|
||||||
if output != nil {
|
|
||||||
som.options.Output = output
|
|
||||||
som.options.LastUpdated = time.Now()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetDefaults 设置默认值
|
|
||||||
func (som *ScanOptionsManager) SetDefaults() {
|
|
||||||
som.mu.Lock()
|
|
||||||
defer som.mu.Unlock()
|
|
||||||
|
|
||||||
// 设置扫描控制默认值
|
|
||||||
if som.options.ScanControl.ThreadNum <= 0 {
|
|
||||||
som.options.ScanControl.ThreadNum = DefaultThreadNum
|
|
||||||
}
|
|
||||||
if som.options.ScanControl.ModuleThreadNum <= 0 {
|
|
||||||
som.options.ScanControl.ModuleThreadNum = DefaultModuleThreadNum
|
|
||||||
}
|
|
||||||
if som.options.ScanControl.Timeout <= 0 {
|
|
||||||
som.options.ScanControl.Timeout = DefaultTimeout
|
|
||||||
}
|
|
||||||
if som.options.ScanControl.GlobalTimeout <= 0 {
|
|
||||||
som.options.ScanControl.GlobalTimeout = DefaultGlobalTimeout
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置Web扫描默认值
|
|
||||||
if som.options.WebScan.WebTimeout <= 0 {
|
|
||||||
som.options.WebScan.WebTimeout = DefaultWebTimeout
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置暴力破解默认值
|
|
||||||
if som.options.BruteForce.MaxRetries <= 0 {
|
|
||||||
som.options.BruteForce.MaxRetries = DefaultMaxRetries
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置显示默认值
|
|
||||||
if som.options.Display.LogLevel == "" {
|
|
||||||
som.options.Display.LogLevel = DefaultLogLevel
|
|
||||||
}
|
|
||||||
if som.options.Display.Language == "" {
|
|
||||||
som.options.Display.Language = DefaultLanguage
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置输出默认值
|
|
||||||
if som.options.Output.OutputFormat == "" {
|
|
||||||
som.options.Output.OutputFormat = DefaultOutputFormat
|
|
||||||
}
|
|
||||||
if som.options.Output.Outputfile == "" {
|
|
||||||
som.options.Output.Outputfile = DefaultOutputFile
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置网络默认值
|
|
||||||
if som.options.Network.UserAgent == "" {
|
|
||||||
som.options.Network.UserAgent = DefaultUserAgent
|
|
||||||
}
|
|
||||||
if som.options.Network.Accept == "" {
|
|
||||||
som.options.Network.Accept = DefaultAccept
|
|
||||||
}
|
|
||||||
if som.options.Network.PocNum <= 0 {
|
|
||||||
som.options.Network.PocNum = DefaultPocNum
|
|
||||||
}
|
|
||||||
|
|
||||||
som.options.LastUpdated = time.Now()
|
|
||||||
}
|
|
||||||
|
|
||||||
// ValidateConfig 验证配置
|
|
||||||
func (som *ScanOptionsManager) ValidateConfig() []string {
|
|
||||||
som.mu.RLock()
|
|
||||||
defer som.mu.RUnlock()
|
|
||||||
|
|
||||||
var warnings []string
|
|
||||||
|
|
||||||
// 验证线程数配置
|
|
||||||
if som.options.ScanControl.ThreadNum > MaxThreadNumWarning {
|
|
||||||
warnings = append(warnings, "线程数过大,可能影响系统性能")
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证超时配置
|
|
||||||
if som.options.ScanControl.Timeout > som.options.WebScan.WebTimeout {
|
|
||||||
warnings = append(warnings, i18n.GetText("config_web_timeout_warning"))
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证超时配置合理性
|
|
||||||
if som.options.ScanControl.Timeout < MinTimeoutWarning {
|
|
||||||
warnings = append(warnings, "超时时间过短,可能导致误报")
|
|
||||||
}
|
|
||||||
|
|
||||||
if som.options.WebScan.WebTimeout < MinTimeoutWarning {
|
|
||||||
warnings = append(warnings, "Web超时时间过短,可能导致误报")
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证全局超时
|
|
||||||
if som.options.ScanControl.GlobalTimeout < MinGlobalTimeout {
|
|
||||||
warnings = append(warnings, "全局超时时间过短,扫描可能提前终止")
|
|
||||||
}
|
|
||||||
|
|
||||||
return warnings
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetSummary 获取配置摘要
|
|
||||||
func (som *ScanOptionsManager) GetSummary() map[string]interface{} {
|
|
||||||
som.mu.RLock()
|
|
||||||
defer som.mu.RUnlock()
|
|
||||||
|
|
||||||
return map[string]interface{}{
|
|
||||||
"scan_mode": som.options.ScanControl.ScanMode,
|
|
||||||
"thread_num": som.options.ScanControl.ThreadNum,
|
|
||||||
"timeout": som.options.ScanControl.Timeout,
|
|
||||||
"web_timeout": som.options.WebScan.WebTimeout,
|
|
||||||
"disable_ping": som.options.ScanControl.DisablePing,
|
|
||||||
"local_mode": som.options.ScanControl.LocalMode,
|
|
||||||
"log_level": som.options.Display.LogLevel,
|
|
||||||
"output_format": som.options.Output.OutputFormat,
|
|
||||||
"has_proxy": som.options.WebScan.HttpProxy != "" || som.options.WebScan.Socks5Proxy != "",
|
|
||||||
"has_credentials": som.options.Credential.Username != "" || som.options.InputFile.UsersFile != "",
|
|
||||||
"last_updated": som.options.LastUpdated,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ResetToDefaults 重置为默认配置
|
|
||||||
func (som *ScanOptionsManager) ResetToDefaults() {
|
|
||||||
som.mu.Lock()
|
|
||||||
defer som.mu.Unlock()
|
|
||||||
|
|
||||||
som.options = NewConfig()
|
|
||||||
som.SetDefaults()
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClearConfig 清空配置
|
|
||||||
func (som *ScanOptionsManager) ClearConfig() {
|
|
||||||
som.mu.Lock()
|
|
||||||
defer som.mu.Unlock()
|
|
||||||
|
|
||||||
// 清空所有配置项但保持结构
|
|
||||||
som.options.ScanTarget.Ports = ""
|
|
||||||
som.options.ScanTarget.ExcludePorts = ""
|
|
||||||
som.options.ScanTarget.ExcludeHosts = ""
|
|
||||||
som.options.ScanTarget.AddPorts = ""
|
|
||||||
som.options.ScanTarget.HostPort = nil
|
|
||||||
|
|
||||||
som.options.Credential.Username = ""
|
|
||||||
som.options.Credential.Password = ""
|
|
||||||
som.options.Credential.AddUsers = ""
|
|
||||||
som.options.Credential.AddPasswords = ""
|
|
||||||
som.options.Credential.Domain = ""
|
|
||||||
som.options.Credential.HashValue = ""
|
|
||||||
som.options.Credential.HashValues = nil
|
|
||||||
som.options.Credential.HashBytes = nil
|
|
||||||
som.options.Credential.HashFile = ""
|
|
||||||
som.options.Credential.SshKeyPath = ""
|
|
||||||
|
|
||||||
som.options.InputFile.HostsFile = ""
|
|
||||||
som.options.InputFile.UsersFile = ""
|
|
||||||
som.options.InputFile.PasswordsFile = ""
|
|
||||||
som.options.InputFile.PortsFile = ""
|
|
||||||
|
|
||||||
som.options.WebScan.TargetURL = ""
|
|
||||||
som.options.WebScan.URLsFile = ""
|
|
||||||
som.options.WebScan.URLs = nil
|
|
||||||
som.options.WebScan.HttpProxy = ""
|
|
||||||
som.options.WebScan.Socks5Proxy = ""
|
|
||||||
|
|
||||||
som.options.LastUpdated = time.Now()
|
|
||||||
}
|
|
||||||
|
|
||||||
// copyConfig 深拷贝配置(简化版本)
|
|
||||||
func (som *ScanOptionsManager) copyConfig(config *Config) *Config {
|
|
||||||
if config == nil {
|
|
||||||
return NewConfig()
|
|
||||||
}
|
|
||||||
|
|
||||||
newConfig := &Config{
|
|
||||||
Application: &ApplicationConfig{
|
|
||||||
Version: config.Application.Version,
|
|
||||||
ProgressBar: config.Application.ProgressBar, // 指针共享
|
|
||||||
},
|
|
||||||
ScanTarget: &ScanTargetConfig{
|
|
||||||
Ports: config.ScanTarget.Ports,
|
|
||||||
ExcludePorts: config.ScanTarget.ExcludePorts,
|
|
||||||
ExcludeHosts: config.ScanTarget.ExcludeHosts,
|
|
||||||
AddPorts: config.ScanTarget.AddPorts,
|
|
||||||
},
|
|
||||||
Credential: &CredentialConfig{
|
|
||||||
Username: config.Credential.Username,
|
|
||||||
Password: config.Credential.Password,
|
|
||||||
AddUsers: config.Credential.AddUsers,
|
|
||||||
AddPasswords: config.Credential.AddPasswords,
|
|
||||||
Domain: config.Credential.Domain,
|
|
||||||
HashValue: config.Credential.HashValue,
|
|
||||||
HashFile: config.Credential.HashFile,
|
|
||||||
SshKeyPath: config.Credential.SshKeyPath,
|
|
||||||
},
|
|
||||||
ScanControl: &ScanControlConfig{
|
|
||||||
ScanMode: config.ScanControl.ScanMode,
|
|
||||||
ThreadNum: config.ScanControl.ThreadNum,
|
|
||||||
ModuleThreadNum: config.ScanControl.ModuleThreadNum,
|
|
||||||
Timeout: config.ScanControl.Timeout,
|
|
||||||
GlobalTimeout: config.ScanControl.GlobalTimeout,
|
|
||||||
LiveTop: config.ScanControl.LiveTop,
|
|
||||||
DisablePing: config.ScanControl.DisablePing,
|
|
||||||
UsePing: config.ScanControl.UsePing,
|
|
||||||
EnableFingerprint: config.ScanControl.EnableFingerprint,
|
|
||||||
LocalMode: config.ScanControl.LocalMode,
|
|
||||||
},
|
|
||||||
InputFile: &InputFileConfig{
|
|
||||||
HostsFile: config.InputFile.HostsFile,
|
|
||||||
UsersFile: config.InputFile.UsersFile,
|
|
||||||
PasswordsFile: config.InputFile.PasswordsFile,
|
|
||||||
PortsFile: config.InputFile.PortsFile,
|
|
||||||
},
|
|
||||||
WebScan: &WebScanConfig{
|
|
||||||
TargetURL: config.WebScan.TargetURL,
|
|
||||||
URLsFile: config.WebScan.URLsFile,
|
|
||||||
WebTimeout: config.WebScan.WebTimeout,
|
|
||||||
HttpProxy: config.WebScan.HttpProxy,
|
|
||||||
Socks5Proxy: config.WebScan.Socks5Proxy,
|
|
||||||
},
|
|
||||||
VulnExploit: &VulnExploitConfig{
|
|
||||||
PocPath: config.VulnExploit.PocPath,
|
|
||||||
PocInfo: config.VulnExploit.PocInfo,
|
|
||||||
DisablePocScan: config.VulnExploit.DisablePocScan,
|
|
||||||
RedisFile: config.VulnExploit.RedisFile,
|
|
||||||
RedisShell: config.VulnExploit.RedisShell,
|
|
||||||
DisableRedis: config.VulnExploit.DisableRedis,
|
|
||||||
RedisWritePath: config.VulnExploit.RedisWritePath,
|
|
||||||
RedisWriteContent: config.VulnExploit.RedisWriteContent,
|
|
||||||
RedisWriteFile: config.VulnExploit.RedisWriteFile,
|
|
||||||
Shellcode: config.VulnExploit.Shellcode,
|
|
||||||
},
|
|
||||||
BruteForce: &BruteForceConfig{
|
|
||||||
DisableBrute: config.BruteForce.DisableBrute,
|
|
||||||
MaxRetries: config.BruteForce.MaxRetries,
|
|
||||||
},
|
|
||||||
Display: &DisplayConfig{
|
|
||||||
DisableSave: config.Display.DisableSave,
|
|
||||||
Silent: config.Display.Silent,
|
|
||||||
NoColor: config.Display.NoColor,
|
|
||||||
LogLevel: config.Display.LogLevel,
|
|
||||||
ShowProgress: config.Display.ShowProgress,
|
|
||||||
ShowScanPlan: config.Display.ShowScanPlan,
|
|
||||||
SlowLogOutput: config.Display.SlowLogOutput,
|
|
||||||
Language: config.Display.Language,
|
|
||||||
},
|
|
||||||
Output: &OutputConfig{
|
|
||||||
Outputfile: config.Output.Outputfile,
|
|
||||||
OutputFormat: config.Output.OutputFormat,
|
|
||||||
},
|
|
||||||
Network: &NetworkConfig{
|
|
||||||
UserAgent: config.Network.UserAgent,
|
|
||||||
Accept: config.Network.Accept,
|
|
||||||
DnsLog: config.Network.DnsLog,
|
|
||||||
PocNum: config.Network.PocNum,
|
|
||||||
PocFull: config.Network.PocFull,
|
|
||||||
Cookie: config.Network.Cookie,
|
|
||||||
},
|
|
||||||
LastUpdated: config.LastUpdated,
|
|
||||||
}
|
|
||||||
|
|
||||||
// 拷贝切片
|
|
||||||
if len(config.ScanTarget.HostPort) > 0 {
|
|
||||||
newConfig.ScanTarget.HostPort = make([]string, len(config.ScanTarget.HostPort))
|
|
||||||
copy(newConfig.ScanTarget.HostPort, config.ScanTarget.HostPort)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(config.Credential.HashValues) > 0 {
|
|
||||||
newConfig.Credential.HashValues = make([]string, len(config.Credential.HashValues))
|
|
||||||
copy(newConfig.Credential.HashValues, config.Credential.HashValues)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(config.Credential.HashBytes) > 0 {
|
|
||||||
newConfig.Credential.HashBytes = make([][]byte, len(config.Credential.HashBytes))
|
|
||||||
for i, b := range config.Credential.HashBytes {
|
|
||||||
if len(b) > 0 {
|
|
||||||
newConfig.Credential.HashBytes[i] = make([]byte, len(b))
|
|
||||||
copy(newConfig.Credential.HashBytes[i], b)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(config.WebScan.URLs) > 0 {
|
|
||||||
newConfig.WebScan.URLs = make([]string, len(config.WebScan.URLs))
|
|
||||||
copy(newConfig.WebScan.URLs, config.WebScan.URLs)
|
|
||||||
}
|
|
||||||
|
|
||||||
return newConfig
|
|
||||||
}
|
|
||||||
|
|
||||||
// 全局扫描选项管理器实例
|
|
||||||
var (
|
|
||||||
globalScanOptions *ScanOptionsManager
|
|
||||||
scanOptionsOnce sync.Once
|
|
||||||
)
|
|
||||||
|
|
||||||
// GetGlobalScanOptions 获取全局扫描选项管理器实例
|
|
||||||
func GetGlobalScanOptions() *ScanOptionsManager {
|
|
||||||
scanOptionsOnce.Do(func() {
|
|
||||||
globalScanOptions = NewScanOptionsManager()
|
|
||||||
globalScanOptions.SetDefaults()
|
|
||||||
})
|
|
||||||
return globalScanOptions
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetGlobalConfig 获取全局配置
|
|
||||||
func GetGlobalConfig() *Config {
|
|
||||||
return GetGlobalScanOptions().GetConfig()
|
|
||||||
}
|
|
@ -1,7 +1,6 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -42,69 +41,6 @@ func getDefaultPasswords() []string {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetUserDict 获取指定服务的用户字典
|
|
||||||
func (sd *ServiceDictionary) GetUserDict(service string) []string {
|
|
||||||
sd.mu.RLock()
|
|
||||||
defer sd.mu.RUnlock()
|
|
||||||
|
|
||||||
service = strings.ToLower(service)
|
|
||||||
if users, exists := sd.userDict[service]; exists {
|
|
||||||
// 返回副本,避免外部修改
|
|
||||||
result := make([]string, len(users))
|
|
||||||
copy(result, users)
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// 返回默认的通用用户名
|
|
||||||
result := make([]string, len(DefaultGenericUsers))
|
|
||||||
copy(result, DefaultGenericUsers)
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetUserDict 设置指定服务的用户字典
|
|
||||||
func (sd *ServiceDictionary) SetUserDict(service string, users []string) {
|
|
||||||
sd.mu.Lock()
|
|
||||||
defer sd.mu.Unlock()
|
|
||||||
|
|
||||||
service = strings.ToLower(service)
|
|
||||||
if len(users) > 0 {
|
|
||||||
// 创建副本,避免外部修改影响内部数据
|
|
||||||
usersCopy := make([]string, len(users))
|
|
||||||
copy(usersCopy, users)
|
|
||||||
sd.userDict[service] = usersCopy
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddUsersToService 向指定服务添加用户名
|
|
||||||
func (sd *ServiceDictionary) AddUsersToService(service string, users []string) {
|
|
||||||
sd.mu.Lock()
|
|
||||||
defer sd.mu.Unlock()
|
|
||||||
|
|
||||||
service = strings.ToLower(service)
|
|
||||||
if existing, exists := sd.userDict[service]; exists {
|
|
||||||
// 合并并去重
|
|
||||||
userSet := make(map[string]struct{})
|
|
||||||
for _, user := range existing {
|
|
||||||
userSet[user] = struct{}{}
|
|
||||||
}
|
|
||||||
for _, user := range users {
|
|
||||||
if user != "" {
|
|
||||||
userSet[user] = struct{}{}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 转换回切片
|
|
||||||
result := make([]string, 0, len(userSet))
|
|
||||||
for user := range userSet {
|
|
||||||
result = append(result, user)
|
|
||||||
}
|
|
||||||
sd.userDict[service] = result
|
|
||||||
} else {
|
|
||||||
// 新服务,直接设置
|
|
||||||
sd.SetUserDict(service, users)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetAllUserDicts 获取所有服务的用户字典
|
// GetAllUserDicts 获取所有服务的用户字典
|
||||||
func (sd *ServiceDictionary) GetAllUserDicts() map[string][]string {
|
func (sd *ServiceDictionary) GetAllUserDicts() map[string][]string {
|
||||||
sd.mu.RLock()
|
sd.mu.RLock()
|
||||||
@ -130,92 +66,6 @@ func (sd *ServiceDictionary) GetPasswords() []string {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetPasswords 设置密码字典
|
|
||||||
func (sd *ServiceDictionary) SetPasswords(passwords []string) {
|
|
||||||
sd.mu.Lock()
|
|
||||||
defer sd.mu.Unlock()
|
|
||||||
|
|
||||||
if len(passwords) > 0 {
|
|
||||||
// 创建副本
|
|
||||||
passwordsCopy := make([]string, len(passwords))
|
|
||||||
copy(passwordsCopy, passwords)
|
|
||||||
sd.passwords = passwordsCopy
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddPasswords 添加密码到字典
|
|
||||||
func (sd *ServiceDictionary) AddPasswords(passwords []string) {
|
|
||||||
sd.mu.Lock()
|
|
||||||
defer sd.mu.Unlock()
|
|
||||||
|
|
||||||
// 使用map去重
|
|
||||||
passwordSet := make(map[string]struct{})
|
|
||||||
for _, pwd := range sd.passwords {
|
|
||||||
passwordSet[pwd] = struct{}{}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pwd := range passwords {
|
|
||||||
if pwd != "" {
|
|
||||||
passwordSet[pwd] = struct{}{}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 转换回切片
|
|
||||||
result := make([]string, 0, len(passwordSet))
|
|
||||||
for pwd := range passwordSet {
|
|
||||||
result = append(result, pwd)
|
|
||||||
}
|
|
||||||
sd.passwords = result
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetServiceNames 获取所有支持的服务名称
|
|
||||||
func (sd *ServiceDictionary) GetServiceNames() []string {
|
|
||||||
sd.mu.RLock()
|
|
||||||
defer sd.mu.RUnlock()
|
|
||||||
|
|
||||||
services := make([]string, 0, len(sd.userDict))
|
|
||||||
for service := range sd.userDict {
|
|
||||||
services = append(services, service)
|
|
||||||
}
|
|
||||||
return services
|
|
||||||
}
|
|
||||||
|
|
||||||
// HasService 检查是否支持指定服务
|
|
||||||
func (sd *ServiceDictionary) HasService(service string) bool {
|
|
||||||
sd.mu.RLock()
|
|
||||||
defer sd.mu.RUnlock()
|
|
||||||
|
|
||||||
_, exists := sd.userDict[strings.ToLower(service)]
|
|
||||||
return exists
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetUserCount 获取指定服务的用户数量
|
|
||||||
func (sd *ServiceDictionary) GetUserCount(service string) int {
|
|
||||||
sd.mu.RLock()
|
|
||||||
defer sd.mu.RUnlock()
|
|
||||||
|
|
||||||
if users, exists := sd.userDict[strings.ToLower(service)]; exists {
|
|
||||||
return len(users)
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetPasswordCount 获取密码数量
|
|
||||||
func (sd *ServiceDictionary) GetPasswordCount() int {
|
|
||||||
sd.mu.RLock()
|
|
||||||
defer sd.mu.RUnlock()
|
|
||||||
|
|
||||||
return len(sd.passwords)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ResetToDefaults 重置为默认配置
|
|
||||||
func (sd *ServiceDictionary) ResetToDefaults() {
|
|
||||||
sd.mu.Lock()
|
|
||||||
defer sd.mu.Unlock()
|
|
||||||
|
|
||||||
sd.userDict = getDefaultUserDict()
|
|
||||||
sd.passwords = getDefaultPasswords()
|
|
||||||
}
|
|
||||||
|
|
||||||
// 全局服务字典实例
|
// 全局服务字典实例
|
||||||
var (
|
var (
|
||||||
@ -229,4 +79,4 @@ func GetGlobalServiceDict() *ServiceDictionary {
|
|||||||
globalServiceDict = NewServiceDictionary()
|
globalServiceDict = NewServiceDictionary()
|
||||||
})
|
})
|
||||||
return globalServiceDict
|
return globalServiceDict
|
||||||
}
|
}
|
@ -152,27 +152,3 @@ type Config struct {
|
|||||||
LastUpdated time.Time `json:"last_updated"`
|
LastUpdated time.Time `json:"last_updated"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewConfig 创建默认配置
|
|
||||||
func NewConfig() *Config {
|
|
||||||
return &Config{
|
|
||||||
Application: &ApplicationConfig{
|
|
||||||
Version: Version{
|
|
||||||
Major: VersionMajor,
|
|
||||||
Minor: VersionMinor,
|
|
||||||
Patch: VersionPatch,
|
|
||||||
Full: VersionFull,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
ScanTarget: &ScanTargetConfig{},
|
|
||||||
Credential: &CredentialConfig{},
|
|
||||||
ScanControl: &ScanControlConfig{},
|
|
||||||
InputFile: &InputFileConfig{},
|
|
||||||
WebScan: &WebScanConfig{},
|
|
||||||
VulnExploit: &VulnExploitConfig{},
|
|
||||||
BruteForce: &BruteForceConfig{},
|
|
||||||
Display: &DisplayConfig{},
|
|
||||||
Output: &OutputConfig{},
|
|
||||||
Network: &NetworkConfig{},
|
|
||||||
LastUpdated: time.Now(),
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,49 +1,5 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
// 版本相关常量
|
|
||||||
const (
|
|
||||||
// 版本信息
|
|
||||||
VersionMajor = 2
|
|
||||||
VersionMinor = 0
|
|
||||||
VersionPatch = 2
|
|
||||||
VersionFull = "2.0.2"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 默认扫描参数常量
|
|
||||||
const (
|
|
||||||
// 线程数配置
|
|
||||||
DefaultThreadNum = 600 // 默认扫描线程数
|
|
||||||
DefaultModuleThreadNum = 10 // 默认模块线程数
|
|
||||||
|
|
||||||
// 超时配置
|
|
||||||
DefaultTimeout = 3 // 默认超时时间(秒)
|
|
||||||
DefaultGlobalTimeout = 300 // 默认全局超时时间(秒) - 5分钟
|
|
||||||
DefaultWebTimeout = 5 // 默认Web超时时间(秒)
|
|
||||||
|
|
||||||
// 重试配置
|
|
||||||
DefaultMaxRetries = 3 // 默认最大重试次数
|
|
||||||
|
|
||||||
// 其他配置
|
|
||||||
DefaultPocNum = 20 // 默认POC并发数
|
|
||||||
)
|
|
||||||
|
|
||||||
// 显示相关常量
|
|
||||||
const (
|
|
||||||
DefaultLogLevel = "SUCCESS"
|
|
||||||
DefaultLanguage = "zh"
|
|
||||||
DefaultOutputFormat = "txt"
|
|
||||||
DefaultOutputFile = "result.txt"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 网络相关常量
|
|
||||||
const (
|
|
||||||
// 默认User-Agent
|
|
||||||
DefaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
|
|
||||||
|
|
||||||
// 默认Accept头部
|
|
||||||
DefaultAccept = "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"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 默认探测器列表
|
// 默认探测器列表
|
||||||
var DefaultProbeMap = []string{
|
var DefaultProbeMap = []string{
|
||||||
"GenericLines",
|
"GenericLines",
|
||||||
@ -234,13 +190,3 @@ var DefaultPasswords = []string{
|
|||||||
"2wsx@WSX", "qwe123!@#", "Aa123456!", "A123456s!", "sa123456",
|
"2wsx@WSX", "qwe123!@#", "Aa123456!", "A123456s!", "sa123456",
|
||||||
"1q2w3e", "Charge123", "Aa123456789", "elastic123",
|
"1q2w3e", "Charge123", "Aa123456789", "elastic123",
|
||||||
}
|
}
|
||||||
|
|
||||||
// 默认通用用户名(当没有找到特定服务用户名时使用)
|
|
||||||
var DefaultGenericUsers = []string{"admin", "root", "test", "user"}
|
|
||||||
|
|
||||||
// 配置验证相关常量
|
|
||||||
const (
|
|
||||||
MaxThreadNumWarning = 1000 // 线程数警告阈值
|
|
||||||
MinTimeoutWarning = 1 // 最小超时时间警告阈值
|
|
||||||
MinGlobalTimeout = 60 // 最小全局超时时间
|
|
||||||
)
|
|
Loading…
Reference in New Issue
Block a user