mirror of
https://github.com/TeaOSLab/EdgeCommon.git
synced 2025-11-12 19:30:25 +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()))
|
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加上括号
|
// QuoteIP 为IPv6加上括号
|
||||||
func QuoteIP(ip string) string {
|
func QuoteIP(ip string) string {
|
||||||
if len(ip) == 0 {
|
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