diff options
| author | Shulhan <ms@kilabit.info> | 2018-09-08 12:38:37 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2018-09-08 12:38:37 +0700 |
| commit | 5e4e1820ef21eed9a261a97627b2498527df61fd (patch) | |
| tree | 40994372448be03253424b5e63d814ed87812184 /cmd | |
| parent | dfae1e52c7ddbe1fc9c0cdf0f4ae8c37c809def7 (diff) | |
| download | rescached-5e4e1820ef21eed9a261a97627b2498527df61fd.tar.xz | |
cmd/resolver: log non success response code
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/resolver/main.go | 51 |
1 files changed, 39 insertions, 12 deletions
diff --git a/cmd/resolver/main.go b/cmd/resolver/main.go index 7cdb4f5..9af032a 100644 --- a/cmd/resolver/main.go +++ b/cmd/resolver/main.go @@ -19,6 +19,11 @@ const ( defResolvConf = "/etc/resolv.conf" ) +var ( + opts *options + cl *dns.UDPClient +) + func parseNameServers(nameservers []string) (udpAddrs []*net.UDPAddr) { for _, ns := range nameservers { addr, err := libnet.ParseUDPAddr(ns, dns.DefaultPort) @@ -100,10 +105,38 @@ func messagePrint(nameserver string, msg *dns.Message) string { return b.String() } +func lookup(qname []byte) *dns.Message { + res, err := cl.Lookup(opts.qtype, opts.qclass, qname) + if err != nil { + log.Println("! Lookup: ", err) + return nil + } + + if res.Header.RCode == 0 { + return res + } + + switch res.Header.RCode { + case dns.RCodeErrFormat: + log.Println("! ResponseCode: Format error") + case dns.RCodeErrServer: + log.Println("! ResponseCode: Server failure") + case dns.RCodeErrName: + log.Println("! ResponseCode: Domain not exist") + case dns.RCodeNotImplemented: + log.Println("! ResponseCode: Not implemented") + case dns.RCodeRefused: + log.Println("! ResponseCode: Refused") + } + return nil +} + func main() { + var err error + log.SetFlags(0) - opts, err := newOptions() + opts, err = newOptions() if err != nil { log.Fatal("! newOptions: ", err) } @@ -124,7 +157,7 @@ func main() { } } - cl, err := dns.NewUDPClient("") + cl, err = dns.NewUDPClient("") if err != nil { log.Fatal("! dns.NewUDPClient: ", err) } @@ -148,20 +181,14 @@ func main() { for x := 0; x < cr.Attempts; x++ { for _, addr := range nsAddrs { cl.Addr = addr - nameserver = addr.String() + nameserver = cl.Addr.String() fmt.Printf("> Lookup %s at %s\n", qname, nameserver) - res, err = cl.Lookup(opts.qtype, opts.qclass, []byte(qname)) - if err != nil { - log.Println("! Lookup: ", err) - continue + res = lookup([]byte(qname)) + if res != nil { + goto out } - if res.Header.ANCount == 0 { - continue - } - - goto out } } } |
