mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-03 23:20:25 +08:00
78 lines
1.2 KiB
Go
78 lines
1.2 KiB
Go
package utils
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"github.com/cespare/xxhash"
|
|
"math"
|
|
"net"
|
|
"strings"
|
|
)
|
|
|
|
// IP2Long 将IP转换为整型
|
|
// 注意IPv6没有顺序
|
|
func IP2Long(ip string) uint64 {
|
|
if len(ip) == 0 {
|
|
return 0
|
|
}
|
|
s := net.ParseIP(ip)
|
|
if len(s) == 0 {
|
|
return 0
|
|
}
|
|
|
|
if strings.Contains(ip, ":") {
|
|
return math.MaxUint32 + xxhash.Sum64(s)
|
|
}
|
|
return uint64(binary.BigEndian.Uint32(s.To4()))
|
|
}
|
|
|
|
// IsLocalIP 判断是否为本地IP
|
|
func IsLocalIP(ipString string) bool {
|
|
var ip = net.ParseIP(ipString)
|
|
if ip == nil {
|
|
return false
|
|
}
|
|
|
|
// IPv6
|
|
if strings.Contains(ipString, ":") {
|
|
if ip.String() == "::1" {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
// 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)
|
|
}
|