| | package common |
| |
|
| | import "net" |
| |
|
| | func IsIP(s string) bool { |
| | ip := net.ParseIP(s) |
| | return ip != nil |
| | } |
| |
|
| | func ParseIP(s string) net.IP { |
| | return net.ParseIP(s) |
| | } |
| |
|
| | func IsPrivateIP(ip net.IP) bool { |
| | if ip.IsLoopback() || ip.IsLinkLocalUnicast() || ip.IsLinkLocalMulticast() { |
| | return true |
| | } |
| |
|
| | private := []net.IPNet{ |
| | {IP: net.IPv4(10, 0, 0, 0), Mask: net.CIDRMask(8, 32)}, |
| | {IP: net.IPv4(172, 16, 0, 0), Mask: net.CIDRMask(12, 32)}, |
| | {IP: net.IPv4(192, 168, 0, 0), Mask: net.CIDRMask(16, 32)}, |
| | } |
| |
|
| | for _, privateNet := range private { |
| | if privateNet.Contains(ip) { |
| | return true |
| | } |
| | } |
| | return false |
| | } |
| |
|
| | func IsIpInCIDRList(ip net.IP, cidrList []string) bool { |
| | for _, cidr := range cidrList { |
| | _, network, err := net.ParseCIDR(cidr) |
| | if err != nil { |
| | |
| | if whitelistIP := net.ParseIP(cidr); whitelistIP != nil { |
| | if ip.Equal(whitelistIP) { |
| | return true |
| | } |
| | } |
| | continue |
| | } |
| |
|
| | if network.Contains(ip) { |
| | return true |
| | } |
| | } |
| | return false |
| | } |
| |
|