2017-09-05 988 views
1

在golang中是否有类似'npm网络掩码'?我需要将10.0.0.0/ 转换为10.0.0.0/ 255.0.0.0所以基本上以CIDR格式掩码为点十进制。golang CIDR前缀表示法到IP地址/子网掩码(点十进制)

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

回答

3

转到标准库不具备的功能来创建表示。话虽这么说,这是不难做到自己:

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掩码,这会惊慌。