diff options
author | Stefan Magnus Landrø <stefan.landro@gmail.com> | 2017-10-17T20·49+0200 |
---|---|---|
committer | Vincent Ambo <tazjin@gmail.com> | 2017-10-20T07·43+0200 |
commit | 68e2f99062952290b59699a83187e7a5058fac3d (patch) | |
tree | 2a03506ab4ea8c55a02f032b07d3916a92489505 /templater/dns.go | |
parent | b20bc5f57a9e4e25760f03de752c2ed2811fa5fe (diff) |
feat templater: Add IP lookup function
This introduces support for looking up IP addresses using local DNS resolver. Function will return a list of all IP addresses associated with hostname. Further processing can be achieved using supported list template functions.
Diffstat (limited to 'templater/dns.go')
-rw-r--r-- | templater/dns.go | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/templater/dns.go b/templater/dns.go new file mode 100644 index 000000000000..087399202b0c --- /dev/null +++ b/templater/dns.go @@ -0,0 +1,34 @@ +// This file contains the implementation of a template function for retrieving IP addresses from DNS +package templater + +import ( + "fmt" + "github.com/polydawn/meep" + "net" + "os" +) + +type DNSError struct { + meep.TraitAutodescribing + meep.TraitCausable + Output string +} + +func GetIPsFromDNS(host string) ([]interface{}, error) { + fmt.Fprintf(os.Stderr, "Attempting to look up IP for %s in DNS\n", host) + ips, err := net.LookupIP(host) + + if err != nil { + return nil, meep.New( + &DNSError{Output: "IP address lookup failed"}, + meep.Cause(err), + ) + } + + var result []interface{} = make([]interface{}, len(ips)) + for i, ip := range ips { + result[i] = ip + } + + return result, nil +} |