Files
sub-store/internal/util/ip.go
T

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