| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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 {
- // 尝试作为单个IP处理
- if whitelistIP := net.ParseIP(cidr); whitelistIP != nil {
- if ip.Equal(whitelistIP) {
- return true
- }
- }
- continue
- }
- if network.Contains(ip) {
- return true
- }
- }
- return false
- }
|