feat: 添加-m icmp参数支持存活探测模式

新增功能:
- 支持通过-m icmp参数启用存活探测功能
- 与现有-ao参数功能等价,提供更直观的使用方式
- 添加参数冲突检查,当同时使用-ao和-m icmp时给出友好提示
- 完善参数验证,将icmp添加到有效扫描模式列表

技术实现:
- 扩展ValidationParser支持icmp模式验证
- 修改Scanner策略选择逻辑支持icmp模式
- 新增参数冲突检查函数checkParameterConflicts
- 更新帮助信息和国际化消息支持

向后兼容:
- 保持-ao参数原有功能不变
- 两种参数方式都能正确触发存活探测
- 支持中英文双语界面和提示信息
This commit is contained in:
ZacharyZcR 2025-08-07 09:45:01 +08:00
parent 78f81610cd
commit 022461f407
4 changed files with 19 additions and 4 deletions

View File

@ -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"))
}
}

View File

@ -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",

View File

@ -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 {

View File

@ -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: