From 022461f407439179be53b158d5a008061e578f01 Mon Sep 17 00:00:00 2001 From: ZacharyZcR Date: Thu, 7 Aug 2025 09:45:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0-m=20icmp=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E6=94=AF=E6=8C=81=E5=AD=98=E6=B4=BB=E6=8E=A2=E6=B5=8B?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增功能: - 支持通过-m icmp参数启用存活探测功能 - 与现有-ao参数功能等价,提供更直观的使用方式 - 添加参数冲突检查,当同时使用-ao和-m icmp时给出友好提示 - 完善参数验证,将icmp添加到有效扫描模式列表 技术实现: - 扩展ValidationParser支持icmp模式验证 - 修改Scanner策略选择逻辑支持icmp模式 - 新增参数冲突检查函数checkParameterConflicts - 更新帮助信息和国际化消息支持 向后兼容: - 保持-ao参数原有功能不变 - 两种参数方式都能正确触发存活探测 - 支持中英文双语界面和提示信息 --- Common/Flag.go | 11 +++++++++++ Common/i18n/messages/flag.go | 8 ++++++-- Common/parsers/ValidationParser.go | 2 +- Core/Scanner.go | 2 +- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Common/Flag.go b/Common/Flag.go index a772ad0..b99c6cb 100644 --- a/Common/Flag.go +++ b/Common/Flag.go @@ -255,6 +255,9 @@ func parseCommandLineArgs() { // 解析命令行参数 flag.Parse() + + // 检查参数冲突 + checkParameterConflicts() } // parseEnvironmentArgs 安全地解析环境变量中的参数 @@ -338,3 +341,11 @@ func shouldShowHelp(Info *HostInfo) bool { return false } + +// checkParameterConflicts 检查参数冲突和兼容性 +func checkParameterConflicts() { + // 检查 -ao 和 -m icmp 同时指定的情况(向后兼容提示) + if AliveOnly && ScanMode == "icmp" { + LogBase(i18n.GetText("param_conflict_ao_icmp_both")) + } +} diff --git a/Common/i18n/messages/flag.go b/Common/i18n/messages/flag.go index b042be5..7816ac0 100644 --- a/Common/i18n/messages/flag.go +++ b/Common/i18n/messages/flag.go @@ -35,8 +35,8 @@ var FlagMessages = map[string]map[string]string{ LangEN: "Ports file", }, "flag_scan_mode": { - LangZH: "扫描模式: all, portscan, tcpscan, udpscan等", - LangEN: "Scan mode: all, portscan, tcpscan, udpscan, etc.", + LangZH: "扫描模式: all, portscan, tcpscan, udpscan, icmp等", + LangEN: "Scan mode: all, portscan, tcpscan, udpscan, icmp, etc.", }, "flag_thread_num": { LangZH: "端口扫描线程数", @@ -74,6 +74,10 @@ var FlagMessages = map[string]map[string]string{ LangZH: "仅进行存活探测", LangEN: "Alive detection only", }, + "param_conflict_ao_icmp_both": { + LangZH: "提示: 同时指定了 -ao 和 -m icmp,两者功能相同,使用存活探测模式", + LangEN: "Note: Both -ao and -m icmp specified, both enable alive detection mode", + }, "flag_username": { LangZH: "用户名", LangEN: "Username", diff --git a/Common/parsers/ValidationParser.go b/Common/parsers/ValidationParser.go index 6ef3c68..2182536 100644 --- a/Common/parsers/ValidationParser.go +++ b/Common/parsers/ValidationParser.go @@ -273,7 +273,7 @@ func (vp *ValidationParser) checkPerformance(input *ValidationInput, config *Par // validateScanMode 验证扫描模式 func (vp *ValidationParser) validateScanMode(scanMode string) error { - validModes := []string{"all", "main", "web", "db", "service", "top1000", "custom"} + validModes := []string{"all", "main", "web", "db", "service", "top1000", "custom", "icmp"} for _, mode := range validModes { if scanMode == mode { diff --git a/Core/Scanner.go b/Core/Scanner.go index 8ced7f9..3003871 100644 --- a/Core/Scanner.go +++ b/Core/Scanner.go @@ -24,7 +24,7 @@ type ScanStrategy interface { // selectStrategy 根据扫描配置选择适当的扫描策略 func selectStrategy(info common.HostInfo) ScanStrategy { switch { - case common.AliveOnly: + case common.AliveOnly || common.ScanMode == "icmp": common.LogBase(i18n.GetText("scan_mode_alive_selected")) return NewAliveScanStrategy() case common.LocalMode: