feat: ndots and search list support
This commit is contained in:
parent
7df12b2229
commit
d9715b1932
10 changed files with 199 additions and 82 deletions
|
@ -1,7 +1,6 @@
|
|||
package resolvers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
|
@ -47,6 +46,7 @@ func NewClassicResolver(servers []string, opts ClassicResolverOpts) (Resolver, e
|
|||
nameservers = append(nameservers, srv)
|
||||
}
|
||||
}
|
||||
|
||||
client.Net = "udp"
|
||||
if opts.UseIPv4 {
|
||||
client.Net = "udp4"
|
||||
|
@ -66,35 +66,6 @@ func NewClassicResolver(servers []string, opts ClassicResolverOpts) (Resolver, e
|
|||
}, nil
|
||||
}
|
||||
|
||||
// NewResolverFromResolvFile loads the configuration from resolv config file
|
||||
// and initialises a DNS resolver.
|
||||
func NewResolverFromResolvFile(resolvFilePath string) (Resolver, error) {
|
||||
if resolvFilePath == "" {
|
||||
resolvFilePath = DefaultResolvConfPath
|
||||
}
|
||||
cfg, err := dns.ClientConfigFromFile(resolvFilePath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
servers := make([]string, 0, len(cfg.Servers))
|
||||
for _, s := range cfg.Servers {
|
||||
ip := net.ParseIP(s)
|
||||
// handle IPv6
|
||||
if ip != nil && ip.To4() != nil {
|
||||
servers = append(servers, fmt.Sprintf("%s:%s", s, cfg.Port))
|
||||
} else {
|
||||
servers = append(servers, fmt.Sprintf("[%s]:%s", s, cfg.Port))
|
||||
}
|
||||
}
|
||||
|
||||
client := &dns.Client{}
|
||||
return &ClassicResolver{
|
||||
client: client,
|
||||
servers: servers,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Lookup prepare a list of DNS messages to be sent to the server.
|
||||
// It's possible to send multiple question in one message
|
||||
// but some nameservers are not able to
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue