refactor: 优化控制台输出格式

- 去掉时间戳,保留[*][+]前缀
- Web输出合并WebTitle和WebFinger为一行
- 有指纹显示绿色[+],无指纹显示白色[*]
- 格式: code:xxx len:xxx title:xxx server:xxx [指纹]
- 服务探测格式: [Product:xxx ||Version:xxx] Banner:(xxx)
- 字段对齐,输出更清爽
This commit is contained in:
ZacharyZcR
2026-01-20 12:05:01 +08:00
parent e86dd1a231
commit 4ef21f3841
3 changed files with 48 additions and 31 deletions
+24 -10
View File
@@ -311,23 +311,37 @@ func isResourceExhaustedError(err error) bool {
}
// buildServiceLogMessage 构建服务识别的日志信息
// 格式: addr service banner (简洁单行,方便复制)
// 格式: addr service [Product:xxx ||Version:xxx] Banner:(xxx)
func buildServiceLogMessage(addr string, serviceInfo *ServiceInfo, isWeb bool) string {
var parts []string
parts = append(parts, addr)
var msg strings.Builder
msg.WriteString(fmt.Sprintf("%-21s", addr))
if serviceInfo.Name != "unknown" {
parts = append(parts, serviceInfo.Name)
msg.WriteString(fmt.Sprintf(" %-8s", serviceInfo.Name))
}
// Banner 优先,其次是版本信息
if len(serviceInfo.Banner) > 0 && len(serviceInfo.Banner) < 100 {
parts = append(parts, strings.TrimSpace(serviceInfo.Banner))
} else if serviceInfo.Version != "" {
parts = append(parts, serviceInfo.Version)
// 构建 [Product:xxx ||Version:xxx] 格式
var info []string
if product, ok := serviceInfo.Extras["product"]; ok && product != "" {
info = append(info, fmt.Sprintf("Product:%s", product))
}
if serviceInfo.Version != "" {
info = append(info, fmt.Sprintf("Version:%s", serviceInfo.Version))
}
if len(info) > 0 {
msg.WriteString(fmt.Sprintf(" [%s]", strings.Join(info, " ||")))
}
return strings.Join(parts, " ")
// Banner 信息
if len(serviceInfo.Banner) > 0 {
banner := strings.TrimSpace(serviceInfo.Banner)
if len(banner) > 80 {
banner = banner[:80] + "..."
}
msg.WriteString(fmt.Sprintf(" Banner:(%s)", banner))
}
return msg.String()
}
// scanSinglePort 扫描单个端口并进行服务识别(重构后的简洁版本)