IP address/subnet 掩码(点十进制)的 golang CIDR 前缀表示法
golang CIDR prefix notation to IP address/subnet mask (dot-decimal)
在 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
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 掩码,这会 panic。
在 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
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 掩码,这会 panic。