diff --git a/common/parsers/parse_test.go b/common/parsers/parse_test.go index 609fbad..4800a87 100644 --- a/common/parsers/parse_test.go +++ b/common/parsers/parse_test.go @@ -590,6 +590,18 @@ func TestParseIP_IPRange(t *testing.T) { } } +func TestParseIP_IPRangeLimit(t *testing.T) { + result, err := parseIPRangeString("192.168.1.1-5", 3) + if err != nil { + t.Fatalf("parseIPRangeString error = %v", err) + } + + expected := []string{"192.168.1.1", "192.168.1.2", "192.168.1.3"} + if !reflect.DeepEqual(result, expected) { + t.Errorf("parseIPRangeString limit = %v, want %v", result, expected) + } +} + // TestParseIP_FromFile 测试从文件读取 // // 验证:文件中的IP列表被正确读取 @@ -969,6 +981,24 @@ func TestParseIP_FullIPRange(t *testing.T) { } } +func TestParseIP_FullIPRangeNoLimit(t *testing.T) { + result, err := parseIPRangeString("192.168.1.1-192.168.1.5", -1) + if err != nil { + t.Fatalf("parseIPRangeString error = %v", err) + } + + expected := []string{ + "192.168.1.1", + "192.168.1.2", + "192.168.1.3", + "192.168.1.4", + "192.168.1.5", + } + if !reflect.DeepEqual(result, expected) { + t.Errorf("parseIPRangeString no limit = %v, want %v", result, expected) + } +} + // TestParseIP_InvalidCIDR 测试无效CIDR func TestParseIP_InvalidCIDR(t *testing.T) { tests := []struct { @@ -1173,7 +1203,7 @@ test: {"admin", "password123"}, {"root", "toor"}, {"user", "pass:with:colons"}, // 密码可以包含冒号 - {"test", ""}, // 空密码 + {"test", ""}, // 空密码 } if len(result) != len(tests) { diff --git a/common/parsers/parsers.go b/common/parsers/parsers.go index 74bbdbc..d32d408 100644 --- a/common/parsers/parsers.go +++ b/common/parsers/parsers.go @@ -302,7 +302,7 @@ func parseIPCIDR(cidr string, maxTargets int) ([]string, error) { for ipNet.Contains(ip) { ips = append(ips, ip.String()) count++ - if count >= maxTargets { + if maxTargets > 0 && count >= maxTargets { break } incrementIP(ip) @@ -346,7 +346,7 @@ func parseIPRangeString(rangeStr string, maxTargets int) ([]string, error) { // 处理简写格式 (如: 192.168.1.1-100) if len(endIPStr) < 4 || !strings.Contains(endIPStr, ".") { - return parseIPShortRange(startIPStr, endIPStr) + return parseIPShortRange(startIPStr, endIPStr, maxTargets) } // 处理完整格式 (如: 192.168.1.1-192.168.1.100) @@ -359,7 +359,7 @@ func parseIPRangeString(rangeStr string, maxTargets int) ([]string, error) { } // parseIPShortRange 解析短格式IP范围 -func parseIPShortRange(startIPStr, endSuffix string) ([]string, error) { +func parseIPShortRange(startIPStr, endSuffix string, maxTargets int) ([]string, error) { endNum, err := strconv.Atoi(endSuffix) if err != nil || endNum > 255 { return nil, fmt.Errorf("无效的IP范围结束值: %s", endSuffix) @@ -377,8 +377,13 @@ func parseIPShortRange(startIPStr, endSuffix string) ([]string, error) { } var allIP []string + count := 0 for i := startNum; i <= endNum; i++ { allIP = append(allIP, fmt.Sprintf("%s.%d", prefixIP, i)) + count++ + if maxTargets > 0 && count >= maxTargets { + break + } } return allIP, nil @@ -408,7 +413,7 @@ func parseIPFullRange(startIP, endIP net.IP, maxTargets int) ([]string, error) { ips = append(ips, current.String()) count++ - if current.Equal(end4) || count >= maxTargets { + if current.Equal(end4) || (maxTargets > 0 && count >= maxTargets) { break } incrementIP(current)