mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-22 03:10:42 +08:00
Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
@@ -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 测试从文件读取
|
// TestParseIP_FromFile 测试从文件读取
|
||||||
//
|
//
|
||||||
// 验证:文件中的IP列表被正确读取
|
// 验证:文件中的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
|
// TestParseIP_InvalidCIDR 测试无效CIDR
|
||||||
func TestParseIP_InvalidCIDR(t *testing.T) {
|
func TestParseIP_InvalidCIDR(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
@@ -1173,7 +1203,7 @@ test:
|
|||||||
{"admin", "password123"},
|
{"admin", "password123"},
|
||||||
{"root", "toor"},
|
{"root", "toor"},
|
||||||
{"user", "pass:with:colons"}, // 密码可以包含冒号
|
{"user", "pass:with:colons"}, // 密码可以包含冒号
|
||||||
{"test", ""}, // 空密码
|
{"test", ""}, // 空密码
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(result) != len(tests) {
|
if len(result) != len(tests) {
|
||||||
|
|||||||
@@ -302,7 +302,7 @@ func parseIPCIDR(cidr string, maxTargets int) ([]string, error) {
|
|||||||
for ipNet.Contains(ip) {
|
for ipNet.Contains(ip) {
|
||||||
ips = append(ips, ip.String())
|
ips = append(ips, ip.String())
|
||||||
count++
|
count++
|
||||||
if count >= maxTargets {
|
if maxTargets > 0 && count >= maxTargets {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
incrementIP(ip)
|
incrementIP(ip)
|
||||||
@@ -346,7 +346,7 @@ func parseIPRangeString(rangeStr string, maxTargets int) ([]string, error) {
|
|||||||
|
|
||||||
// 处理简写格式 (如: 192.168.1.1-100)
|
// 处理简写格式 (如: 192.168.1.1-100)
|
||||||
if len(endIPStr) < 4 || !strings.Contains(endIPStr, ".") {
|
if len(endIPStr) < 4 || !strings.Contains(endIPStr, ".") {
|
||||||
return parseIPShortRange(startIPStr, endIPStr)
|
return parseIPShortRange(startIPStr, endIPStr, maxTargets)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理完整格式 (如: 192.168.1.1-192.168.1.100)
|
// 处理完整格式 (如: 192.168.1.1-192.168.1.100)
|
||||||
@@ -359,7 +359,7 @@ func parseIPRangeString(rangeStr string, maxTargets int) ([]string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// parseIPShortRange 解析短格式IP范围
|
// parseIPShortRange 解析短格式IP范围
|
||||||
func parseIPShortRange(startIPStr, endSuffix string) ([]string, error) {
|
func parseIPShortRange(startIPStr, endSuffix string, maxTargets int) ([]string, error) {
|
||||||
endNum, err := strconv.Atoi(endSuffix)
|
endNum, err := strconv.Atoi(endSuffix)
|
||||||
if err != nil || endNum > 255 {
|
if err != nil || endNum > 255 {
|
||||||
return nil, fmt.Errorf("无效的IP范围结束值: %s", endSuffix)
|
return nil, fmt.Errorf("无效的IP范围结束值: %s", endSuffix)
|
||||||
@@ -377,8 +377,13 @@ func parseIPShortRange(startIPStr, endSuffix string) ([]string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var allIP []string
|
var allIP []string
|
||||||
|
count := 0
|
||||||
for i := startNum; i <= endNum; i++ {
|
for i := startNum; i <= endNum; i++ {
|
||||||
allIP = append(allIP, fmt.Sprintf("%s.%d", prefixIP, i))
|
allIP = append(allIP, fmt.Sprintf("%s.%d", prefixIP, i))
|
||||||
|
count++
|
||||||
|
if maxTargets > 0 && count >= maxTargets {
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return allIP, nil
|
return allIP, nil
|
||||||
@@ -408,7 +413,7 @@ func parseIPFullRange(startIP, endIP net.IP, maxTargets int) ([]string, error) {
|
|||||||
ips = append(ips, current.String())
|
ips = append(ips, current.String())
|
||||||
count++
|
count++
|
||||||
|
|
||||||
if current.Equal(end4) || count >= maxTargets {
|
if current.Equal(end4) || (maxTargets > 0 && count >= maxTargets) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
incrementIP(current)
|
incrementIP(current)
|
||||||
|
|||||||
Reference in New Issue
Block a user