обозначение префикса golang CIDR для IP-адреса/маски подсети (десятичное число)

Есть ли что-то похожее на «сетевую маску npm» в golang? Мне нужно преобразовать, например, 10.0.0.0/8 в 10.0.0.0/255.0.0.0, так что в основном сетевая маска в формате CIDR в десятичном формате.

var Netmask = require('netmask').Netmask
var block = new Netmask('10.0.0.0/8');
block.mask; // 255.0.0.0

Я не могу найти его в /golang.org/src/net/ip.go


person irom    schedule 05.09.2017    source источник


Ответы (1)


В стандартной библиотеке go нет функции для создания такого представления. При этом сделать самому не сложно:

https://play.golang.org/p/XT_UXoy6ra

func main() {
    _, ipv4Net, err := net.ParseCIDR("10.0.0.0/8")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(ipv4MaskString(ipv4Net.Mask))
}

func ipv4MaskString(m []byte) string {
    if len(m) != 4 {
        panic("ipv4Mask: len must be 4 bytes")
    }

    return fmt.Sprintf("%d.%d.%d.%d", m[0], m[1], m[2], m[3])
}

Имейте в виду, что этот формат работает только для масок ipv4. Если бы вы передали маску ipv6, это вызвало бы панику.

person Stephen Weinberg    schedule 05.09.2017