2014-01-07 2 views
3

Go에서는 IP 마스크의 비트 수를 어떻게 계산합니까 : 10.100.20.0 255.255.255.0 =>24 비트 maks입니다.Golang : IP 마스크의 비트 수

마스크가 특정 비트 수보다 낮거나 큰 지 확인하십시오 (예 :/24보다 큰 모든 주소를 차단하려는 경우).

답변

7

net 패키지에는 CIDR notation에 사용 된 마스크의 접두사 크기를 가져 오는 기능이 있습니다. 비트에 대한 특정 함수이다 :

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) 
} 

출력 :

24

Playground

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

다음 예를 참조 비트를 얻으려면

Ps.

난 당신이 비트 마스크 255.255.255.0

+0

큰 의미 추측! 더 쉬운 방법이 있다는 것을 알았습니다. ([내 시도] (http://play.golang.org/p/2hjumtMjS1)) –

+0

@AdrianoP 귀하의 기능은 훌륭하게 작동합니다 :). 그러나 Size()는 표준 형식이 아닌 경우 함수 대신 -1 대신 0을 반환합니다. 그 다음에 0이옵니다. – ANisus