godns/main.go

48 lines
1.1 KiB
Go
Raw Permalink Normal View History

2023-09-21 23:58:08 +02:00
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)
}
}