42 lines
694 B
Go
42 lines
694 B
Go
|
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,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (r *Resolver) Resolve(domain string, qtype uint16) error {
|
||
|
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 err
|
||
|
}
|
||
|
|
||
|
for _, ans := range in.Answer {
|
||
|
logrus.Debug(ans)
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|