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

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

在golang中將網(wǎng)絡(luò)掩碼數(shù)轉(zhuǎn)換為32位

在golang中將網(wǎng)絡(luò)掩碼數(shù)轉(zhuǎn)換為32位

Go
白板的微信 2021-12-06 19:47:30
我正在嘗試通過以下方式獲取 IP 地址和子網(wǎng)掩碼ifaces, err := net.Interfaces()for _, iface := range ifaces{        localip, _ = iface.Addrs()}但是,我期待將子網(wǎng)作為類似255.255.255.0而不是/24. 我怎樣才能得到那個?如果沒有模塊可以做到這一點,那么作為程序來做到這一點的邏輯是什么?
查看完整描述

3 回答

?
不負相思意

TA貢獻1777條經(jīng)驗 獲得超10個贊

func main() {

    ifaces, err := net.Interfaces()

    if err != nil {

        panic(err)

    }

    for _, iface := range ifaces {

        addrs, _ := iface.Addrs()

        for _, addr := range addrs {

            cidr := addr.String()

            mask, err := mask(cidr)

            if err != nil {

                fmt.Println("extracting mask failed:", err)

            }

            i, err := mtoi(mask)

            if err != nil {

                fmt.Println("creating uint16 from mask failed:", err)

            }

            fmt.Printf("CIDR: %s\tMask: %d\n", cidr, i)

        }

    }

}


// Extracts IP mask from CIDR address.

func mask(cidr string) (net.IPMask, error) {

    _, ip, err := net.ParseCIDR(cidr)

    return ip.Mask, err

}


// Converts IP mask to 16 bit unsigned integer.

func mtoi(mask net.IPMask) (uint16, error) {

    var i uint16

    buf := bytes.NewReader(mask)

    err := binary.Read(buf, binary.BigEndian, &i)

    return i, err

}


查看完整回答
反對 回復(fù) 2021-12-06
?
慕容森

TA貢獻1853條經(jīng)驗 獲得超18個贊

借用一些 stackoverflow 帖子本身,使用邏輯運算符。


mask = (0xFFFFFFFF << (32 - 24)) & 0xFFFFFFFF; //24 is the netmask

var dmask uint64

dmask = 32

localmask := make([]uint64, 0, 4)

for i := 1; i <= 4; i++{

    tmp := mask >> (dmask - 8) & 0xFF

    localmask = append(localmask, tmp)

    dmask -= 8

}


fmt.Println(localmask)


查看完整回答
反對 回復(fù) 2021-12-06
?
萬千封印

TA貢獻1891條經(jīng)驗 獲得超3個贊

您可以實現(xiàn)如下功能:


func parseMask(ipaddr string) (mask string, err error) {

    removeExtra := regexp.MustCompile("^(.*[\\/])")

    asd := ipaddr[len(ipaddr)-3:]

    findSubnet := removeExtra.ReplaceAll([]byte(asd), []byte(""))

    subnet, err := strconv.ParseInt(string(findSubnet), 10, 64)

    if err != nil {

        return "", errors.New("Parse Mask: Error parsing mask")

    }

    var buff bytes.Buffer

    for i := 0; i < int(subnet); i++ {

        buff.WriteString("1")

    }

    for i := subnet; i < 32; i++ {

        buff.WriteString("0")

    }

    masker := buff.String()

    a, _ := strconv.ParseUint(masker[:8], 2, 64)

    b, _ := strconv.ParseUint(masker[8:16], 2, 64)

    c, _ := strconv.ParseUint(masker[16:24], 2, 64)

    d, _ := strconv.ParseUint(masker[24:32], 2, 64)

    resultMask := fmt.Sprintf("%v.%v.%v.%v", a, b, c, d)

    return resultMask, nil

}

然后調(diào)用它:


func main() {

    ifaces, _ := net.Interfaces()

    for _, iface := range ifaces {

        localip, _ := iface.Addrs()

        for _, ip := range localip {

            done, _ := parseMask(ip.String())

            log.Println(done) // 255.255.255.0

        }

    }

}


查看完整回答
反對 回復(fù) 2021-12-06
  • 3 回答
  • 0 關(guān)注
  • 416 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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