mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-22 03:10:42 +08:00
fix: POC 扫描遇到非 HTTP 服务时不再输出错误日志
扫描非 HTTP 端口时 Go net/http 返回 malformed HTTP status code 等 transport 级错误,属于正常现象,不应作为 error 输出。 在 executeRule 和 clustersend 两个调用点统一过滤 transport 错误, 返回 false, nil 表示"目标不可达 = 无漏洞"。
This commit is contained in:
@@ -2,9 +2,11 @@ package lib
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/md5" //nolint:gosec // G501: MD5用于POC规则去重,非加密用途
|
"crypto/md5" //nolint:gosec // G501: MD5用于POC规则去重,非加密用途
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"math/rand" //nolint:gosec // G404: math/rand用于生成测试数据,非加密用途
|
"math/rand" //nolint:gosec // G404: math/rand用于生成测试数据,非加密用途
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
@@ -236,6 +238,9 @@ func executeRules(oReq *http.Request, p *Poc, variableMap map[string]interface{}
|
|||||||
resp, err := DoRequest(newRequest, rule.FollowRedirects, session)
|
resp, err := DoRequest(newRequest, rule.FollowRedirects, session)
|
||||||
newRequest = nil
|
newRequest = nil
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if isTransportError(err) {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -793,6 +798,9 @@ func clustersend(oReq *http.Request, variableMap map[string]interface{}, req *Re
|
|||||||
// 发送请求
|
// 发送请求
|
||||||
resp, err := DoRequest(newRequest, rule.FollowRedirects, session)
|
resp, err := DoRequest(newRequest, rule.FollowRedirects, session)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if isTransportError(err) {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
return false, fmt.Errorf("%s: %w", i18n.GetText("webscan_request_send_error"), err)
|
return false, fmt.Errorf("%s: %w", i18n.GetText("webscan_request_send_error"), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -936,3 +944,20 @@ func GetHeader(header map[string]string) string {
|
|||||||
builder.WriteString("\r\n")
|
builder.WriteString("\r\n")
|
||||||
return builder.String()
|
return builder.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isTransportError(err error) bool {
|
||||||
|
if err == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
var netErr *net.OpError
|
||||||
|
if errors.As(err, &netErr) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
s := err.Error()
|
||||||
|
return strings.Contains(s, "malformed HTTP") ||
|
||||||
|
strings.Contains(s, "transport connection broken") ||
|
||||||
|
strings.Contains(s, "connection reset") ||
|
||||||
|
strings.Contains(s, "connection refused") ||
|
||||||
|
strings.Contains(s, "i/o timeout") ||
|
||||||
|
strings.Contains(s, "EOF")
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user