resolver

package
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 26, 2024 License: MIT Imports: 11 Imported by: 1

Documentation

Index

Constants

View Source
const (
	DNSKEY_ZSK uint16 = 256 // Zone Signing Key
	DNSKEY_KSK uint16 = 257 // Key Signing Key
)

DNSSEC key flags

Variables

This section is empty.

Functions

func NewHardError

func NewHardError(s string) error

Types

type AuthenticationTrace

type AuthenticationTrace struct {
	Records []authenticationTraceRecord
}

func (*AuthenticationTrace) Add

func (t *AuthenticationTrace) Add(r authenticationTraceRecord)

type AuthenticationTraceDelegationSignerCheck

type AuthenticationTraceDelegationSignerCheck struct {
	Depth  uint8
	Child  string
	Parent string
	Hash   string
}

type AuthenticationTraceLookup

type AuthenticationTraceLookup struct {
	Domain     string
	Rrtype     string
	Nameserver string
	Latency    time.Duration
	Answers    []string
}

type AuthenticationTraceSignatureValidation

type AuthenticationTraceSignatureValidation struct {
	Depth     uint8
	KeyType   string
	Domain    string
	Zone      string
	Key       string
	KeySha256 string
	Algorithm string
	Signature string
	Records   []string
	Err       error
	Valid     bool
}

type DNSClient

type DNSClient interface {
	Exchange(m *dns.Msg, address string) (r *dns.Msg, rtt time.Duration, err error)
}

DNSClient interface abstracts the dns.Client to allow mocking in tests.

type FailoverNameserver added in v0.3.0

type FailoverNameserver struct {
	// contains filtered or unexported fields
}

func (*FailoverNameserver) Query added in v0.3.0

func (r *FailoverNameserver) Query(name string, rrtype uint16) (*dns.Msg, time.Duration, error)

Query

  • First we try the query with UDP. -- If no error *and* not truncated, return. -- Else we...
  • Try the query with TCP. -- If not error, return. -- Else we return the original UDP response (which *might* not have bene an error, just truncated).

func (*FailoverNameserver) String added in v0.3.0

func (r *FailoverNameserver) String() string

type HardError

type HardError struct {
	// contains filtered or unexported fields
}

HardError implies that we should stop all attempts to continue. 'Normal' errors may result in more nameservers being tried.

func (*HardError) Error

func (e *HardError) Error() string

type LookupNameserver

type LookupNameserver struct {
	// contains filtered or unexported fields
}

LookupNameserver represents the details of a DNS name server, including protocol, address, port, and client.

func (LookupNameserver) Query

func (n LookupNameserver) Query(name string, rrtype uint16) (*dns.Msg, time.Duration, error)

Query sends a DNS query to the LookupNameserver.

func (LookupNameserver) String

func (n LookupNameserver) String() string

String returns a human-readable string representation of the LookupNameserver details.

type NameServer

type NameServer interface {
	// Query perform the DNS query/lookup.
	Query(name string, rrtype uint16) (*dns.Msg, time.Duration, error)

	// String returns a human-readable string representation of the NameServer's details.
	String() string
}

NameServer interface defines the methods for a DNS name server.

func NewFailoverNameserver added in v0.3.0

func NewFailoverNameserver(address, port string) NameServer

NewFailoverNameserver first tries a Nameserver over UDP. In the event of an error, or if the message is truncated, it retries the request via TCP.

func NewTcpNameserver

func NewTcpNameserver(address, port string) NameServer

NewTcpNameserver creates a LookupNameserver instance using TCP protocol.

func NewTlsNameserver

func NewTlsNameserver(address, port, domain string) NameServer

NewTlsNameserver creates a LookupNameserver instance using TCP over TLS protocol. The domain parameter is required for TLS certificate verification.

func NewUdpNameserver

func NewUdpNameserver(address, port string) NameServer

NewUdpNameserver creates a LookupNameserver instance using UDP protocol.

type RecursiveNameserver

