diff --git a/IPRangeLoader.go b/IPRangeLoader.go deleted file mode 100644 index b144263..0000000 --- a/IPRangeLoader.go +++ /dev/null @@ -1,177 +0,0 @@ -package main - -import ( - "CloudflareSpeedTest/task" - "bufio" - "log" - "net" - "os" - "strconv" - "strings" -) - -// 根据子网掩码获取主机数量 -func getCidrHostNum(maskLen int) int { - cidrIPNum := int(0) - if maskLen < 32 { - var i int = int(32 - maskLen - 1) - for ; i >= 1; i-- { - cidrIPNum += 1 << i - } - cidrIPNum += 2 - } else { - cidrIPNum = 1 - } - if cidrIPNum > 255 { - cidrIPNum = 255 - } - return cidrIPNum -} - -// 获取 IP 最后一段最小值和最大值 -func getCidrIPRange(cidr string) (uint8, uint8) { - ip := strings.Split(cidr, "/")[0] - ipSegs := strings.Split(ip, ".") - maskLen, _ := strconv.Atoi(strings.Split(cidr, "/")[1]) - seg4MinIP, seg4MaxIP := getIPSeg4Range(ipSegs, maskLen) - //ipPrefix := ipSegs[0] + "." + ipSegs[1] + "." + ipSegs[2] + "." - - return seg4MinIP, seg4MaxIP -} - -// 获取 IP 最后一段的区间 -func getIPSeg4Range(ipSegs []string, maskLen int) (uint8, uint8) { - ipSeg, _ := strconv.Atoi(ipSegs[3]) - return getIPSegRange(uint8(ipSeg), uint8(32-maskLen)) -} - -// 根据输入的基础IP地址和CIDR掩码计算一个IP片段的区间 -func getIPSegRange(userSegIP, offset uint8) (uint8, uint8) { - var ipSegMax uint8 = 255 - netSegIP := ipSegMax << offset - segMinIP := netSegIP & userSegIP - segMaxIP := userSegIP&(255<= 1; i-- { - cidrIPNum += 1 << i +func getCIDRHostNum(mask uint8) (subnetNum int) { + if mask >= 32 { + return 1 + } + + if mask < 32 { + for i := int(32 - mask - 1); i >= 1; i-- { + subnetNum += 1 << i } - cidrIPNum += 2 - } else { - cidrIPNum = 1 + subnetNum += 2 } - if cidrIPNum > 255 { - cidrIPNum = 255 + if subnetNum > 0xFF { + subnetNum = 0xFF } - return cidrIPNum + return } -// 获取 IP 最后一段最小值和最大值、子网掩码 -func getCidrIPRange(cidr string) (minIP, maxIP uint8, mask int) { - ipRange := strings.Split(cidr, "/") - ipSegs := strings.Split(ipRange[0], ".") - mask, _ = strconv.Atoi(ipRange[1]) - seg4, _ := strconv.Atoi(ipSegs[3]) +// 获取 IP 最后一段最小值和最大值、主机数量 +func getCidrIPRange(cidr string) (minIP, maxIP uint8, ipNum int) { + i := strings.IndexByte(cidr, '/') + addr := cidr[:i] + mask, _ := strconv.ParseUint(cidr[i+1:], 10, 8) + i = strings.LastIndexByte(addr, '.') + seg4, _ := strconv.ParseUint(addr[i+1:], 10, 8) minIP, maxIP = getIPSegRange(uint8(seg4), uint8(32-mask)) + ipNum = getCIDRHostNum(uint8(mask)) return } // 根据输入的基础IP地址和CIDR掩码计算一个IP片段的区间 func getIPSegRange(userSegIP, offset uint8) (uint8, uint8) { - var ipSegMax uint8 = 255 + var ipSegMax uint8 = 0xFF netSegIP := ipSegMax << offset segMinIP := netSegIP & userSegIP - segMaxIP := userSegIP&(255< cfs[j].downloadSpeed -} - -func (cfs CloudflareIPDataSetD) Swap(i, j int) { - cfs[i], cfs[j] = cfs[j], cfs[i] -} diff --git a/utils/csv.go b/utils/csv.go index a4b4d0a..6240d72 100644 --- a/utils/csv.go +++ b/utils/csv.go @@ -10,14 +10,15 @@ import ( "time" ) -const defaultOutput = "result.csv" +const ( + defaultOutput = "result.csv" + maxDelay = 9999 * time.Millisecond + minDelay = time.Duration(0) +) var ( - MaxDelay = 9999 * time.Millisecond - MinDelay = time.Duration(0) - - InputMaxDelay = MaxDelay - InputMinDelay = MinDelay + InputMaxDelay = maxDelay + InputMinDelay = minDelay Output = defaultOutput PrintNum = 20 ) @@ -81,14 +82,14 @@ func convertToString(data []CloudflareIPData) [][]string { type PingDelaySet []CloudflareIPData func (s PingDelaySet) FilterDelay() (data PingDelaySet) { - if InputMaxDelay >= MaxDelay || InputMinDelay <= MinDelay { + if InputMaxDelay >= maxDelay || InputMinDelay <= minDelay { return s } for _, v := range s { - if v.Delay > MaxDelay { // 平均延迟上限 + if v.Delay > maxDelay { // 平均延迟上限 break } - if v.Delay <= MinDelay { // 平均延迟下限 + if v.Delay <= minDelay { // 平均延迟下限 continue } data = append(data, v) // 延迟满足条件时,添加到新数组中 @@ -146,4 +147,4 @@ func (s DownloadSpeedSet) Print(ipv6 bool) { for i := 0; i < PrintNum; i++ { fmt.Printf(dataFormat, dateString[i][0], dateString[i][1], dateString[i][2], dateString[i][3], dateString[i][4], dateString[i][5]) } -} \ No newline at end of file +}