mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-27 05:31:53 +08:00
fix: 修复大网段扫描不设置上限的问题 (#581)
* fix: 修复大网段扫描不设置上限的问题 修复三处关键Bug: 1. parseIPFullRange() - 修复逻辑错误 - 问题:当maxTargets=-1时,count >= -1 导致只返回1个IP - 修复:添加maxTargets > 0检查条件 2. parseIPShortRange() - 添加maxTargets参数支持 - 问题:短格式范围(如192.168.1.1-254)无法被限制 - 修复:添加maxTargets参数并在循环中检查 3. parseIPRangeString() - 修复调用传参遗漏 - 问题:调用parseIPShortRange()未传递maxTargets - 修复:传入maxTargets参数 改进点: - 大网段解析(如10.0.0.0/8)现在正确处理不超限的情况 - IP范围解析完整性验证 - 添加详细的bug报告和修复文档 * fix parser range limit handling --------- Co-authored-by: ZacharyZcR <[email protected]>
This commit is contained in:
co-authored by
ZacharyZcR
parent
d412786228
commit
73b0b0b822
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user