62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
package util
|
|
|
|
import "strings"
|
|
|
|
// IsIPv4 checks if a string is a valid IPv4 address.
|
|
func IsIPv4(value string) bool {
|
|
parts := strings.Split(value, ".")
|
|
if len(parts) != 4 {
|
|
return false
|
|
}
|
|
for _, part := range parts {
|
|
if len(part) == 0 || len(part) > 3 {
|
|
return false
|
|
}
|
|
for _, c := range part {
|
|
if c < '0' || c > '9' {
|
|
return false
|
|
}
|
|
}
|
|
var n int
|
|
for _, c := range part {
|
|
n = n*10 + int(c-'0')
|
|
}
|
|
if n > 255 {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
// IsIPv6 checks if a string is a valid IPv6 address (simplified).
|
|
func IsIPv6(value string) bool {
|
|
if !strings.Contains(value, ":") {
|
|
return false
|
|
}
|
|
for _, c := range value {
|
|
if !((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') || c == ':') {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
// IsIPAddress checks if a string is any IP address.
|
|
func IsIPAddress(value string) bool {
|
|
return IsIPv4(value) || IsIPv6(value)
|
|
}
|
|
|
|
// ShouldResolveServer returns true if the server value is a hostname that should be DNS-resolved.
|
|
func ShouldResolveServer(server string) bool {
|
|
s := strings.TrimSpace(server)
|
|
if s == "" || IsIPAddress(s) {
|
|
return false
|
|
}
|
|
for _, c := range s {
|
|
if !((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '.' || c == '-') {
|
|
return false
|
|
}
|
|
}
|
|
return strings.Contains(s, ".")
|
|
}
|