mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-03-29 23:10:35 +00:00
52 lines
992 B
Go
52 lines
992 B
Go
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
|
|
}
|