Вы могли бы реализовать такую функцию:
func parseMask(ipaddr string) (mask string, err error) {
removeExtra := regexp.MustCompile("^(.*[\\/])")
asd := ipaddr[len(ipaddr)-3:]
findSubnet := removeExtra.ReplaceAll([]byte(asd), []byte(""))
subnet, err := strconv.ParseInt(string(findSubnet), 10, 64)
if err != nil {
return "", errors.New("Parse Mask: Error parsing mask")
}
var buff bytes.Buffer
for i := 0; i < int(subnet); i++ {
buff.WriteString("1")
}
for i := subnet; i < 32; i++ {
buff.WriteString("0")
}
masker := buff.String()
a, _ := strconv.ParseUint(masker[:8], 2, 64)
b, _ := strconv.ParseUint(masker[8:16], 2, 64)
c, _ := strconv.ParseUint(masker[16:24], 2, 64)
d, _ := strconv.ParseUint(masker[24:32], 2, 64)
resultMask := fmt.Sprintf("%v.%v.%v.%v", a, b, c, d)
return resultMask, nil
}
, а затем вызвать его:
func main() {
ifaces, _ := net.Interfaces()
for _, iface := range ifaces {
localip, _ := iface.Addrs()
for _, ip := range localip {
done, _ := parseMask(ip.String())
log.Println(done) // 255.255.255.0
}
}
}
Я думаю, что вы ищете https://golang.org/pkg/net/#IPMask.Size – kostya