Spaces:
Runtime error
Runtime error
| 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 | |
| } | |