diff --git a/plugins/services/postgresql.go b/plugins/services/postgresql.go index a904188..f4353f3 100644 --- a/plugins/services/postgresql.go +++ b/plugins/services/postgresql.go @@ -114,17 +114,28 @@ func (p *PostgreSQLPlugin) identifyService(ctx context.Context, info *common.Hos err = db.PingContext(pingCtx) + // 改进识别逻辑:任何PostgreSQL相关的响应都认为是有效服务 var banner string - if err != nil && strings.Contains(strings.ToLower(err.Error()), "postgres") { - banner = "PostgreSQL" - } else if err == nil { - banner = "PostgreSQL" - } else { - return &ScanResult{ - Success: false, - Service: "postgresql", - Error: fmt.Errorf("无法识别为PostgreSQL服务"), + if err != nil { + errMsg := strings.ToLower(err.Error()) + // PostgreSQL常见错误关键词 + if strings.Contains(errMsg, "postgres") || + strings.Contains(errMsg, "authentication") || + strings.Contains(errMsg, "database") || + strings.Contains(errMsg, "password") || + strings.Contains(errMsg, "role") || + strings.Contains(errMsg, "user") || + strings.Contains(errMsg, "pq:") { + banner = "PostgreSQL" + } else { + return &ScanResult{ + Success: false, + Service: "postgresql", + Error: fmt.Errorf("无法识别为PostgreSQL服务: %s", err.Error()), + } } + } else { + banner = "PostgreSQL (连接成功)" } common.LogSuccess(fmt.Sprintf("PostgreSQL %s %s", target, banner))