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, ".") }