mirror of
				https://github.com/TeaOSLab/EdgeCommon.git
				synced 2025-11-04 05:00:24 +08:00 
			
		
		
		
	增加configutils/ParseCIDR()函数
This commit is contained in:
		@@ -25,6 +25,28 @@ func IP2Long(ip string) uint64 {
 | 
			
		||||
	return uint64(binary.BigEndian.Uint32(s.To4()))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParseCIDR 计算CIDR最大值
 | 
			
		||||
func ParseCIDR(cidr string) (ipFrom string, ipTo string, err error) {
 | 
			
		||||
	_, ipNet, err := net.ParseCIDR(cidr)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", "", err
 | 
			
		||||
	}
 | 
			
		||||
	ipFrom = ipNet.IP.String()
 | 
			
		||||
Loop:
 | 
			
		||||
	for i := len(ipNet.Mask) - 1; i >= 0; i-- {
 | 
			
		||||
		for j := 7; j >= 0; j-- {
 | 
			
		||||
			var m = ipNet.Mask[i] >> (7 - j) & 1 // 读取某位bit
 | 
			
		||||
			if m == 0 {
 | 
			
		||||
				ipNet.IP[i] |= 1 << j // 将此位置为1
 | 
			
		||||
			} else {
 | 
			
		||||
				break Loop
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	ipTo = ipNet.IP.String()
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// QuoteIP 为IPv6加上括号
 | 
			
		||||
func QuoteIP(ip string) string {
 | 
			
		||||
	if len(ip) == 0 {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								pkg/configutils/ip_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								pkg/configutils/ip_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
 | 
			
		||||
 | 
			
		||||
package configutils
 | 
			
		||||
 | 
			
		||||
import "testing"
 | 
			
		||||
 | 
			
		||||
func TestParseCIDR(t *testing.T) {
 | 
			
		||||
	t.Log(ParseCIDR("192.168.1.1/32"))
 | 
			
		||||
	t.Log(ParseCIDR("192.168.1.1/24"))
 | 
			
		||||
	t.Log(ParseCIDR("192.168.1.1/16"))
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user