基于Golang net包封装了CIDR网段和IP的常用处理方法
import "github.com/3th1nk/cidr"
c, _ := cidr.ParseCIDR("192.168.1.0/24")
fmt.Println(c.Network())
fmt.Println(c.Broadcast())
start, end := c.IPRange()
fmt.Println(c.IPCount(), start, end)
if err := c.ForEachIP(func(ip string) error {
// do something
return nil
}); err != nil {
fmt.Println(err)
}
# 基于子网数量划分子网段
cs, _ := c.SubNetting(cidr.SUBNETTING_METHOD_SUBNET_NUM, 4)
for _, c := range cs {
fmt.Println(c.CIDR())
}
# 基于主机数量划分子网段
cs, _ := c.SubNetting(cidr.SUBNETTING_METHOD_HOST_NUM, 64)
for _, c := range cs {
fmt.Println(c.CIDR())
}
c, _ := cidr.SuperNetting([]string{
"2001:db8::/66",
"2001:db8:0:0:8000::/66",
"2001:db8:0:0:4000::/66",
"2001:db8:0:0:c000::/66",
})
fmt.Println(c.CIDR())