gpt4 book ai didi

go - Go中将网络掩码转换为CIDR

转载 作者:行者123 更新时间:2023-12-03 01:30:00 24 4
gpt4 key购买 nike

我正在寻找一种将网络掩码字符串转换为 Go 中的 CIDR 表示法的方法。

例如,“255.255.255.0”->“/24”

我目前正在使用以下逻辑获取 IP 地址和网络掩码字符串,这可能会使事情变得复杂。

我一直在仔细研究 net 库,试图看看是否有不同的函数可以用来完成我想要的事情,这实际上只是 CIDR 表示法中的 IP 地址:

192.168.1.2/24
var mgmtInterface *net.Interface
var err error

mgmtInterface, err = net.InterfaceByName("eth0")
if err != nil {
log.Println("Unable to find interface eth0, trying en0")
mgmtInterface, err = net.InterfaceByName("en0")
}

addrs, err := mgmtInterface.Addrs()
if err != nil {
log.Println("interface has no address")
}

for _, addr := range addrs {
var ip net.IP
var mask net.IPMask
switch v := addr.(type) {
case *net.IPNet:
ip = v.IP
mask = v.Mask
case *net.IPAddr:
ip = v.IP
mask = ip.DefaultMask()
}

if ip == nil {
continue
}

ip = ip.To4()
if ip == nil {
continue
}

// create the netmask
cleanMask := fmt.Sprintf("%d.%d.%d.%d", mask[0], mask[1], mask[2], mask[3])

}

最佳答案

一开始这不是很明显,但是:

addr := ip.To4()
sz, _ := net.IPV4Mask(addr[0], addr[1], addr[2], addr[3]).Size()

关于go - Go中将网络掩码转换为CIDR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57699732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com