Files
fscan/common/parsers/constants.go
T
ZacharyZcR 71b92d4408 feat: v2.1.0 核心重构与功能增强
## 架构重构
- 全局变量消除,迁移至 Config/State 对象
- SMB 插件融合(smb/smb2/smbghost/smbinfo)
- 服务探测重构,实现 Nmap 风格 fallback 机制
- 输出系统重构,TXT 实时刷盘 + 双写机制
- i18n 框架升级至 go-i18n

## 性能优化
- 正则表达式预编译
- 内存优化 map[string]struct{}
- 并发指纹匹配
- SOCKS5 连接复用
- 滑动窗口调度 + 自适应线程池

## 新功能
- Web 管理界面
- 多格式 POC 适配(xray/afrog)
- 增强指纹库(3139条)
- Favicon hash 指纹识别
- 插件选择性编译(Build Tags)
- fscan-lab 靶场环境
- 默认端口扩展(62→133)

## 构建系统
- 添加 no_local tag 支持排除本地插件
- 多版本构建:fscan/fscan-nolocal/fscan-web
- CI 添加 snapshot 模式支持仅测试构建

## Bug 修复
- 修复 120+ 个问题,包括 RDP panic、批量扫描漏报、
  JSON 输出格式、Redis 检测、Context 超时等

## 测试增强
- 单元测试覆盖率 74-100%
- 并发安全测试
- 集成测试(Web/端口/服务/SSH/ICMP)
2026-01-11 20:16:23 +08:00

348 lines
12 KiB
Go

