Files
EdgeNode/internal/utils/ip.go

70 lines
1.0 KiB
Go
Raw Permalink Normal View History

package utils
import (
"net"
"strings"
)
2021-12-02 16:08:25 +08:00
// IsLocalIP 判断是否为本地IP
func IsLocalIP(ipString string) bool {
var ip = net.ParseIP(ipString)
if ip == nil {
return false
}
// IPv6
if strings.Contains(ipString, ":") {
2023-08-08 15:39:00 +08:00
return ip.String() == "::1"
2021-12-02 16:08:25 +08:00
}
// 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
}
2022-05-18 21:03:51 +08:00
// 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
}