package main import ( "errors" "fmt" "net" "time" "github.com/miekg/dns" ) type DnsTest struct { server net.IP testHost string rtt time.Duration answer net.IP } func RunTest(srv net.IP, host string) (*DnsTest, error) { m := new(dns.Msg) m.SetQuestion(host, dns.TypeA) c := new(dns.Client) in, rtt, err := c.Exchange(m, fmt.Sprintf("%s:53", srv)) if err != nil { return nil, err } for _, answer := range in.Answer { if t, ok := answer.(*dns.A); ok { return &DnsTest{server: srv, testHost: host, rtt: rtt, answer: t.A}, nil } } return nil, errors.New("No answer found") } func main() { testHosts := []string{ "gitea.snamellit.com", "www.snamellit.com", "home.snamellit.com", "nas.snamellit.com" , "gitlab.melexis.com", "dsl.melexis.com", "cvs.tess.elex.be", "cvs.sofia.elex.be", "cvs.sensors.elex.be", "cvs.erfurt.elex.be", "www.google.com" } for _, host := range testHosts { t, err := RunTest(net.ParseIP("192.168.1.1"), host + ".") if err != nil { fmt.Println("Error for ", host, ":", err.Error()) continue } fmt.Println("Answer ", t.server, t.testHost, t.answer, t.rtt) } }