3 回答
TA贡献1770条经验 获得超3个赞
起初这不是很明显,但是:
addr := ip.To4() sz, _ := net.IPV4Mask(addr[0], addr[1], addr[2], addr[3]).Size()
TA贡献1827条经验 获得超4个赞
使用IPAddress Go 库,这很简单。请注意,此代码同样适用于 IPv4 和 IPv6。免责声明:我是项目经理。
import (
"fmt"
"github.com/seancfoley/ipaddress-go/ipaddr"
)
func main() {
maskStr := "255.255.255.0"
pref := ipaddr.NewIPAddressString(maskStr).GetAddress().
GetBlockMaskPrefixLen(true)
fmt.Printf("prefix length for %s is %d", maskStr, pref.Len())
}
输出:
prefix length for 255.255.255.0 is 24
TA贡献1951条经验 获得超3个赞
我不知道这样的功能是否存在,但创建一个很容易。
CIDR 表示法只是网络掩码中设置位的计数。
所以,粗略的解决方案可能是:
func cidr(netmask string) int {
var mask uint32
for idx, dotpart := range strings.Split(netmask, ".") {
part, _ := strconv.Atoi(dotpart)
mask = mask | uint32(part) << uint32(24-idx*8)
}
return len(fmt.Sprintf("%b", mask))
}
- 3 回答
- 0 关注
- 156 浏览
添加回答
举报