1.4.5.2
This commit is contained in:
69
EdgeNode/internal/utils/ip.go
Normal file
69
EdgeNode/internal/utils/ip.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"net"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// IsLocalIP 判断是否为本地IP
|
||||
func IsLocalIP(ipString string) bool {
|
||||
var ip = net.ParseIP(ipString)
|
||||
if ip == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
// IPv6
|
||||
if strings.Contains(ipString, ":") {
|
||||
return ip.String() == "::1"
|
||||
}
|
||||
|
||||
// IPv4
|
||||
ip = ip.To4()
|
||||
if ip == nil {
|
||||
return false
|
||||
}
|
||||
if ip[0] == 127 ||
|
||||
ip[0] == 10 ||
|
||||
(ip[0] == 172 && ip[1]&0xf0 == 16) ||
|
||||
(ip[0] == 192 && ip[1] == 168) {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// IsIPv4 是否为IPv4
|
||||
func IsIPv4(ip string) bool {
|
||||
var data = net.ParseIP(ip)
|
||||
if data == nil {
|
||||
return false
|
||||
}
|
||||
if strings.Contains(ip, ":") {
|
||||
return false
|
||||
}
|
||||
return data.To4() != nil
|
||||
}
|
||||
|
||||
// IsIPv6 是否为IPv6
|
||||
func IsIPv6(ip string) bool {
|
||||
var data = net.ParseIP(ip)
|
||||
if data == nil {
|
||||
return false
|
||||
}
|
||||
return !IsIPv4(ip)
|
||||
}
|
||||
|
||||
// IsWildIP 宽泛地判断一个数据是否为IP
|
||||
func IsWildIP(v string) bool {
|
||||
var l = len(v)
|
||||
if l == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
// for [IPv6]
|
||||
if v[0] == '[' && v[l-1] == ']' {
|
||||
return IsWildIP(v[1 : l-1])
|
||||
}
|
||||
|
||||
return net.ParseIP(v) != nil
|
||||
}
|
||||
Reference in New Issue
Block a user