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