Go中将网络掩码转换为CIDR

God*_*a74 2 go

我正在寻找一种将网络掩码字符串转换为 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)

Bur*_*dar 6

起初这不是很明显,但是:

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