第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Go中將網(wǎng)絡(luò)掩碼轉(zhuǎn)換為CIDR

Go中將網(wǎng)絡(luò)掩碼轉(zhuǎn)換為CIDR

Go
繁花不似錦 2023-07-17 15:17:29
我正在尋找一種將網(wǎng)絡(luò)掩碼字符串轉(zhuǎn)換為 Go 中的 CIDR 表示法的方法。例如,“255.255.255.0”->“/24”我目前正在使用以下邏輯獲取 IP 地址和網(wǎng)絡(luò)掩碼字符串,這可能會(huì)使事情變得復(fù)雜。我一直在仔細(xì)閱讀該net庫,試圖看看是否有不同的函數(shù)可以用來完成我想要的功能,這實(shí)際上只是 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貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊

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

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


查看完整回答
反對(duì) 回復(fù) 2023-07-17
?
GCT1015

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


查看完整回答
反對(duì) 回復(fù) 2023-07-17
?
飲歌長(zhǎng)嘯

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

}



查看完整回答
反對(duì) 回復(fù) 2023-07-17
  • 3 回答
  • 0 關(guān)注
  • 223 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)