diff --git a/task/ip.go b/task/ip.go index cc57b5a..678a0c5 100644 --- a/task/ip.go +++ b/task/ip.go @@ -49,6 +49,7 @@ func newIPRanges() *IPRanges { } } +// 如果是单独 IP 则加上子网掩码,反之则获取子网掩码(r.mask) func (r *IPRanges) fixIP(ip string) string { // 如果不含有 '/' 则代表不是 IP 段,而是一个单独的 IP,因此需要加上 /32 /128 子网掩码 if i := strings.IndexByte(ip, '/'); i < 0 { @@ -64,6 +65,7 @@ func (r *IPRanges) fixIP(ip string) string { return ip } +// 解析 IP 段,获得 IP、IP 范围 func (r *IPRanges) parseCIDR(ip string) { var err error if r.firstIP, r.ipNet, err = net.ParseCIDR(r.fixIP(ip)); err != nil { @@ -140,8 +142,12 @@ func (r *IPRanges) chooseIPv6() { func loadIPRanges() []*net.IPAddr { ranges := newIPRanges() if IPText != "" { // 从参数中获取 IP 段数据 - IPs := strings.Split(IPText, ",") + IPs := strings.Split(IPText, ",") // 以逗号分隔为数组并循环遍历 for _, IP := range IPs { + IP = strings.TrimSpace(IP) // 去除首尾的空白字符(空格、制表符、换行符等) + if IP == "" { // 跳过空的(即开头、结尾或连续多个 ,, 的情况) + continue + } ranges.parseCIDR(IP) if isIPv4(IP) { ranges.chooseIPv4() @@ -159,9 +165,13 @@ func loadIPRanges() []*net.IPAddr { } defer file.Close() scanner := bufio.NewScanner(file) - for scanner.Scan() { - ranges.parseCIDR(scanner.Text()) - if isIPv4(scanner.Text()) { + for scanner.Scan() { // 循环遍历文件每一行 + line := strings.TrimSpace(scanner.Text()) // 去除首尾的空白字符(空格、制表符、换行符等) + if line == "" { // 跳过空行 + continue + } + ranges.parseCIDR(line) + if isIPv4(line) { ranges.chooseIPv4() } else { ranges.chooseIPv6()