package parsers
import (
"regexp"
"time"
)
/*
constants.go - 解析器系统常量定义
统一管理common/parsers包中的所有常量,便于查看和编辑。
*/
// =============================================================================
// 默认解析器选项常量 (从Types.go迁移)
// =============================================================================
const (
// DefaultEnableConcurrency 解析器默认启用并发
DefaultEnableConcurrency = true
// DefaultMaxWorkers 默认最大工作线程数
DefaultMaxWorkers = 4
// DefaultTimeout 默认超时时间
DefaultTimeout = 30 * time.Second
// DefaultEnableValidation 默认启用验证
DefaultEnableValidation = true
// DefaultIgnoreErrors 默认不忽略错误
DefaultIgnoreErrors = false
// DefaultFileMaxSize 默认文件最大大小100MB
DefaultFileMaxSize = 100 * 1024 * 1024
// DefaultMaxTargets 默认最大目标数量10K
DefaultMaxTargets = 10000
)
// =============================================================================
// 文件读取器常量 (从FileReader.go迁移)
// =============================================================================
const (
// DefaultMaxCacheSize 默认最大缓存大小
DefaultMaxCacheSize = 10
// DefaultEnableCache 默认启用缓存
DefaultEnableCache = true
// DefaultFileReaderMaxFileSize 文件读取器默认最大文件大小50MB
DefaultFileReaderMaxFileSize = 50 * 1024 * 1024
// DefaultFileReaderTimeout 文件读取器默认超时时间
DefaultFileReaderTimeout = 30 * time.Second
// DefaultFileReaderEnableValidation 文件读取器默认启用验证
DefaultFileReaderEnableValidation = true
// DefaultTrimSpace 默认去除空格
DefaultTrimSpace = true
// DefaultSkipEmpty 默认跳过空行
DefaultSkipEmpty = true
// DefaultSkipComments 默认跳过注释
DefaultSkipComments = true
// MaxLineLength 单行最大字符数
MaxLineLength = 1000
// MaxValidRune 最小有效字符ASCII值
MaxValidRune = 32
// TabRune Tab字符
TabRune = 9
// NewlineRune 换行符
NewlineRune = 10
// CarriageReturnRune 回车符
CarriageReturnRune = 13
// CommentPrefix 注释前缀
CommentPrefix = "#"
)
// =============================================================================
// 凭据解析器常量 (从CredentialParser.go迁移)
// =============================================================================
const (
// DefaultMaxUsernameLength 凭据验证限制 - 默认最大用户名长度
DefaultMaxUsernameLength = 64
// DefaultMaxPasswordLength 默认最大密码长度
DefaultMaxPasswordLength = 128
// DefaultAllowEmptyPasswords 默认允许空密码
DefaultAllowEmptyPasswords = true
// DefaultValidateHashes 默认验证哈希
DefaultValidateHashes = true
// DefaultDeduplicateUsers 默认去重用户
DefaultDeduplicateUsers = true
// DefaultDeduplicatePasswords 默认去重密码
DefaultDeduplicatePasswords = true
// HashRegexPattern MD5哈希正则表达式
HashRegexPattern = `^[a-fA-F0-9]{32}$`
// HashValidationLength 有效哈希长度
HashValidationLength = 32
// InvalidUsernameChars 无效用户名字符
InvalidUsernameChars = "\r\n\t"
)
// =============================================================================
// 网络解析器常量 (从NetworkParser.go迁移)
// =============================================================================
const (
// DefaultValidateProxies 网络配置默认值 - 默认验证代理
DefaultValidateProxies = true
// DefaultAllowInsecure 默认不允许不安全连接
DefaultAllowInsecure = false
// DefaultNetworkTimeout 默认网络超时时间
DefaultNetworkTimeout = 30 * time.Second
// DefaultWebTimeout 默认Web超时时间
DefaultWebTimeout = 10 * time.Second
// DefaultUserAgent 默认用户代理字符串
DefaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
// MaxTimeoutSeconds 超时限制 - 最大超时5分钟
MaxTimeoutSeconds = 300
// MaxWebTimeoutSeconds 最大Web超时2分钟
MaxWebTimeoutSeconds = 120
// MaxUserAgentLength 字符串长度限制 - 最大用户代理长度
MaxUserAgentLength = 512
// MaxCookieLength 最大Cookie长度
MaxCookieLength = 4096
// ProxyShortcut1 代理快捷配置 - 快捷方式1
ProxyShortcut1 = "1"
// ProxyShortcut2 快捷方式2
ProxyShortcut2 = "2"
// ProxyShortcutHTTP 快捷方式HTTP代理地址
ProxyShortcutHTTP = "http://127.0.0.1:8080"
// ProxyShortcutSOCKS5 快捷方式SOCKS5代理地址
ProxyShortcutSOCKS5 = "socks5://127.0.0.1:1080"
// ProtocolHTTP 协议支持 - HTTP协议
ProtocolHTTP = "http"
// ProtocolHTTPS HTTPS协议
ProtocolHTTPS = "https"
// ProtocolSOCKS5 SOCKS5协议
ProtocolSOCKS5 = "socks5"
// ProtocolPrefix 协议前缀分隔符
ProtocolPrefix = "://"
// SOCKS5Prefix SOCKS5协议前缀
SOCKS5Prefix = "socks5://"
// HTTPPrefix HTTP协议前缀
HTTPPrefix = "http://"
// MinPort 端口范围 - 最小端口号
MinPort = 1
// MaxPort 最大端口号
MaxPort = 65535
// InvalidUserAgentChars 无效字符集 - 用户代理中的非法字符
InvalidUserAgentChars = "\r\n\t"
)
// GetCommonBrowsers 获取常见浏览器标识列表
func GetCommonBrowsers() []string {
return []string{
"Mozilla", "Chrome", "Safari", "Firefox", "Edge", "Opera",
"AppleWebKit", "Gecko", "Trident", "Presto",
}
}
// =============================================================================
// 目标解析器常量 (从TargetParser.go迁移)
// =============================================================================
const (
// DefaultTargetMaxTargets 目标解析器默认配置 - 默认最大目标数量
DefaultTargetMaxTargets = 10000
// DefaultMaxPortRange 默认最大端口范围(支持全端口扫描)
DefaultMaxPortRange = 65535
// DefaultAllowPrivateIPs 默认允许私有IP
DefaultAllowPrivateIPs = true
// DefaultAllowLoopback 默认允许回环地址
DefaultAllowLoopback = true
// DefaultValidateURLs 默认验证URL
DefaultValidateURLs = true
// DefaultResolveDomains 默认解析域名
DefaultResolveDomains = false
// IPv4RegexPattern 正则表达式模式 - IPv4地址正则
IPv4RegexPattern = `^(\d{1,3}\.){3}\d{1,3}$`
// PortRangeRegexPattern 端口范围正则
PortRangeRegexPattern = `^(\d+)(-(\d+))?$`
// URLValidationRegexPattern URL验证正则
URLValidationRegexPattern = `^https?://[^\s]+$`
// DomainRegexPattern 域名正则
DomainRegexPattern = `^[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?)*$`
// CookieRegexPattern Cookie正则
CookieRegexPattern = `^[^=;\s]+(=[^;\s]*)?(\s*;\s*[^=;\s]+(=[^;\s]*)?)*$`
// MaxIPv4OctetValue IP地址限制 - IPv4八位组最大值
MaxIPv4OctetValue = 255
// IPv4OctetCount IPv4八位组数量
IPv4OctetCount = 4
// MaxDomainLength 域名最大长度
MaxDomainLength = 253
// PrivateNetwork192 CIDR网段简写 - 192私有网络前缀
PrivateNetwork192 = "192"
// PrivateNetwork172 172私有网络前缀
PrivateNetwork172 = "172"
// PrivateNetwork10 10私有网络前缀
PrivateNetwork10 = "10"
// PrivateNetwork192CIDR 192私有网络CIDR
PrivateNetwork192CIDR = "192.168.0.0/16"
// PrivateNetwork172CIDR 172私有网络CIDR
PrivateNetwork172CIDR = "172.16.0.0/12"
// PrivateNetwork10CIDR 10私有网络CIDR
PrivateNetwork10CIDR = "10.0.0.0/8"
// Private172StartSecondOctet 私有网络范围 - 172网段起始第二段
Private172StartSecondOctet = 16
// Private172EndSecondOctet 172网段结束第二段
Private172EndSecondOctet = 31
// Private192SecondOctet 192网段第二段
Private192SecondOctet = 168
// Subnet8SamplingStep /8网段采样配置 - 采样步长
Subnet8SamplingStep = 32
// Subnet8ThirdOctetStep 第三段步长
Subnet8ThirdOctetStep = 10
// IPFirstOctetShift IP地址计算位移 - 第一段位移
IPFirstOctetShift = 24
// IPSecondOctetShift 第二段位移
IPSecondOctetShift = 16
// IPThirdOctetShift 第三段位移
IPThirdOctetShift = 8
// IPOctetMask 八位组掩码
IPOctetMask = 0xFF
)
// GetCommonSecondOctets 获取常用第二段IP
func GetCommonSecondOctets() []int {
return []int{0, 1, 2, 10, 100, 200, 254}
}
// =============================================================================
// 简化解析器常量 (从Simple.go迁移)
// =============================================================================
const (
// SimpleMaxHosts 端口和主机限制 - 最大主机数量
SimpleMaxHosts = 10000
// DefaultGatewayLastOctet 网段简写展开 - 默认网关最后一段
DefaultGatewayLastOctet = 1
// RouterSwitchLastOctet 路由器/交换机最后一段
RouterSwitchLastOctet = 254
// SamplingMinHost 采样最小主机号
SamplingMinHost = 2
// SamplingMaxHost 采样最大主机号
SamplingMaxHost = 253
)
// 端口组定义已迁移到 common/config/constants.go
// 此处保留引用函数以保持向后兼容
// =============================================================================
// 验证解析器常量 (从ValidationParser.go迁移)
// =============================================================================
const (
// DefaultMaxErrorCount 验证解析器默认配置 - 默认最大错误数
DefaultMaxErrorCount = 100
// DefaultStrictMode 默认严格模式
DefaultStrictMode = false
// DefaultAllowEmpty 默认允许空值
DefaultAllowEmpty = true
// DefaultCheckConflicts 默认检查冲突
DefaultCheckConflicts = true
// DefaultValidateTargets 默认验证目标
DefaultValidateTargets = true
// DefaultValidateNetwork 默认验证网络配置
DefaultValidateNetwork = true
// MaxTargetsThreshold 性能警告阈值 - 最大目标数量阈值
MaxTargetsThreshold = 100000
// PortCountWarningThreshold 端口数量警告阈值(超过此值时警告)
PortCountWarningThreshold = 5000
// MinTimeoutThreshold 最小超时阈值
MinTimeoutThreshold = 1 * time.Second
// MaxTimeoutThreshold 最大超时阈值
MaxTimeoutThreshold = 60 * time.Second
)
// =============================================================================
// 错误类型常量
// =============================================================================
const (
// ErrorTypeInputError 解析错误类型 - 输入错误
ErrorTypeInputError = "INPUT_ERROR"
// ErrorTypeFileError 文件错误
ErrorTypeFileError = "FILE_ERROR"
// ErrorTypeTimeout 超时错误
ErrorTypeTimeout = "TIMEOUT"
// ErrorTypeReadError 读取错误
ErrorTypeReadError = "READ_ERROR"
// ErrorTypeUsernameError 用户名错误
ErrorTypeUsernameError = "USERNAME_ERROR"
// ErrorTypePasswordError 密码错误
ErrorTypePasswordError = "PASSWORD_ERROR"
// ErrorTypeHashError 哈希错误
ErrorTypeHashError = "HASH_ERROR"
// ErrorTypeProxyError 代理错误
ErrorTypeProxyError = "PROXY_ERROR"
// ErrorTypeUserAgentError 用户代理错误
ErrorTypeUserAgentError = "USERAGENT_ERROR"
// ErrorTypeCookieError Cookie错误
ErrorTypeCookieError = "COOKIE_ERROR"
// ErrorTypeHostError 主机错误
ErrorTypeHostError = "HOST_ERROR"
// ErrorTypePortError 端口错误
ErrorTypePortError = "PORT_ERROR"
// ErrorTypeExcludePortError 排除端口错误
ErrorTypeExcludePortError = "EXCLUDE_PORT_ERROR"
)
// =============================================================================
// 编译时正则表达式
// =============================================================================
var (
// CompiledHashRegex 预编译的正则表达式,提高性能 - MD5哈希正则
CompiledHashRegex *regexp.Regexp
// CompiledIPv4Regex IPv4地址正则
CompiledIPv4Regex *regexp.Regexp
// CompiledPortRegex 端口范围正则
CompiledPortRegex *regexp.Regexp
// CompiledURLRegex URL验证正则
CompiledURLRegex *regexp.Regexp
// CompiledDomainRegex 域名正则
CompiledDomainRegex *regexp.Regexp
// CompiledCookieRegex Cookie正则
CompiledCookieRegex *regexp.Regexp
)
// 在包初始化时编译正则表达式
func init() {
CompiledHashRegex = regexp.MustCompile(HashRegexPattern)
CompiledIPv4Regex = regexp.MustCompile(IPv4RegexPattern)
CompiledPortRegex = regexp.MustCompile(PortRangeRegexPattern)
CompiledURLRegex = regexp.MustCompile(URLValidationRegexPattern)
CompiledDomainRegex = regexp.MustCompile(DomainRegexPattern)
CompiledCookieRegex = regexp.MustCompile(CookieRegexPattern)
}