in internal/network/network.go [96:127]
func resolveIPwServer(ip string, servers []net.IP, logger *log.Logger) (string, error) {
if servers == nil {
return "", errors.New("no alternate DNS servers configured")
}
c := dns.Client{}
m := dns.Msg{}
fqdn, err := dns.ReverseAddr(ip)
if err != nil {
return "", err
}
m.SetQuestion(fqdn, dns.TypePTR)
for _, s := range servers {
r, t, err := c.Exchange(&m, s.String()+":53")
if err != nil || len(r.Answer) == 0 {
continue
}
logger.Debug("Reverse DNS resolution for ip with user-configured DNS server took",
zap.String("ip", ip),
zap.Float64("duration", t.Seconds()))
resolved := strings.Split(r.Answer[0].String(), "\t")
// return fourth tab-delimited field of DNS query response
return resolved[4], nil
}
logger.Warn("failed to DNS resolve IP with alternate servers", zap.String("ip", ip))
return "", errors.Errorf("failed to DNS resolve %s with alternate servers", ip)
}