2014-01-07 91 views
3

在Go中,如何获得IP掩码的位数如下:10.100.20.0 255.255.255.0 =>24位。Golang:IP掩码的位数

检查一个掩码是低于还是大于一定数量的比特(如果想阻止所有大于/ 24的地址)会很有帮助。

回答

7

net包具有获取掩码的前缀大小的功能,该值用于CIDR notation。对位的具体功能是:

func (m IPMask) Size() (ones, bits int)

为了得到位,请看下面的例子:

package main 

import (
    "fmt" 
    "net" 
) 

func main() { 
    mask := net.IPMask(net.ParseIP("255.255.255.0").To4()) // If you have the mask as a string 
    //mask := net.IPv4Mask(255,255,255,0) // If you have the mask as 4 integer values 

    prefixSize, _ := mask.Size() 
    fmt.Println(prefixSize) 
} 

输出:

Playground

Ps。

我想你指的是位掩码255.255.255.0

+0

太好了!我知道有一个更简单的方法([我的尝试])(http://play.golang.org/p/2hjumtMjS1)) –

+0

@AdrianoP你的函数很好用:)。但是,如果Size不是-1,那么size()会返回0而不是-1(就像在你的函数中一样);其次是零。 – ANisus