123456789101112131415161718192021222324252627282930313233343536373839 |
- package ip
- import "net"
- var PRIVATE_NETWORKS = [...]string{"10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "fd00::/8", "127.0.0.0/8"}
- type IP struct {
- IP net.IP
- private_networks []*net.IPNet
- }
- func NewIP() *IP {
- var ipnet *net.IPNet
- privnets := make([]*net.IPNet, len(PRIVATE_NETWORKS), len(PRIVATE_NETWORKS))
- for i, n := range PRIVATE_NETWORKS {
- _, ipnet, _ = net.ParseCIDR(n)
- privnets[i] = ipnet
- }
- return &IP{private_networks: privnets}
- }
- func (i *IP) IsPrivate(ip net.IP) bool {
- for _, net := range i.private_networks {
- if net.Contains(ip) {
- return true
- }
- }
- return false
- }
- func (i *IP) Network(ip net.IP) *net.IPNet {
- for _, n := range i.private_networks {
- if n.Contains(ip) {
- return n
- }
- }
- return nil
- }
|