golang CIDR前缀表示法到IP地址/子网掩码(点小数)

时间:2017-09-05 20:55:34

标签: go cidr

在golang中是否有与“ npm netmask ”类似的内容?我需要将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

中找不到它

1 个答案:

答案 0 :(得分:4)

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面具,这会让人感到恐慌。