mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-23 03:31:53 +08:00
fix(parsers): 修复带横杠域名被误识别为IP范围的问题
如 111-555.sss.com 这类域名因包含 - 被错误解析为 IP 范围, 添加 looksLikeIPRange() 检查,只有 - 前是有效 IP 才走范围解析
This commit is contained in:
@@ -444,6 +444,16 @@ func TestParseIP_SingleIP(t *testing.T) {
|
||||
"example.com",
|
||||
[]string{"example.com"},
|
||||
},
|
||||
{
|
||||
"带横杠的域名",
|
||||
"111-555.sss.com",
|
||||
[]string{"111-555.sss.com"},
|
||||
},
|
||||
{
|
||||
"多段横杠域名",
|
||||
"my-test-server.example.com",
|
||||
[]string{"my-test-server.example.com"},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
|
||||
@@ -112,7 +112,7 @@ func parseHostString(host string) ([]string, error) {
|
||||
return nil, fmt.Errorf("CIDR解析失败 %s: %w", h, err)
|
||||
}
|
||||
hosts = append(hosts, cidrHosts...)
|
||||
case strings.Contains(h, "-") && !strings.Contains(h, ":"):
|
||||
case strings.Contains(h, "-") && !strings.Contains(h, ":") && looksLikeIPRange(h):
|
||||
rangeHosts, err := parseIPRangeString(h, SimpleMaxHosts)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("IP范围解析失败 %s: %w", h, err)
|
||||
@@ -316,6 +316,19 @@ func parseIPCIDR(cidr string, maxTargets int) ([]string, error) {
|
||||
return ips, nil
|
||||
}
|
||||
|
||||
// looksLikeIPRange 检查字符串是否像IP范围格式
|
||||
// 如 192.168.1.1-100 或 192.168.1.1-192.168.1.100
|
||||
// 而不是像 111-555.sss.com 这种域名
|
||||
func looksLikeIPRange(s string) bool {
|
||||
idx := strings.Index(s, "-")
|
||||
if idx == -1 {
|
||||
return false
|
||||
}
|
||||
// 检查 - 前面的部分是否是有效IP
|
||||
startPart := s[:idx]
|
||||
return net.ParseIP(startPart) != nil
|
||||
}
|
||||
|
||||
// parseIPRangeString 解析IP范围字符串
|
||||
func parseIPRangeString(rangeStr string, maxTargets int) ([]string, error) {
|
||||
parts := strings.Split(rangeStr, "-")
|
||||
|
||||
Reference in New Issue
Block a user