package resolver import ( "hash/fnv" "regexp" "strconv" "strings" ) var reANSI = regexp.MustCompile(`\x1B\[[0-9;]*[A-Za-z]`) func UniqueStrings(in []string) []string { seen := map[string]struct{}{} var out []string for _, v := range in { if _, ok := seen[v]; !ok { seen[v] = struct{}{} out = append(out, v) } } return out } func PickDNSStartIndex(host string, size int) int { if size <= 1 { return 0 } h := fnv.New32a() _, _ = h.Write([]byte(strings.ToLower(strings.TrimSpace(host)))) return int(h.Sum32() % uint32(size)) } func StripANSI(s string) string { return reANSI.ReplaceAllString(s, "") } func IsPrivateIPv4(ip string) bool { parts := strings.Split(strings.Split(ip, "/")[0], ".") if len(parts) != 4 { return true } vals := make([]int, 4) for i, p := range parts { n, err := strconv.Atoi(p) if err != nil || n < 0 || n > 255 { return true } vals[i] = n } if vals[0] == 10 || vals[0] == 127 || vals[0] == 0 { return true } if vals[0] == 192 && vals[1] == 168 { return true } if vals[0] == 172 && vals[1] >= 16 && vals[1] <= 31 { return true } return false }