Оставшиеся IP в диапазоне / CIDR - PullRequest
0 голосов
/ 13 декабря 2018

Я хотел бы найти оставшиеся IP-адреса в диапазоне (CIDR).Например:

prefixLen, bits := n.Mask.Size()
return 1 << (uint64(bits) - uint64(prefixLen)), nil

Возвращает количество IP-адресов в диапазоне, где n равно *net.IPNet.Но скажите, если у меня есть несколько адресов, которые уже выданы, и я хочу знать, сколько из них осталось «начинающимися» с некоторых IP-адресов, как я могу это сделать?

1 Ответ

0 голосов
/ 14 декабря 2018

Вот что вы можете сделать

package main

import (
    "fmt"
    "net"

)
func inet_aton(ip string) uint32 {
var rv uint32
b := net.ParseIP(ip).To4()
rv=uint32(b[0]) << 24
rv=rv+uint32(b[1]) << 16
rv=rv+uint32(b[2]) << 8
rv=rv+uint32(b[3])
return rv
}

func main() {
    start := inet_aton("192.168.0.1")   //192.168.2.0/20 start
    fin := inet_aton("192.168.15.255")  //ditto end
    here := inet_aton("192.168.15.248") //current allocation

    fmt.Printf("you have %d remaining\n",(fin-start) - (here-start))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...