pancheri/resolver.go

38 lines
680 B
Go
Raw Normal View History

2023-10-01 20:43:10 +00:00
package pancheri
import (
"github.com/miekg/dns"
"github.com/sirupsen/logrus"
)
type Resolver struct {
client *dns.Client
upstream string
}
func NewResolver(upstream string) *Resolver {
return &Resolver{
client: new(dns.Client),
upstream: upstream,
}
}
2023-10-03 00:50:21 +00:00
func (r *Resolver) Resolve(domain string, qtype uint16) ([]dns.RR, int, error) {
2023-10-01 20:43:10 +00:00
logrus.WithFields(logrus.Fields{
"domain": domain,
"qtype": qtype,
}).Trace("performing upstream resolution")
m := new(dns.Msg)
m.SetQuestion(dns.Fqdn(domain), qtype)
m.RecursionDesired = true
in, _, err := r.client.Exchange(m, r.upstream)
if err != nil {
return nil, err
2023-10-01 20:43:10 +00:00
}
2023-10-03 00:50:21 +00:00
return in.Answer, in.Rcode, nil
2023-10-01 20:43:10 +00:00
}