mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-26 13:11: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",
|
"example.com",
|
||||||
[]string{"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 {
|
for _, tt := range tests {
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ func parseHostString(host string) ([]string, error) {
|
|||||||
return nil, fmt.Errorf("CIDR解析失败 %s: %w", h, err)
|
return nil, fmt.Errorf("CIDR解析失败 %s: %w", h, err)
|
||||||
}
|
}
|
||||||
hosts = append(hosts, cidrHosts...)
|
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)
|
rangeHosts, err := parseIPRangeString(h, SimpleMaxHosts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("IP范围解析失败 %s: %w", h, err)
|
return nil, fmt.Errorf("IP范围解析失败 %s: %w", h, err)
|
||||||
@@ -316,6 +316,19 @@ func parseIPCIDR(cidr string, maxTargets int) ([]string, error) {
|
|||||||
return ips, nil
|
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范围字符串
|
// parseIPRangeString 解析IP范围字符串
|
||||||
func parseIPRangeString(rangeStr string, maxTargets int) ([]string, error) {
|
func parseIPRangeString(rangeStr string, maxTargets int) ([]string, error) {
|
||||||
parts := strings.Split(rangeStr, "-")
|
parts := strings.Split(rangeStr, "-")
|
||||||
|
|||||||
Reference in New Issue
Block a user