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: