浏览代码

优化 IP 段子网掩码解析

xiu2 4 年之前
父节点
当前提交
c8ef175207
共有 3 个文件被更改,包括 23 次插入12 次删除
  1. 21 10
      IPRangeLoader.go
  2. 1 1
      README.md
  3. 1 1
      util.go

+ 21 - 10
IPRangeLoader.go

@@ -11,9 +11,14 @@ import (
 
 func getCidrHostNum(maskLen int) int {
 	cidrIpNum := int(0)
-	var i int = int(32 - maskLen - 1)
-	for ; i >= 1; i-- {
-		cidrIpNum += 1 << i
+	if maskLen < 32 {
+		var i int = int(32 - maskLen - 1)
+		for ; i >= 1; i-- {
+			cidrIpNum += 1 << i
+		}
+		cidrIpNum += 2
+	} else {
+		cidrIpNum = 1
 	}
 	return cidrIpNum
 }
@@ -32,9 +37,9 @@ func loadFirstIPOfRangeFromFile(ipFile string) []net.IPAddr {
 		//fmt.Println(firstIP)
 		//fmt.Println(IPRange)
 		Mask, _ := strconv.Atoi(strings.Split(scanner.Text(), "/")[1])
-		MaxIPNum := getCidrHostNum(Mask) - 1
-		if MaxIPNum > 253 {
-			MaxIPNum = 253
+		MaxIPNum := getCidrHostNum(Mask)
+		if MaxIPNum > 255 {
+			MaxIPNum = 255
 		}
 		//fmt.Println(MaxIPNum)
 		if err != nil {
@@ -42,7 +47,7 @@ func loadFirstIPOfRangeFromFile(ipFile string) []net.IPAddr {
 		}
 		if ipv6Mode { // IPv6
 			var tempIP uint8
-			MaxIPNum = 254
+			MaxIPNum = 255
 			for IPRange.Contains(firstIP) {
 				//fmt.Println(firstIP)
 				//fmt.Println(firstIP[0], firstIP[1], firstIP[2], firstIP[3], firstIP[4], firstIP[5], firstIP[6], firstIP[7], firstIP[8], firstIP[9], firstIP[10], firstIP[11], firstIP[12], firstIP[13], firstIP[14], firstIP[15])
@@ -111,9 +116,15 @@ func loadFirstIPOfRangeFromFile(ipFile string) []net.IPAddr {
 				//fmt.Println(firstIP)
 				//fmt.Println(firstIP[15])
 				if allip {
-					for i := 1; i < MaxIPNum+2; i++ {
-						firstIP[15] = uint8(i) // 随机 IP 的最后一段 0.0.0.X
-						//fmt.Println(firstIP)
+					if firstIP[15] == 0 { // 当 IP 最后一段为 0 时会按顺序生成 IP
+						for i := 0; i < MaxIPNum; i++ {
+							firstIP[15] = uint8(i) // 按顺序生成 IP 的最后一段 0.0.0.X
+							//fmt.Println(firstIP)
+							firstIPCopy := make([]byte, len(firstIP))
+							copy(firstIPCopy, firstIP)
+							firstIPs = append(firstIPs, net.IPAddr{IP: firstIPCopy})
+						}
+					} else { // 当 IP 最后一段不为 0 时,则保留 IP 最后一段
 						firstIPCopy := make([]byte, len(firstIP))
 						copy(firstIPCopy, firstIP)
 						firstIPs = append(firstIPs, net.IPAddr{IP: firstIPCopy})

+ 1 - 1
README.md

@@ -55,7 +55,7 @@ IP 地址, 已发送, 已接收, 丢包率, 平均延迟, 下载速度 (MB/s)
 ****
 ## 进阶使用
 
-直接双击运行使用的是默认参数,如果想要测速结果更全面、更符合自己的要求,可以自定义参数。  
+直接运行使用的是默认参数,如果想要测速结果更全面、更符合自己的要求,可以自定义参数。  
 
 ``` cmd
 C:\>CloudflareST.exe -h

+ 1 - 1
util.go

@@ -92,7 +92,7 @@ func initRandSeed() {
 }
 
 func randipEndWith(num int) uint8 {
-	return uint8(rand.Intn(num) + 1)
+	return uint8(rand.Intn(num))
 }
 
 func GetRandomString() string {