2014-01-07 115 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