mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-25 20:51:52 +08:00
fix: 修复实机测试发现的可靠性问题 (v2.2.0-rc.1)
- UDP 插件在 -p 指定端口时被跳过 - Redis exploit 无超时保护 / readReply 吞没非超时错误 - service_probe 连接丢失后静默成功 - SNMP 探测成功但终端无输出 - SSH 爆破不稳定 (并发过高 + 自适应超时过短 + 限流误判) - 进度条 isActive 竞态 新增 Config.ModuleTimeout() 协议级超时下限 (≥3s) 新增 ErrorTypeThrottle 限流错误分类
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user