mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 14:06:44 +08:00
feat: 优化智能Web检测性能,避免重复调用
- 添加检测结果缓存机制,避免同一端口重复HTTP探测 - 使用线程安全的读写锁保护缓存访问 - 显著减少网络请求次数,提升扫描速度 - 支持多主机扫描的缓存键设计 - 保持架构兼容性的同时优化性能表现
This commit is contained in:
parent
b706fb46bb
commit
c6bfb5f064
@ -9,6 +9,7 @@ import (
|
|||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/shadow1ng/fscan/common"
|
"github.com/shadow1ng/fscan/common"
|
||||||
@ -24,6 +25,10 @@ type WebPortDetector struct {
|
|||||||
httpClient *http.Client
|
httpClient *http.Client
|
||||||
// HTTPS客户端
|
// HTTPS客户端
|
||||||
httpsClient *http.Client
|
httpsClient *http.Client
|
||||||
|
// 检测结果缓存(避免重复检测)
|
||||||
|
detectionCache map[string]bool
|
||||||
|
// 缓存互斥锁
|
||||||
|
cacheMutex sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewWebPortDetector 创建Web端口检测器
|
// NewWebPortDetector 创建Web端口检测器
|
||||||
@ -119,6 +124,7 @@ func NewWebPortDetector() *WebPortDetector {
|
|||||||
httpTimeout: timeout,
|
httpTimeout: timeout,
|
||||||
httpClient: httpClient,
|
httpClient: httpClient,
|
||||||
httpsClient: httpsClient,
|
httpsClient: httpsClient,
|
||||||
|
detectionCache: make(map[string]bool),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,9 +136,25 @@ func (w *WebPortDetector) IsWebService(host string, port int) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 智能路径:对非常见端口进行HTTP协议探测
|
// 2. 缓存检查:避免重复检测同一端口
|
||||||
|
cacheKey := fmt.Sprintf("%s:%d", host, port)
|
||||||
|
w.cacheMutex.RLock()
|
||||||
|
if cached, exists := w.detectionCache[cacheKey]; exists {
|
||||||
|
w.cacheMutex.RUnlock()
|
||||||
|
common.LogDebug(fmt.Sprintf("端口 %d 使用缓存结果: %v", port, cached))
|
||||||
|
return cached
|
||||||
|
}
|
||||||
|
w.cacheMutex.RUnlock()
|
||||||
|
|
||||||
|
// 3. 智能路径:对非常见端口进行HTTP协议探测
|
||||||
common.LogDebug(fmt.Sprintf("对端口 %d 进行智能Web检测", port))
|
common.LogDebug(fmt.Sprintf("对端口 %d 进行智能Web检测", port))
|
||||||
result := w.detectHTTPService(host, port)
|
result := w.detectHTTPService(host, port)
|
||||||
|
|
||||||
|
// 4. 缓存结果
|
||||||
|
w.cacheMutex.Lock()
|
||||||
|
w.detectionCache[cacheKey] = result
|
||||||
|
w.cacheMutex.Unlock()
|
||||||
|
|
||||||
common.LogDebug(fmt.Sprintf("端口 %d 智能检测结果: %v", port, result))
|
common.LogDebug(fmt.Sprintf("端口 %d 智能检测结果: %v", port, result))
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user