mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 14:06:44 +08:00
fix: 完善帮助信息国际化和参数验证机制
- 补充40+个缺失的flag参数翻译,实现完整中英文帮助信息 - 优化语言预处理机制,确保帮助信息生成前语言设置生效 - 新增智能帮助显示逻辑,无目标时自动显示帮助而非执行扫描 - 添加-help参数支持显式帮助请求 - 改善用户体验,避免误导性的默认扫描行为
This commit is contained in:
parent
09d578a476
commit
a00e7a735a
@ -126,6 +126,9 @@ func Banner() {
|
|||||||
func Flag(Info *HostInfo) {
|
func Flag(Info *HostInfo) {
|
||||||
Banner()
|
Banner()
|
||||||
|
|
||||||
|
// 预处理语言设置 - 在定义flag之前检查lang参数
|
||||||
|
preProcessLanguage()
|
||||||
|
|
||||||
// ═════════════════════════════════════════════════
|
// ═════════════════════════════════════════════════
|
||||||
// 目标配置参数
|
// 目标配置参数
|
||||||
// ═════════════════════════════════════════════════
|
// ═════════════════════════════════════════════════
|
||||||
@ -219,11 +222,21 @@ func Flag(Info *HostInfo) {
|
|||||||
flag.StringVar(&Shellcode, "sc", "", GetText("flag_shellcode"))
|
flag.StringVar(&Shellcode, "sc", "", GetText("flag_shellcode"))
|
||||||
flag.StringVar(&Language, "lang", "zh", GetText("flag_language"))
|
flag.StringVar(&Language, "lang", "zh", GetText("flag_language"))
|
||||||
|
|
||||||
|
// 帮助参数
|
||||||
|
var showHelp bool
|
||||||
|
flag.BoolVar(&showHelp, "help", false, GetText("flag_help"))
|
||||||
|
|
||||||
// 解析命令行参数
|
// 解析命令行参数
|
||||||
parseCommandLineArgs()
|
parseCommandLineArgs()
|
||||||
|
|
||||||
// 设置语言
|
// 设置语言
|
||||||
SetLanguage(Language)
|
SetLanguage(Language)
|
||||||
|
|
||||||
|
// 如果显示帮助或者没有提供目标,显示帮助信息并退出
|
||||||
|
if showHelp || shouldShowHelp(Info) {
|
||||||
|
flag.Usage()
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseCommandLineArgs 处理来自环境变量和命令行的参数
|
// parseCommandLineArgs 处理来自环境变量和命令行的参数
|
||||||
@ -284,3 +297,45 @@ func parseEnvironmentArgs(argsString string) ([]string, error) {
|
|||||||
|
|
||||||
return args, nil
|
return args, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// preProcessLanguage 预处理语言参数,在定义flag之前设置语言
|
||||||
|
func preProcessLanguage() {
|
||||||
|
// 遍历命令行参数查找-lang参数
|
||||||
|
for i, arg := range os.Args {
|
||||||
|
if arg == "-lang" && i+1 < len(os.Args) {
|
||||||
|
lang := os.Args[i+1]
|
||||||
|
if lang == "en" || lang == "zh" {
|
||||||
|
Language = lang
|
||||||
|
SetLanguage(lang)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else if strings.HasPrefix(arg, "-lang=") {
|
||||||
|
lang := strings.TrimPrefix(arg, "-lang=")
|
||||||
|
if lang == "en" || lang == "zh" {
|
||||||
|
Language = lang
|
||||||
|
SetLanguage(lang)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查环境变量
|
||||||
|
envLang := os.Getenv("FS_LANG")
|
||||||
|
if envLang == "en" || envLang == "zh" {
|
||||||
|
Language = envLang
|
||||||
|
SetLanguage(envLang)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// shouldShowHelp 检查是否应该显示帮助信息
|
||||||
|
func shouldShowHelp(Info *HostInfo) bool {
|
||||||
|
// 检查是否提供了扫描目标
|
||||||
|
hasTarget := Info.Host != "" || TargetURL != "" || LocalMode
|
||||||
|
|
||||||
|
// 如果没有提供任何扫描目标,则显示帮助
|
||||||
|
if !hasTarget {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
@ -516,6 +516,14 @@ var coreMessages = map[string]map[string]string{
|
|||||||
LangZH: "排除端口",
|
LangZH: "排除端口",
|
||||||
LangEN: "Exclude ports",
|
LangEN: "Exclude ports",
|
||||||
},
|
},
|
||||||
|
"flag_hosts_file": {
|
||||||
|
LangZH: "主机文件",
|
||||||
|
LangEN: "Hosts file",
|
||||||
|
},
|
||||||
|
"flag_ports_file": {
|
||||||
|
LangZH: "端口文件",
|
||||||
|
LangEN: "Ports file",
|
||||||
|
},
|
||||||
"flag_scan_mode": {
|
"flag_scan_mode": {
|
||||||
LangZH: "扫描模式: all, portscan, tcpscan, udpscan等",
|
LangZH: "扫描模式: all, portscan, tcpscan, udpscan等",
|
||||||
LangEN: "Scan mode: all, portscan, tcpscan, udpscan, etc.",
|
LangEN: "Scan mode: all, portscan, tcpscan, udpscan, etc.",
|
||||||
@ -528,6 +536,34 @@ var coreMessages = map[string]map[string]string{
|
|||||||
LangZH: "端口扫描超时时间",
|
LangZH: "端口扫描超时时间",
|
||||||
LangEN: "Port scan timeout",
|
LangEN: "Port scan timeout",
|
||||||
},
|
},
|
||||||
|
"flag_module_thread_num": {
|
||||||
|
LangZH: "模块线程数",
|
||||||
|
LangEN: "Module thread count",
|
||||||
|
},
|
||||||
|
"flag_global_timeout": {
|
||||||
|
LangZH: "全局超时时间",
|
||||||
|
LangEN: "Global timeout",
|
||||||
|
},
|
||||||
|
"flag_live_top": {
|
||||||
|
LangZH: "存活主机显示数量",
|
||||||
|
LangEN: "Live hosts display count",
|
||||||
|
},
|
||||||
|
"flag_disable_ping": {
|
||||||
|
LangZH: "禁用ping探测",
|
||||||
|
LangEN: "Disable ping detection",
|
||||||
|
},
|
||||||
|
"flag_use_ping": {
|
||||||
|
LangZH: "启用ping探测",
|
||||||
|
LangEN: "Enable ping detection",
|
||||||
|
},
|
||||||
|
"flag_enable_fingerprint": {
|
||||||
|
LangZH: "启用指纹识别",
|
||||||
|
LangEN: "Enable fingerprinting",
|
||||||
|
},
|
||||||
|
"flag_local_mode": {
|
||||||
|
LangZH: "本地扫描模式",
|
||||||
|
LangEN: "Local scan mode",
|
||||||
|
},
|
||||||
"flag_username": {
|
"flag_username": {
|
||||||
LangZH: "用户名",
|
LangZH: "用户名",
|
||||||
LangEN: "Username",
|
LangEN: "Username",
|
||||||
@ -536,19 +572,119 @@ var coreMessages = map[string]map[string]string{
|
|||||||
LangZH: "密码",
|
LangZH: "密码",
|
||||||
LangEN: "Password",
|
LangEN: "Password",
|
||||||
},
|
},
|
||||||
|
"flag_add_users": {
|
||||||
|
LangZH: "额外用户名",
|
||||||
|
LangEN: "Additional usernames",
|
||||||
|
},
|
||||||
|
"flag_add_passwords": {
|
||||||
|
LangZH: "额外密码",
|
||||||
|
LangEN: "Additional passwords",
|
||||||
|
},
|
||||||
|
"flag_users_file": {
|
||||||
|
LangZH: "用户名字典文件",
|
||||||
|
LangEN: "Username dictionary file",
|
||||||
|
},
|
||||||
|
"flag_passwords_file": {
|
||||||
|
LangZH: "密码字典文件",
|
||||||
|
LangEN: "Password dictionary file",
|
||||||
|
},
|
||||||
|
"flag_hash_file": {
|
||||||
|
LangZH: "哈希文件",
|
||||||
|
LangEN: "Hash file",
|
||||||
|
},
|
||||||
|
"flag_hash_value": {
|
||||||
|
LangZH: "哈希值",
|
||||||
|
LangEN: "Hash value",
|
||||||
|
},
|
||||||
|
"flag_domain": {
|
||||||
|
LangZH: "域名",
|
||||||
|
LangEN: "Domain name",
|
||||||
|
},
|
||||||
|
"flag_ssh_key": {
|
||||||
|
LangZH: "SSH私钥文件",
|
||||||
|
LangEN: "SSH private key file",
|
||||||
|
},
|
||||||
"flag_target_url": {
|
"flag_target_url": {
|
||||||
LangZH: "目标URL",
|
LangZH: "目标URL",
|
||||||
LangEN: "Target URL",
|
LangEN: "Target URL",
|
||||||
},
|
},
|
||||||
"flag_proxy": {
|
"flag_urls_file": {
|
||||||
|
LangZH: "URL文件",
|
||||||
|
LangEN: "URLs file",
|
||||||
|
},
|
||||||
|
"flag_cookie": {
|
||||||
|
LangZH: "HTTP Cookie",
|
||||||
|
LangEN: "HTTP Cookie",
|
||||||
|
},
|
||||||
|
"flag_web_timeout": {
|
||||||
|
LangZH: "Web超时时间",
|
||||||
|
LangEN: "Web timeout",
|
||||||
|
},
|
||||||
|
"flag_http_proxy": {
|
||||||
LangZH: "HTTP代理",
|
LangZH: "HTTP代理",
|
||||||
LangEN: "HTTP proxy",
|
LangEN: "HTTP proxy",
|
||||||
},
|
},
|
||||||
"flag_socks5": {
|
"flag_socks5_proxy": {
|
||||||
LangZH: "SOCKS5代理",
|
LangZH: "SOCKS5代理",
|
||||||
LangEN: "SOCKS5 proxy",
|
LangEN: "SOCKS5 proxy",
|
||||||
},
|
},
|
||||||
"flag_outputfile": {
|
"flag_poc_path": {
|
||||||
|
LangZH: "POC脚本路径",
|
||||||
|
LangEN: "POC script path",
|
||||||
|
},
|
||||||
|
"flag_poc_name": {
|
||||||
|
LangZH: "POC名称",
|
||||||
|
LangEN: "POC name",
|
||||||
|
},
|
||||||
|
"flag_poc_full": {
|
||||||
|
LangZH: "全量POC扫描",
|
||||||
|
LangEN: "Full POC scan",
|
||||||
|
},
|
||||||
|
"flag_dns_log": {
|
||||||
|
LangZH: "DNS日志记录",
|
||||||
|
LangEN: "DNS logging",
|
||||||
|
},
|
||||||
|
"flag_poc_num": {
|
||||||
|
LangZH: "POC并发数",
|
||||||
|
LangEN: "POC concurrency",
|
||||||
|
},
|
||||||
|
"flag_no_poc": {
|
||||||
|
LangZH: "禁用POC扫描",
|
||||||
|
LangEN: "Disable POC scan",
|
||||||
|
},
|
||||||
|
"flag_redis_file": {
|
||||||
|
LangZH: "Redis文件",
|
||||||
|
LangEN: "Redis file",
|
||||||
|
},
|
||||||
|
"flag_redis_shell": {
|
||||||
|
LangZH: "Redis Shell",
|
||||||
|
LangEN: "Redis Shell",
|
||||||
|
},
|
||||||
|
"flag_disable_redis": {
|
||||||
|
LangZH: "禁用Redis扫描",
|
||||||
|
LangEN: "Disable Redis scan",
|
||||||
|
},
|
||||||
|
"flag_redis_write_path": {
|
||||||
|
LangZH: "Redis写入路径",
|
||||||
|
LangEN: "Redis write path",
|
||||||
|
},
|
||||||
|
"flag_redis_write_content": {
|
||||||
|
LangZH: "Redis写入内容",
|
||||||
|
LangEN: "Redis write content",
|
||||||
|
},
|
||||||
|
"flag_redis_write_file": {
|
||||||
|
LangZH: "Redis写入文件",
|
||||||
|
LangEN: "Redis write file",
|
||||||
|
},
|
||||||
|
"flag_disable_brute": {
|
||||||
|
LangZH: "禁用暴力破解",
|
||||||
|
LangEN: "Disable brute force",
|
||||||
|
},
|
||||||
|
"flag_max_retries": {
|
||||||
|
LangZH: "最大重试次数",
|
||||||
|
LangEN: "Maximum retries",
|
||||||
|
},
|
||||||
|
"flag_output_file": {
|
||||||
LangZH: "输出文件",
|
LangZH: "输出文件",
|
||||||
LangEN: "Output file",
|
LangEN: "Output file",
|
||||||
},
|
},
|
||||||
@ -556,13 +692,37 @@ var coreMessages = map[string]map[string]string{
|
|||||||
LangZH: "输出格式: txt, json, csv",
|
LangZH: "输出格式: txt, json, csv",
|
||||||
LangEN: "Output format: txt, json, csv",
|
LangEN: "Output format: txt, json, csv",
|
||||||
},
|
},
|
||||||
|
"flag_disable_save": {
|
||||||
|
LangZH: "禁用结果保存",
|
||||||
|
LangEN: "Disable result saving",
|
||||||
|
},
|
||||||
|
"flag_silent_mode": {
|
||||||
|
LangZH: "静默模式",
|
||||||
|
LangEN: "Silent mode",
|
||||||
|
},
|
||||||
"flag_no_color": {
|
"flag_no_color": {
|
||||||
LangZH: "禁用颜色输出",
|
LangZH: "禁用颜色输出",
|
||||||
LangEN: "Disable color output",
|
LangEN: "Disable color output",
|
||||||
},
|
},
|
||||||
"flag_silent": {
|
"flag_log_level": {
|
||||||
LangZH: "静默模式",
|
LangZH: "日志级别",
|
||||||
LangEN: "Silent mode",
|
LangEN: "Log level",
|
||||||
|
},
|
||||||
|
"flag_show_progress": {
|
||||||
|
LangZH: "显示进度",
|
||||||
|
LangEN: "Show progress",
|
||||||
|
},
|
||||||
|
"flag_show_scan_plan": {
|
||||||
|
LangZH: "显示扫描计划",
|
||||||
|
LangEN: "Show scan plan",
|
||||||
|
},
|
||||||
|
"flag_slow_log_output": {
|
||||||
|
LangZH: "慢速日志输出",
|
||||||
|
LangEN: "Slow log output",
|
||||||
|
},
|
||||||
|
"flag_shellcode": {
|
||||||
|
LangZH: "Shellcode",
|
||||||
|
LangEN: "Shellcode",
|
||||||
},
|
},
|
||||||
"flag_language": {
|
"flag_language": {
|
||||||
LangZH: "语言: zh, en",
|
LangZH: "语言: zh, en",
|
||||||
|
Loading…
Reference in New Issue
Block a user