1
0
mirror of https://github.com/taigrr/godns synced 2025-01-18 04:03:25 -08:00

update resolver name

This commit is contained in:
Timothy 2020-06-19 21:43:01 +08:00
parent de42aa6073
commit b1e94fda52
No known key found for this signature in database
GPG Key ID: DA25A2861AA0F2D1

View File

@ -1,4 +1,4 @@
// Package dns_resolver is a simple dns resolver // Package resolver is a simple dns resolver
// based on miekg/dns // based on miekg/dns
package resolver package resolver
@ -13,42 +13,42 @@ import (
"github.com/miekg/dns" "github.com/miekg/dns"
) )
// DnsResolver represents a dns resolver // DNSResolver represents a dns resolver
type DnsResolver struct { type DNSResolver struct {
Servers []string Servers []string
RetryTimes int RetryTimes int
r *rand.Rand r *rand.Rand
} }
// New initializes DnsResolver. // New initializes DnsResolver.
func New(servers []string) *DnsResolver { func New(servers []string) *DNSResolver {
for i := range servers { for i := range servers {
servers[i] = net.JoinHostPort(servers[i], "53") servers[i] = net.JoinHostPort(servers[i], "53")
} }
return &DnsResolver{servers, len(servers) * 2, rand.New(rand.NewSource(time.Now().UnixNano()))} return &DNSResolver{servers, len(servers) * 2, rand.New(rand.NewSource(time.Now().UnixNano()))}
} }
// NewFromResolvConf initializes DnsResolver from resolv.conf like file. // NewFromResolvConf initializes DnsResolver from resolv.conf like file.
func NewFromResolvConf(path string) (*DnsResolver, error) { func NewFromResolvConf(path string) (*DNSResolver, error) {
if _, err := os.Stat(path); os.IsNotExist(err) { if _, err := os.Stat(path); os.IsNotExist(err) {
return &DnsResolver{}, errors.New("no such file or directory: " + path) return &DNSResolver{}, errors.New("no such file or directory: " + path)
} }
config, err := dns.ClientConfigFromFile(path) config, err := dns.ClientConfigFromFile(path)
servers := []string{} servers := []string{}
for _, ipAddress := range config.Servers { for _, ipAddress := range config.Servers {
servers = append(servers, net.JoinHostPort(ipAddress, "53")) servers = append(servers, net.JoinHostPort(ipAddress, "53"))
} }
return &DnsResolver{servers, len(servers) * 2, rand.New(rand.NewSource(time.Now().UnixNano()))}, err return &DNSResolver{servers, len(servers) * 2, rand.New(rand.NewSource(time.Now().UnixNano()))}, err
} }
// LookupHost returns IP addresses of provied host. // LookupHost returns IP addresses of provied host.
// In case of timeout retries query RetryTimes times. // In case of timeout retries query RetryTimes times.
func (r *DnsResolver) LookupHost(host string, dnsType uint16) ([]net.IP, error) { func (r *DNSResolver) LookupHost(host string, dnsType uint16) ([]net.IP, error) {
return r.lookupHost(host, dnsType, r.RetryTimes) return r.lookupHost(host, dnsType, r.RetryTimes)
} }
func (r *DnsResolver) lookupHost(host string, dnsType uint16, triesLeft int) ([]net.IP, error) { func (r *DNSResolver) lookupHost(host string, dnsType uint16, triesLeft int) ([]net.IP, error) {
m1 := new(dns.Msg) m1 := new(dns.Msg)
m1.Id = dns.Id() m1.Id = dns.Id()
m1.RecursionDesired = true m1.RecursionDesired = true