type RecursiveNameserver struct {
	Trace       *RecursiveQueryTrace
	EnableTrace bool
	// contains filtered or unexported fields
}

func NewRecursiveNameserver

func NewRecursiveNameserver() *RecursiveNameserver

func (*RecursiveNameserver) Query

func (n *RecursiveNameserver) Query(name string, rrtype uint16) (*dns.Msg, time.Duration, error)

func (*RecursiveNameserver) String

func (n *RecursiveNameserver) String() string

type RecursiveQueryTrace

type RecursiveQueryTrace struct {
	Records []recursiveQueryTraceRecord
}

func (*RecursiveQueryTrace) Add

func (t *RecursiveQueryTrace) Add(r recursiveQueryTraceRecord)

type RecursiveQueryTraceLookup

type RecursiveQueryTraceLookup struct {
	Depth uint8

	Domain string
	Rrtype string

	ServerHost string
	ServerUri  string

	Latency time.Duration

	Answers     []string
	Nameservers []string
	Extra       []string

	Truncated     bool
	Authoritative bool
}

type Resolver

type Resolver struct {
	RootDNSSECRecords        []*dns.DS
	LocallyAuthenticateData  bool
	RemotelyAuthenticateData bool
	RandomNameserver         bool

	Trace       *dnssec.Trace
	EnableTrace bool
	// contains filtered or unexported fields
}

func NewResolver

func NewResolver(nameservers []NameServer) *Resolver

func (*Resolver) Authenticate

func (d *Resolver) Authenticate(msg *dns.Msg, ctx context.Context) error

Authenticate verifies the DNSSEC signatures in the DNS response message

func (*Resolver) Query

func (d *Resolver) Query(name string, rrtype uint16) (*dns.Msg, time.Duration, error)

func (*Resolver) QueryA

func (d *Resolver) QueryA(name string) ([]*dns.A, error)

QueryA performs a DNS query for A records

func (*Resolver) QueryAAAA

func (d *Resolver) QueryAAAA(name string) ([]*dns.AAAA, error)

QueryAAAA performs a DNS query for AAAA records

func (*Resolver) QueryANY

func (d *Resolver) QueryANY(name string) ([]dns.RR, error)

QueryANY performs a DNS query for ANY records

func (*Resolver) QueryCNAME

func (d *Resolver) QueryCNAME(name string) ([]*dns.CNAME, error)

QueryCNAME performs a DNS query for CNAME records

func (*Resolver) QueryDNSKEY

func (d *Resolver) QueryDNSKEY(name string) ([]*dns.DNSKEY, error)

QueryDNSKEY performs a DNS query for DNSKEY records

func (*Resolver) QueryDS

func (d *Resolver) QueryDS(name string) ([]*dns.DS, error)

QueryDS performs a DNS query for DS records

func (*Resolver) QueryMX

func (d *Resolver) QueryMX(name string) ([]*dns.MX, error)

QueryMX performs a DNS query for MX records

func (*Resolver) QueryNS

func (d *Resolver) QueryNS(name string) ([]*dns.NS, error)

QueryNS performs a DNS query for NS records

func (*Resolver) QueryPTR

func (d *Resolver) QueryPTR(name string) ([]*dns.PTR, error)

QueryPTR performs a DNS query for PTR records

func (*Resolver) QuerySOA

func (d *Resolver) QuerySOA(name string) ([]*dns.SOA, error)

QuerySOA performs a DNS query for SOA records

func (*Resolver) QuerySRV

func (d *Resolver) QuerySRV(name string) ([]*dns.SRV, error)

QuerySRV performs a DNS query for SRV records

func (*Resolver) QueryTXT

func (d *Resolver) QueryTXT(name string) ([]*dns.TXT, error)

QueryTXT performs a DNS query for TXT records

type SignatureSet

type SignatureSet struct {
	// contains filtered or unexported fields
}

SignatureSet represents a set of DNS Records along with their corresponding RRSIG and DNSKEY

type SignatureSets

type SignatureSets []*SignatureSet

SignatureSets represents a collection of SignatureSet pointers

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL