Documentation
¶
Index ¶
- Constants
- Variables
- func PoolRetryPolicy(times int, priority int, msg *dns.Msg) bool
- func RemoveLastDot(name string) string
- func RetryPolicy(times int, priority int, msg *dns.Msg) bool
- func UnlikelyName(sub string) string
- func ZoneTransfer(sub, domain, server string) ([]*requests.DNSRequest, error)
- type BaseResolver
- func (r *BaseResolver) Address() string
- func (r *BaseResolver) Available() (bool, error)
- func (r *BaseResolver) GetWildcardType(ctx context.Context, req *requests.DNSRequest) int
- func (r *BaseResolver) IsStopped() bool
- func (r *BaseResolver) MatchesWildcard(ctx context.Context, req *requests.DNSRequest) bool
- func (r *BaseResolver) NsecTraversal(ctx context.Context, domain string, priority int) ([]string, bool, error)
- func (r *BaseResolver) Port() int
- func (r *BaseResolver) ReportError()
- func (r *BaseResolver) Resolve(ctx context.Context, name, qtype string, priority int, retry Retry) ([]requests.DNSAnswer, error)
- func (r *BaseResolver) Reverse(ctx context.Context, addr string, priority int, retry Retry) (string, string, error)
- func (r *BaseResolver) Stats() map[int]int64
- func (r *BaseResolver) Stop() error
- func (r *BaseResolver) String() string
- func (r *BaseResolver) SubdomainToDomain(name string) string
- func (r *BaseResolver) WipeStats()
- type ResolveError
- type Resolver
- type ResolverPool
- func (rp *ResolverPool) Address() string
- func (rp *ResolverPool) Available() (bool, error)
- func (rp *ResolverPool) GetWildcardType(ctx context.Context, req *requests.DNSRequest) int
- func (rp *ResolverPool) IsStopped() bool
- func (rp *ResolverPool) MatchesWildcard(ctx context.Context, req *requests.DNSRequest) bool
- func (rp *ResolverPool) NextResolver() Resolver
- func (rp *ResolverPool) NsecTraversal(ctx context.Context, domain string, priority int) ([]string, bool, error)
- func (rp *ResolverPool) Port() int
- func (rp *ResolverPool) ReportError()
- func (rp *ResolverPool) Resolve(ctx context.Context, name, qtype string, priority int, retry Retry) ([]requests.DNSAnswer, error)
- func (rp *ResolverPool) Reverse(ctx context.Context, addr string, priority int, retry Retry) (string, string, error)
- func (rp *ResolverPool) Stats() map[int]int64
- func (rp *ResolverPool) Stop() error
- func (rp *ResolverPool) String() string
- func (rp *ResolverPool) SubdomainToDomain(name string) string
- func (rp *ResolverPool) WipeStats()
- type Retry
Constants ¶
const ( PriorityLow int = iota PriorityHigh PriorityCritical )
The priority levels for DNS resolution.
const ( QueryAttempts = 64 QueryTimeouts = 65 QueryRTT = 66 QueryCompletions = 67 )
Index values into the stats map.
const ( MaxDNSNameLen = 253 MaxDNSLabelLen = 63 MinLabelLen = 6 MaxLabelLen = 24 LDHChars = "abcdefghijklmnopqrstuvwxyz0123456789-" )
Constants related to DNS labels.
const ( WildcardTypeNone = iota WildcardTypeStatic WildcardTypeDynamic )
Names for the different types of wildcards that can be detected.
const NotAvailableRcode = 256
NotAvailableRcode is our made up rcode to indicate an availability problem.
const ResolverErrRcode = 100
ResolverErrRcode is our made up rcode to indicate an interface error.
const TimeoutRcode = 101
TimeoutRcode is our made up rcode to indicate that a query timed out.
Variables ¶
var PoolRetryCodes = []int{ TimeoutRcode, dns.RcodeRefused, dns.RcodeServerFailure, dns.RcodeNotImplemented, }
PoolRetryCodes are the rcodes that cause the pool to suggest trying again.
var RetryCodes = []int{TimeoutRcode}
RetryCodes are the rcodes that cause the resolver to suggest trying again.
Functions ¶
func PoolRetryPolicy ¶ added in v3.10.4
PoolRetryPolicy is the default policy used by the resolver pool to determine if a DNS query should be performed again.
func RemoveLastDot ¶
RemoveLastDot removes the '.' at the end of the provided FQDN.
func RetryPolicy ¶ added in v3.10.4
RetryPolicy is the default policy used throughout Amass to determine if a DNS query should be performed again.
func UnlikelyName ¶
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 ¶
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.