亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go中將網絡掩碼轉換為CIDR

Go中將網絡掩碼轉換為CIDR

Go
繁花不似錦 2023-07-17 15:17:29
我正在尋找一種將網絡掩碼字符串轉換為 Go 中的 CIDR 表示法的方法。例如,“255.255.255.0”->“/24”我目前正在使用以下邏輯獲取 IP 地址和網絡掩碼字符串,這可能會使事情變得復雜。我一直在仔細閱讀該net庫,試圖看看是否有不同的函數可以用來完成我想要的功能,這實際上只是 CIDR 表示法中的 IP 地址:192.168.1.2/24var mgmtInterface *net.Interfacevar err errormgmtInterface, err = net.InterfaceByName("eth0")if err != nil {  log.Println("Unable to find interface eth0, trying en0")  mgmtInterface, err = net.InterfaceByName("en0")}addrs, err := mgmtInterface.Addrs()if err != nil {  log.Println("interface has no address")}for _, addr := range addrs {  var ip net.IP  var mask net.IPMask  switch v := addr.(type) {  case *net.IPNet:    ip = v.IP    mask = v.Mask  case *net.IPAddr:    ip = v.IP    mask = ip.DefaultMask()  }  if ip == nil {    continue  }  ip = ip.To4()  if ip == nil {    continue  }  // create the netmask  cleanMask := fmt.Sprintf("%d.%d.%d.%d", mask[0], mask[1], mask[2], mask[3])} 
查看完整描述

3 回答

?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

起初這不是很明顯,但是:

addr := ip.To4()
sz, _ := net.IPV4Mask(addr[0], addr[1], addr[2], addr[3]).Size()


查看完整回答
反對 回復 2023-07-17
?
GCT1015

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


查看完整回答
反對 回復 2023-07-17
?
飲歌長嘯

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

}



查看完整回答
反對 回復 2023-07-17
  • 3 回答
  • 0 關注
  • 224 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號