3 回答

TA貢獻1770條經驗 獲得超3個贊
起初這不是很明顯,但是:
addr := ip.To4() sz, _ := net.IPV4Mask(addr[0], addr[1], addr[2], addr[3]).Size()

TA貢獻1827條經驗 獲得超4個贊
使用IPAddress Go 庫,這很簡單。請注意,此代碼同樣適用于 IPv4 和 IPv6。免責聲明:我是項目經理。
import (
? ? "fmt"
? ? "github.com/seancfoley/ipaddress-go/ipaddr"
)
func main() {
? ? maskStr := "255.255.255.0"
? ? pref := ipaddr.NewIPAddressString(maskStr).GetAddress().
? ? ? ? GetBlockMaskPrefixLen(true)
? ? fmt.Printf("prefix length for %s is %d", maskStr, pref.Len())
}
輸出:
prefix length for 255.255.255.0 is 24

TA貢獻1951條經驗 獲得超3個贊
我不知道這樣的功能是否存在,但創建一個很容易。
CIDR 表示法只是網絡掩碼中設置位的計數。
所以,粗略的解決方案可能是:
func cidr(netmask string) int {
var mask uint32
for idx, dotpart := range strings.Split(netmask, ".") {
part, _ := strconv.Atoi(dotpart)
mask = mask | uint32(part) << uint32(24-idx*8)
}
return len(fmt.Sprintf("%b", mask))
}
- 3 回答
- 0 關注
- 224 瀏覽
添加回答
舉報