61 lines
1.1 KiB
Go
61 lines
1.1 KiB
Go
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
|
|
}
|