优化 解析 IP 段数据时会去除首尾的空白字符并跳过空行

This commit is contained in:
xiu2 2023-04-28 14:52:59 +08:00
parent 1800c2e89e
commit 9f000aa23a
1 changed files with 14 additions and 4 deletions

View File

@ -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()