Documentation
¶
Index ¶
- func CloseResolvers(resolvers []Resolver) error
- type Answer
- type Authority
- type ClassicResolver
- type ClassicResolverOpts
- type DNSCryptResolver
- type DNSCryptResolverOpts
- type DOHResolver
- type DOQResolver
- type EdnsInfo
- type ExtendedError
- type LookupError
- type Options
- type QueryFlags
- type QueryFunc
- type Question
- type Resolver
- func LoadResolvers(opts Options) ([]Resolver, error)
- func NewClassicResolver(server string, classicOpts ClassicResolverOpts, resolverOpts Options) (Resolver, error)
- func NewDNSCryptResolver(server string, dnscryptOpts DNSCryptResolverOpts, resolverOpts Options) (Resolver, error)
- func NewDOHResolver(server string, resolverOpts Options) (Resolver, error)
- func NewDOQResolver(server string, resolverOpts Options) (Resolver, error)
- type Response
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CloseResolvers ¶ added in v1.3.0
CloseResolvers closes resolver-owned resources and joins any close errors. Resolvers without a Close method don't own persistent resources.
Types ¶
type ClassicResolver ¶
type ClassicResolver struct {
// contains filtered or unexported fields
}
ClassicResolver represents the config options for setting up a Resolver.
func (*ClassicResolver) Address ¶ added in v1.1.7
func (r *ClassicResolver) Address() string
Address implements the Resolver interface.
func (*ClassicResolver) Lookup ¶
func (r *ClassicResolver) Lookup(ctx context.Context, questions []dns.Question, flags QueryFlags) ([]Response, error)
Lookup implements the Resolver interface
type ClassicResolverOpts ¶
ClassicResolverOpts holds options for setting up a Classic resolver.
type DNSCryptResolver ¶ added in v0.4.0
type DNSCryptResolver struct {
// contains filtered or unexported fields
}
DNSCryptResolver represents the config options for setting up a Resolver.
func (*DNSCryptResolver) Address ¶ added in v1.1.7
func (r *DNSCryptResolver) Address() string
Address implements the Resolver interface.
func (*DNSCryptResolver) Lookup ¶ added in v0.4.0
func (r *DNSCryptResolver) Lookup(ctx context.Context, questions []dns.Question, flags QueryFlags) ([]Response, error)
Lookup implements the Resolver interface
type DNSCryptResolverOpts ¶ added in v0.4.0
type DNSCryptResolverOpts struct {
UseTCP bool
}
DNSCryptResolverOpts holds options for setting up a DNSCrypt resolver.
type DOHResolver ¶
type DOHResolver struct {
// contains filtered or unexported fields
}
DOHResolver represents the config options for setting up a DOH based resolver.
func (*DOHResolver) Address ¶ added in v1.1.7
func (r *DOHResolver) Address() string
Address implements the Resolver interface.
func (*DOHResolver) Close ¶ added in v1.3.0
func (r *DOHResolver) Close() error
Close releases connections and sockets owned by the HTTP transport.
func (*DOHResolver) Lookup ¶
func (r *DOHResolver) Lookup(ctx context.Context, questions []dns.Question, flags QueryFlags) ([]Response, error)
Lookup implements the Resolver interface
type DOQResolver ¶ added in v0.4.2
type DOQResolver struct {
// contains filtered or unexported fields
}
DOQResolver represents the config options for setting up a DOQ based resolver.
func (*DOQResolver) Address ¶ added in v1.1.7
func (r *DOQResolver) Address() string
Address implements the Resolver interface.
func (*DOQResolver) Lookup ¶ added in v0.4.2
func (r *DOQResolver) Lookup(ctx context.Context, questions []dns.Question, flags QueryFlags) ([]Response, error)
Lookup implements the Resolver interface
type EdnsInfo ¶ added in v1.1.0
type EdnsInfo struct {
Nameserver string `json:"nameserver,omitempty"`
NSID string `json:"nsid,omitempty"`
Cookie string `json:"cookie,omitempty"`
Subnet string `json:"subnet,omitempty"`
SubnetScope uint8 `json:"subnet_scope,omitempty"`
// ExtendedErr is retained for JSON compatibility and contains the first
// EDE option. ExtendedErrors is the authoritative ordered representation.
ExtendedErr string `json:"extended_error,omitempty"`
ExtendedErrors []ExtendedError `json:"extended_errors,omitempty"`
UDPSize uint16 `json:"udp_size,omitempty"`
DNSSECOk bool `json:"dnssec_ok,omitempty"`
}
type ExtendedError ¶ added in v1.3.0
type LookupError ¶ added in v1.1.7
LookupError tags a resolver failure with the nameserver that produced it so partial failures can be reported per-resolver instead of as an opaque top-level error.
func (*LookupError) Error ¶ added in v1.1.7
func (e *LookupError) Error() string
func (*LookupError) Unwrap ¶ added in v1.1.7
func (e *LookupError) Unwrap() error
type Options ¶ added in v0.2.0
type Options struct {
Logger *slog.Logger
Nameservers []models.Nameserver
UseIPv4 bool
UseIPv6 bool
UseHTTP3 bool
SearchList []string
Ndots int
Timeout time.Duration
Strategy string
InsecureSkipVerify bool
TLSHostname string
}
Options represent a set of common options to configure a Resolver.
type QueryFlags ¶ added in v1.0.0
type QueryFlags struct {
AA bool // Authoritative Answer
AD bool // Authenticated Data
CD bool // Checking Disabled
RD bool // Recursion Desired
Z bool // Reserved for future use
DO bool // DNSSEC OK
// EDNS0 options
NSID bool // Request Name Server Identifier
Cookie bool // Request DNS Cookie
Padding bool // Request EDNS padding for privacy
EDE bool // Enable EDNS to receive Extended DNS Errors
ECS string // EDNS Client Subnet (e.g., "192.0.2.0/24" or "2001:db8::/32")
Bufsize uint16 // EDNS UDP buffer size (default: 1232 when EDNS enabled)
}
QueryFlags represents the various DNS query flags
type Resolver ¶
type Resolver interface {
// Address returns the nameserver identity used when reporting errors.
Address() string
Lookup(ctx context.Context, questions []dns.Question, flags QueryFlags) ([]Response, error)
}
Resolver implements the configuration for a DNS Client. Different types of providers can load a DNS Resolver satisfying this interface.
func LoadResolvers ¶ added in v0.3.0
LoadResolvers loads differently configured resolvers based on a list of nameserver.
func NewClassicResolver ¶
func NewClassicResolver(server string, classicOpts ClassicResolverOpts, resolverOpts Options) (Resolver, error)
NewClassicResolver accepts a list of nameservers and configures a DNS resolver.
func NewDNSCryptResolver ¶ added in v0.4.0
func NewDNSCryptResolver(server string, dnscryptOpts DNSCryptResolverOpts, resolverOpts Options) (Resolver, error)
NewDNSCryptResolver accepts a list of nameservers and configures a DNS resolver.
func NewDOHResolver ¶
NewDOHResolver accepts a nameserver address and configures a DOH based resolver.
type Response ¶
type Response struct {
Answers []Answer `json:"answers"`
Authorities []Authority `json:"authorities"`
Questions []Question `json:"questions"`
Additional []Answer `json:"additional,omitempty"`
Edns *EdnsInfo `json:"edns,omitempty"`
}
Response represents a custom output format for DNS queries. It wraps metadata about the DNS query and the DNS Answer as well.
func ConcurrentLookup ¶ added in v1.0.3
func ConcurrentLookup(ctx context.Context, questions []dns.Question, flags QueryFlags, queryFunc QueryFunc, logger *slog.Logger) ([]Response, error)
ConcurrentLookup performs concurrent DNS lookups across multiple questions against a single resolver. It always waits for all in-flight goroutines so completed work is never discarded when the context is cancelled or expires mid-flight; callers receive whatever responses finished plus a joined error describing any per-question failures.