范围/ CIDR中的剩余IP

时间:2018-12-13 20:08:30

标签: go network-programming

我想找到一个范围(CIDR)中的其余IP。 例如:

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

这将返回n*net.IPNet的IP数量。 但是说,如果我已经给出的地址很少,并且想知道从某些IP地址剩下的“开始”地址,我该怎么办?

1 个答案:

答案 0 :(得分:1)

这是您可以做的

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