feat: Simplify resolvers

This commit is contained in:
Karan Sharma 2020-12-16 19:40:01 +05:30
parent ec46ed5990
commit 114e5ba68b
5 changed files with 67 additions and 90 deletions

View file

@ -1,7 +1,6 @@
package main
import (
"fmt"
"os"
"github.com/knadh/koanf"
@ -39,6 +38,8 @@ func main() {
f.Int("timeout", 5, "Sets the timeout for a query to T seconds. The default timeout is 5 seconds.")
f.Bool("search", false, "Use the search list provided in resolv.conf. It sets the `ndots` parameter as well unless overriden by `ndots` flag.")
f.Int("ndots", 1, "Specify the ndots paramter. Default value is taken from resolv.conf and fallbacks to 1 if ndots statement is missing in resolv.conf")
f.BoolP("ipv4", "4", false, "Use IPv4 only")
f.BoolP("ipv6", "6", false, "Use IPv6 only")
// Output Options
f.BoolP("json", "J", false, "Set the output format as JSON")
@ -82,7 +83,6 @@ func main() {
hub.Logger.Exit(2)
}
if ns.Address != "" && ns.Type != "" {
fmt.Println("appending", ns.Address, ns.Type)
hub.Nameservers = append(hub.Nameservers, ns)
}
}

View file

@ -19,6 +19,7 @@ const (
DefaultTLSPort = "853"
// DefaultUDPPort specifies the default port for a DNS server connecting over UDP
DefaultUDPPort = "53"
DefaultTCPPort = "53"
UDPResolver = "udp"
DOHResolver = "doh"
TCPResolver = "tcp"
@ -40,12 +41,28 @@ func (hub *Hub) initResolver() error {
}
hub.Resolver = append(hub.Resolver, rslvr)
}
if ns.Type == TCPResolver {
hub.Logger.Debug("initiating TCP resolver")
rslvr, err := resolvers.NewTCPResolver(ns.Address, resolvers.TCPResolverOpts{
if ns.Type == DOTResolver {
hub.Logger.Debug("initiating DOT resolver")
rslvr, err := resolvers.NewClassicResolver(ns.Address, resolvers.ClassicResolverOpts{
IPv4Only: hub.QueryFlags.UseIPv4,
IPv6Only: hub.QueryFlags.UseIPv6,
Timeout: hub.QueryFlags.Timeout * time.Second,
UseTLS: true,
UseTCP: true,
})
if err != nil {
return err
}
hub.Resolver = append(hub.Resolver, rslvr)
}
if ns.Type == TCPResolver {
hub.Logger.Debug("initiating TCP resolver")
rslvr, err := resolvers.NewClassicResolver(ns.Address, resolvers.ClassicResolverOpts{
IPv4Only: hub.QueryFlags.UseIPv4,
IPv6Only: hub.QueryFlags.UseIPv6,
Timeout: hub.QueryFlags.Timeout * time.Second,
UseTLS: false,
UseTCP: true,
})
if err != nil {
return err
@ -54,10 +71,12 @@ func (hub *Hub) initResolver() error {
}
if ns.Type == UDPResolver {
hub.Logger.Debug("initiating UDP resolver")
rslvr, err := resolvers.NewUDPResolver(ns.Address, resolvers.UDPResolverOpts{
rslvr, err := resolvers.NewClassicResolver(ns.Address, resolvers.ClassicResolverOpts{
IPv4Only: hub.QueryFlags.UseIPv4,
IPv6Only: hub.QueryFlags.UseIPv6,
Timeout: hub.QueryFlags.Timeout * time.Second,
UseTLS: false,
UseTCP: false,
})
if err != nil {
return err
@ -113,13 +132,21 @@ func initNameserver(n string) (Nameserver, error) {
ns.Type = DOHResolver
ns.Address = u.String()
}
if u.Scheme == "tls" {
ns.Type = DOTResolver
if u.Port() == "" {
ns.Address = net.JoinHostPort(u.Hostname(), DefaultTLSPort)
} else {
ns.Address = net.JoinHostPort(u.Hostname(), u.Port())
}
}
if u.Scheme == "tcp" {
ns.Type = TCPResolver
if i := net.ParseIP(n); i != nil {
// if no port specified in nameserver, append defaults.
n = net.JoinHostPort(n, DefaultTLSPort)
if u.Port() == "" {
ns.Address = net.JoinHostPort(u.Hostname(), DefaultTCPPort)
} else {
ns.Address = net.JoinHostPort(u.Hostname(), u.Port())
}
ns.Address = u.String()
}
if u.Scheme == "udp" {
ns.Type = UDPResolver