resolvers

package
v3.10.4 Latest Latest
Warning

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

Go to latest
Published: Sep 24, 2020 License: Apache-2.0 Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PriorityLow int = iota
	PriorityHigh
	PriorityCritical
)

The priority levels for DNS resolution.

View Source
const (
	QueryAttempts    = 64
	QueryTimeouts    = 65
	QueryRTT         = 66
	QueryCompletions = 67
)

Index values into the stats map.

View Source
const (
	MaxDNSNameLen  = 253
	MaxDNSLabelLen = 63
	MinLabelLen    = 6
	MaxLabelLen    = 24
	LDHChars       = "abcdefghijklmnopqrstuvwxyz0123456789-"
)

Constants related to DNS labels.

View Source
const (
	WildcardTypeNone = iota
	WildcardTypeStatic
	WildcardTypeDynamic
)

Names for the different types of wildcards that can be detected.

View Source
const NotAvailableRcode = 256

NotAvailableRcode is our made up rcode to indicate an availability problem.

View Source
const ResolverErrRcode = 100

ResolverErrRcode is our made up rcode to indicate an interface error.

View Source
const TimeoutRcode = 101

TimeoutRcode is our made up rcode to indicate that a query timed out.

Variables

PoolRetryCodes are the rcodes that cause the pool to suggest trying again.

View Source
var RetryCodes = []int{TimeoutRcode}

RetryCodes are the rcodes that cause the resolver to suggest trying again.

Functions

func PoolRetryPolicy added in v3.10.4

func PoolRetryPolicy(times int, priority int, msg *dns.Msg) bool

PoolRetryPolicy is the default policy used by the resolver pool to determine if a DNS query should be performed again.

func RemoveLastDot

func RemoveLastDot(name string) string

RemoveLastDot removes the '.' at the end of the provided FQDN.

func RetryPolicy added in v3.10.4

func RetryPolicy(times int, priority int, msg *dns.Msg) bool

RetryPolicy is the default policy used throughout Amass to determine if a DNS query should be performed again.

func UnlikelyName

func UnlikelyName(sub string) string

UnlikelyName takes a subdomain name and returns an unlikely DNS name within that subdomain.

func ZoneTransfer

func ZoneTransfer(sub, domain, server string) ([]*requests.DNSRequest, error)

ZoneTransfer attempts a DNS zone transfer using the server identified in the parameters. The returned slice contains all the records discovered from the zone transfer.

Types

type BaseResolver

type BaseResolver struct {
	Done chan struct{}
	// contains filtered or unexported fields
}

BaseResolver performs DNS queries on a single resolver at high-performance.

func NewBaseResolver

func NewBaseResolver(addr string) *BaseResolver

NewBaseResolver initializes a Resolver that send DNS queries to the provided IP address.

func (*BaseResolver) Address

func (r *BaseResolver) Address() string

Address implements the Resolver interface.

func (*BaseResolver) Available

func (r *BaseResolver) Available() (bool, error)

Available always returns true.

func (*BaseResolver) GetWildcardType

func (r *BaseResolver) GetWildcardType(ctx context.Context, req *requests.DNSRequest) int

GetWildcardType returns the DNS wildcard type for the provided subdomain name.

func (*BaseResolver) IsStopped

func (r *BaseResolver) IsStopped() bool

IsStopped implements the Resolver interface.

func (*BaseResolver) MatchesWildcard

func (r *BaseResolver) MatchesWildcard(ctx context.Context, req *requests.DNSRequest) bool

MatchesWildcard returns true if the request provided resolved to a DNS wildcard.

func (*BaseResolver) NsecTraversal added in v3.9.0

func (r *BaseResolver) NsecTraversal(ctx context.Context, domain string, priority int) ([]string, bool, error)

NsecTraversal attempts to retrieve a DNS zone using NSEC-walking.

func (*BaseResolver) Port

func (r *BaseResolver) Port() int

Port implements the Resolver interface.

func (*BaseResolver) ReportError

func (r *BaseResolver) ReportError()

ReportError indicates to the Resolver that it delivered an erroneous response.

func (*BaseResolver) Resolve

func (r *BaseResolver) Resolve(ctx context.Context, name, qtype string, priority int, retry Retry) ([]requests.DNSAnswer, error)

Resolve performs a DNS query using the Resolver.

func (*BaseResolver) Reverse

func (r *BaseResolver) Reverse(ctx context.Context, addr string, priority int, retry Retry) (string, string, error)

Reverse is performs reverse DNS queries using the Resolver.

func (*BaseResolver) Stats

func (r *BaseResolver) Stats() map[int]int64

Stats returns performance counters.

func (*BaseResolver) Stop

func (r *BaseResolver) Stop() error

Stop causes the Resolver to stop sending DNS queries and closes the network connection.

func (*BaseResolver) String added in v3.9.0

func (r *BaseResolver) String() string

String implements the Stringer interface.

func (*BaseResolver) SubdomainToDomain

func (r *BaseResolver) SubdomainToDomain(name string) string

SubdomainToDomain returns the first subdomain name of the provided parameter that responds to a DNS query for the NS record type.

func (*BaseResolver) WipeStats

func (r *BaseResolver) WipeStats()

WipeStats clears the performance counters.

type ResolveError

