mirror of https://github.com/smcquay/cidr/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
637 B
30 lines
637 B
package main |
|
|
|
import ( |
|
"fmt" |
|
"math/big" |
|
"net" |
|
) |
|
|
|
func ipToInt(ip net.IP) (*big.Int, int) { |
|
val := &big.Int{} |
|
val.SetBytes([]byte(ip)) |
|
if len(ip) == net.IPv4len { |
|
return val, 32 |
|
} else if len(ip) == net.IPv6len { |
|
return val, 128 |
|
} else { |
|
panic(fmt.Errorf("Unsupported address length %d", len(ip))) |
|
} |
|
} |
|
|
|
func intToIP(ipInt *big.Int, bits int) net.IP { |
|
ipBytes := ipInt.Bytes() |
|
ret := make([]byte, bits/8) |
|
// Pack our IP bytes into the end of the return array, |
|
// since big.Int.Bytes() removes front zero padding. |
|
for i := 1; i <= len(ipBytes); i++ { |
|
ret[len(ret)-i] = ipBytes[len(ipBytes)-i] |
|
} |
|
return net.IP(ret) |
|
}
|
|
|