github.com/hairyhenderson/templater@v3.5.0+incompatible/net/net.go (about) 1 // Package net contains functions to help with network-oriented lookups 2 package net 3 4 import ( 5 "net" 6 ) 7 8 // LookupIP - 9 func LookupIP(name string) (string, error) { 10 i, err := LookupIPs(name) 11 if err != nil { 12 return "", err 13 } 14 if len(i) == 0 { 15 return "", nil 16 } 17 return i[0], nil 18 } 19 20 // LookupIPs - 21 func LookupIPs(name string) ([]string, error) { 22 srcIPs, err := net.LookupIP(name) 23 if err != nil { 24 return nil, err 25 } 26 var ips []string 27 for _, v := range srcIPs { 28 if v.To4() != nil && !contains(ips, v.String()) { 29 ips = append(ips, v.String()) 30 } 31 } 32 return ips, nil 33 } 34 35 func contains(a []string, s string) bool { 36 for _, v := range a { 37 if v == s { 38 return true 39 } 40 } 41 return false 42 } 43 44 // LookupCNAME - 45 func LookupCNAME(name string) (string, error) { 46 return net.LookupCNAME(name) 47 } 48 49 // LookupTXT - 50 func LookupTXT(name string) ([]string, error) { 51 return net.LookupTXT(name) 52 } 53 54 // LookupSRV - 55 func LookupSRV(name string) (*net.SRV, error) { 56 srvs, err := LookupSRVs(name) 57 if err != nil { 58 return nil, err 59 } 60 return srvs[0], nil 61 } 62 63 // LookupSRVs - 64 func LookupSRVs(name string) ([]*net.SRV, error) { 65 _, addrs, err := net.LookupSRV("", "", name) 66 if err != nil { 67 return nil, err 68 } 69 return addrs, nil 70 }