type ResolveError struct {
	Err   string
	Rcode int
}

ResolveError contains the Rcode returned during the DNS query.

func (*ResolveError) Error

func (e *ResolveError) Error() string

type Resolver

type Resolver interface {
	fmt.Stringer

	// Address returns the IP address where the resolver is located
	Address() string

	// Port returns the port number used to communicate with the resolver
	Port() int

	// Resolve performs DNS queries using the Resolver
	Resolve(ctx context.Context, name, qtype string, priority int, retry Retry) ([]requests.DNSAnswer, error)

	// Reverse is performs reverse DNS queries using the Resolver
	Reverse(ctx context.Context, addr string, priority int, retry Retry) (string, string, error)

	// NsecTraversal attempts to retrieve a DNS zone using NSEC-walking
	NsecTraversal(ctx context.Context, domain string, priority int) ([]string, bool, error)

	// Available returns true if the Resolver can handle another DNS request
	Available() (bool, error)

	// Stats returns performance counters
	Stats() map[int]int64
	WipeStats()

	// ReportError indicates to the Resolver that it delivered an erroneous response
	ReportError()

	// MatchesWildcard returns true if the request provided resolved to a DNS wildcard
	MatchesWildcard(ctx context.Context, req *requests.DNSRequest) bool

	// GetWildcardType returns the DNS wildcard type for the provided subdomain name
	GetWildcardType(ctx context.Context, req *requests.DNSRequest) int

	// SubdomainToDomain returns the first subdomain name of the provided
	// parameter that responds to a DNS query for the NS record type
	SubdomainToDomain(name string) string

	// Stop the Resolver
	Stop() error
	IsStopped() bool
}

Resolver is the object type for performing DNS resolutions.

type ResolverPool

type ResolverPool struct {
	Resolvers []Resolver
	Done      chan struct{}
	// Logger for error messages
	Log *log.Logger
	// contains filtered or unexported fields
}

ResolverPool manages many DNS resolvers for high-performance use, such as brute forcing attacks.

func NewResolverPool

func NewResolverPool(res []Resolver, maxQueries int, logger *log.Logger) *ResolverPool

NewResolverPool initializes a ResolverPool that uses the provided Resolvers.

func SetupResolverPool

func SetupResolverPool(addrs []string, maxQueries int, log *log.Logger) *ResolverPool

SetupResolverPool initializes a ResolverPool with the type of resolvers indicated by the parameters.

func (*ResolverPool) Address

func (rp *ResolverPool) Address() string

Address implements the Resolver interface.

func (*ResolverPool) Available

func (rp *ResolverPool) Available() (bool, error)

Available returns true if the Resolver can handle another DNS request.

func (*ResolverPool) GetWildcardType

func (rp *ResolverPool) GetWildcardType(ctx context.Context, req *requests.DNSRequest) int

GetWildcardType returns the DNS wildcard type for the provided subdomain name.

func (*ResolverPool) IsStopped

func (rp *ResolverPool) IsStopped() bool

IsStopped implements the Resolver interface.

func (*ResolverPool) MatchesWildcard

func (rp *ResolverPool) MatchesWildcard(ctx context.Context, req *requests.DNSRequest) bool

MatchesWildcard returns true if the request provided resolved to a DNS wildcard.

func (*ResolverPool) NextResolver

func (rp *ResolverPool) NextResolver() Resolver

NextResolver returns a randomly selected Resolver from the pool that has availability.

func (*ResolverPool) NsecTraversal added in v3.9.0

func (rp *ResolverPool) NsecTraversal(ctx context.Context, domain string, priority int) ([]string, bool, error)

NsecTraversal performs NSEC-walking using available Resolvers in the pool.

func (*ResolverPool) Port

func (rp *ResolverPool) Port() int

Port implements the Resolver interface.

func (*ResolverPool) ReportError

func (rp *ResolverPool) ReportError()

ReportError implements the Resolver interface.

func (*ResolverPool) Resolve

func (rp *ResolverPool) Resolve(ctx context.Context, name, qtype string, priority int, retry Retry) ([]requests.DNSAnswer, error)

Resolve performs a DNS request using available Resolvers in the pool.

func (*ResolverPool) Reverse

func (rp *ResolverPool) Reverse(ctx context.Context, addr string, priority int, retry Retry) (string, string, error)

Reverse is performs reverse DNS queries using available Resolvers in the pool.

func (*ResolverPool) Stats

func (rp *ResolverPool) Stats() map[int]int64

Stats returns performance counters.

func (*ResolverPool) Stop

func (rp *ResolverPool) Stop() error

Stop calls the Stop method for each Resolver object in the pool.

func (*ResolverPool) String added in v3.9.0

func (rp *ResolverPool) String() string

String implements the Stringer interface.

func (*ResolverPool) SubdomainToDomain

func (rp *ResolverPool) SubdomainToDomain(name string) string

SubdomainToDomain returns the first subdomain name of the provided parameter that responds to a DNS query for the NS record type.

func (*ResolverPool) WipeStats

func (rp *ResolverPool) WipeStats()

WipeStats clears the performance counters.

type Retry added in v3.10.4

type Retry func(times int, priority int, msg *dns.Msg) bool

Retry is the definition for the callbacks used in the Resolver interface.

Jump to

Keyboard shortcuts

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