3 回答

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

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
使用IPAddress Go 庫,這很簡(jiǎn)單。請(qǐng)注意,此代碼同樣適用于 IPv4 和 IPv6。免責(zé)聲明:我是項(xiàng)目經(jīng)理。
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貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
我不知道這樣的功能是否存在,但創(chuàng)建一個(gè)很容易。
CIDR 表示法只是網(wǎng)絡(luò)掩碼中設(shè)置位的計(jì)數(shù)。
所以,粗略的解決方案可能是:
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 關(guān)注
- 223 瀏覽
添加回答
舉報(bào)