fix: 修复实机测试发现的可靠性问题 (v2.2.0-rc.1)
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled

- UDP 插件在 -p 指定端口时被跳过
- Redis exploit 无超时保护 / readReply 吞没非超时错误
- service_probe 连接丢失后静默成功
- SNMP 探测成功但终端无输出
- SSH 爆破不稳定 (并发过高 + 自适应超时过短 + 限流误判)
- 进度条 isActive 竞态

新增 Config.ModuleTimeout() 协议级超时下限 (≥3s)
新增 ErrorTypeThrottle 限流错误分类
This commit is contained in:
ZacharyZcR
2026-06-14 22:23:52 +08:00
parent 3babff6863
commit 6d61b661f4
51 changed files with 285 additions and 257 deletions
+12 -8
View File
@@ -37,9 +37,10 @@ credential_tester.go - 统一凭据测试框架
type ErrorType int
const (
ErrorTypeAuth ErrorType = iota // 认证错误 - 密码错误,不重试
ErrorTypeNetwork // 网络错误 - 连接问题,可重试
ErrorTypeUnknown // 未知错误
ErrorTypeAuth ErrorType = iota // 认证错误 - 密码错误,不重试
ErrorTypeNetwork // 网络错误 - 连接不可达,可重试但计入连续失败
ErrorTypeThrottle // 限流错误 - 服务端拒绝连接(MaxStartups等),退避后重试,不计入连续失败
ErrorTypeUnknown // 未知错误
)
// =============================================================================
@@ -321,10 +322,13 @@ func workerTestCredentials(
return
}
// 跟踪连续网络错误
if errType == ErrorTypeNetwork {
// 跟踪连续网络错误(限流错误不计入,只做短暂退避)
switch errType {
case ErrorTypeNetwork:
consecutiveNetErrors++
} else {
case ErrorTypeThrottle:
time.Sleep(500 * time.Millisecond)
default:
consecutiveNetErrors = 0
}
}
@@ -374,8 +378,8 @@ func testCredentialWithRetry(
case ErrorTypeAuth:
// 认证错误(密码错误),不重试
return nil, result.ErrorType
case ErrorTypeNetwork, ErrorTypeUnknown:
// 网络错误或未知错误,可以重试(可能是服务端限流等临时问题)
case ErrorTypeNetwork, ErrorTypeThrottle, ErrorTypeUnknown:
// 网络/限流/未知错误,可以重试
if attempt < testConfig.MaxRetries-1 {
timer := time.NewTimer(testConfig.RetryDelay)
select {