我正在寻找一种将网络掩码字符串转换为 Go 中的 CIDR 表示法的方法。
例如,“255.255.255.0”->“/24”
我目前正在使用以下逻辑获取 IP 地址和网络掩码字符串,这可能会使事情变得复杂。
我一直在仔细阅读该net库,试图看看是否有不同的函数可以用来完成我想要的功能,这实际上只是 CIDR 表示法中的 IP 地址:
192.168.1.2/24
Run Code Online (Sandbox Code Playgroud)
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])
}
Run Code Online (Sandbox Code Playgroud)
起初这不是很明显,但是:
addr := ip.To4()
sz, _ := net.IPV4Mask(addr[0], addr[1], addr[2], addr[3]).Size()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4132 次 |
| 最近记录: |