Documentation
¶
Index ¶
- Variables
- type AXFRData
- type Client
- func (c *Client) A(host string) (*DNSData, error)
- func (c *Client) AAAA(host string) (*DNSData, error)
- func (c *Client) ANY(host string) (*DNSData, error)
- func (c *Client) AXFR(host string) (*AXFRData, error)
- func (c *Client) CAA(host string) (*DNSData, error)
- func (c *Client) CNAME(host string) (*DNSData, error)
- func (c *Client) Close()
- func (c *Client) Do(msg *dns.Msg) (*dns.Msg, error)
- func (c *Client) MX(host string) (*DNSData, error)
- func (c *Client) NS(host string) (*DNSData, error)
- func (c *Client) PTR(host string) (*DNSData, error)
- func (c *Client) Query(host string, requestType uint16) (*DNSData, error)
- func (c *Client) QueryMultiple(host string, requestTypes []uint16) (*DNSData, error)
- func (c *Client) QueryMultipleWithResolver(host string, requestTypes []uint16, resolver Resolver) (*DNSData, error)
- func (c *Client) QueryParallel(host string, requestType uint16, resolvers []string) ([]*DNSData, error)
- func (c *Client) Resolve(host string) (*DNSData, error)
- func (c *Client) ResolveWithSyscall(host string) (*DNSData, error)
- func (c *Client) SOA(host string) (*DNSData, error)
- func (c *Client) SRV(host string) (*DNSData, error)
- func (c *Client) TXT(host string) (*DNSData, error)
- func (c *Client) Trace(host string, requestType uint16, maxrecursion int) (*TraceData, error)
- type ConnPool
- type DNSData
- func (d *DNSData) GetSOARecords() []string
- func (d *DNSData) JSON() (string, error)
- func (d *DNSData) Marshal() ([]byte, error)
- func (d *DNSData) ParseFromEnvelopeChan(envChan chan *dns.Envelope) error
- func (d *DNSData) ParseFromMsg(msg *dns.Msg) error
- func (d *DNSData) ParseFromRR(rrs []dns.RR) error
- func (d *DNSData) Unmarshal(b []byte) error
- type DohProtocol
- type DohResolver
- type NetworkResolver
- type Options
- type Protocol
- type Resolver
- type RootDNS
- type SOA
- type TraceData
Constants ¶
This section is empty.
Variables ¶
var ( // DefaultMaxPerCNAMEFollows is the default number of times a CNAME can be followed within a trace DefaultMaxPerCNAMEFollows = 32 // ErrRetriesExceeded is the error returned when the max retries are exceeded ErrRetriesExceeded = errors.New("could not resolve, max retries exceeded") )
var ( ErrMaxRetriesZero = errors.New("retries must be at least 1") ErrResolversEmpty = errors.New("resolvers list must not be empty") ErrProxySchemeUnsupported = errors.New("proxy scheme must be socks5 or socks5h") BaseResolvers = []string{ "1.1.1.1:53", "1.0.0.1:53", "8.8.8.8:53", "8.8.4.4:53", } DefaultOptions = Options{ BaseResolvers: BaseResolvers, MaxRetries: 1, Timeout: 3 * time.Second, } )
var CheckInternalIPs = false
CheckInternalIPs when set to true returns if DNS response IPs belong to internal IP ranges.
var RootDNSServers = []RootDNS{
{"a.root-servers.net", "198.41.0.4", "2001:503:ba3e::2:30", "Verisign, Inc"},
{"b.root-servers.net", "199.9.14.201", "2001:500:200::b", "University of Southern California, Information Sciences Institute"},
{"c.root-servers.net", "192.33.4.12", "2001:500:2::c", "Cogent Communications"},
{"d.root-servers.net", "199.7.91.13", "2001:500:2d::d", "University of Maryland"},
{"e.root-servers.net", "192.203.230.10", "2001:500:a8::e", "NASA (Ames Research Center)"},
{"f.root-servers.net", "192.5.5.241", "2001:500:2f::f", "Internet Systems Consortium, Inc."},
{"g.root-servers.net", "192.112.36.4", "2001:500:12::d0d", "US Department of Defense (NIC)"},
{"h.root-servers.net", "198.97.190.53", "2001:500:1::53", "US Army (Research Lab)"},
{"i.root-servers.net", "192.36.148.17", "2001:7fe::53", "Netnod"},
{"j.root-servers.net", "192.58.128.30", "2001:503:c27::2:30", "Verisign, Inc"},
{"k.root-servers.net", "193.0.14.129", "2001:7fd::1", "RIPE NCC"},
{"l.root-servers.net", "199.7.83.42", "2001:500:9f::42", "ICANN"},
{"m.root-servers.net", "202.12.27.33", "2001:dc3::35", "WIDE Project"},
}
var RootDNSServersIPv4 = []string{
"198.41.0.4:53", "199.9.14.201:53", "192.33.4.12:53", "199.7.91.13:53",
"192.203.230.10:53", "192.5.5.241:53", "192.112.36.4:53", "198.97.190.53:53",
"192.36.148.17:53", "192.58.128.30:53", "193.0.14.129:53", "199.7.83.42:53",
"202.12.27.33:53",
}
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
TCPFallback bool
// contains filtered or unexported fields
}
Client is a DNS resolver client to resolve hostnames.
func NewWithOptions ¶ added in v1.0.13
New creates a new dns client with options
func (*Client) QueryMultiple ¶
QueryMultiple sends a provided dns request and return the data
func (*Client) QueryMultipleWithResolver ¶ added in v1.0.14
func (c *Client) QueryMultipleWithResolver(host string, requestTypes []uint16, resolver Resolver) (*DNSData, error)
QueryMultiple sends a provided dns request and return the data with a specific resolver
func (*Client) QueryParallel ¶ added in v1.0.12
func (c *Client) QueryParallel(host string, requestType uint16, resolvers []string) ([]*DNSData, error)
QueryParallel sends a provided dns request to multiple resolvers in parallel. With both LocalAddrIP and LocalAddrPort set, queries that dial their own connection compete for that local port, so all but one may fail and come back empty.
func (*Client) Resolve ¶
Resolve is the underlying resolve function that actually resolves a host and gets the ip records for that host.
func (*Client) ResolveWithSyscall ¶ added in v1.0.7
ResolveWithSyscall resolves host to A and AAAA records using the operating system's resolver. It ignores the client's options, including Proxy, BaseResolvers, and Timeout, so its lookups never go through the proxy. Call Resolve to apply them.
type ConnPool ¶ added in v1.0.34
type ConnPool struct {
// contains filtered or unexported fields
}
func NewConnPool ¶ added in v1.0.34
func NewConnPool(resolver NetworkResolver, poolSize int) (*ConnPool, error)
func (*ConnPool) LocalAddrs ¶ added in v1.0.34
func (*ConnPool) Resolver ¶ added in v1.0.34
func (cp *ConnPool) Resolver() NetworkResolver
type DNSData ¶
type DNSData struct {
Host string `json:"host,omitempty"`
TTL uint32 `json:"ttl,omitempty"`
Resolver []string `json:"resolver,omitempty"`
A []string `json:"a,omitempty"`
AAAA []string `json:"aaaa,omitempty"`
CNAME []string `json:"cname,omitempty"`
MX []string `json:"mx,omitempty"`
PTR []string `json:"ptr,omitempty"`
SOA []SOA `json:"soa,omitempty"`
NS []string `json:"ns,omitempty"`
TXT []string `json:"txt,omitempty"`
SRV []string `json:"srv,omitempty"`
CAA []string `json:"caa,omitempty"`
AllRecords []string `json:"all,omitempty"`
Raw string `json:"raw,omitempty"`
HasInternalIPs bool `json:"has_internal_ips,omitempty"`
InternalIPs []string `json:"internal_ips,omitempty"`
StatusCode string `json:"status_code,omitempty"`
StatusCodeRaw int `json:"status_code_raw,omitempty"`
TraceData *TraceData `json:"trace,omitempty"`
AXFRData *AXFRData `json:"axfr,omitempty"`
RawResp *dns.Msg `json:"raw_resp,omitempty"`
Timestamp time.Time `json:"timestamp,omitempty"`
HostsFile bool `json:"hosts_file,omitempty"`
}
DNSData is the data for a DNS request response
func (*DNSData) GetSOARecords ¶ added in v1.0.28
GetSOARecords returns the NS and Mbox of all SOA records as a string slice
func (*DNSData) ParseFromEnvelopeChan ¶ added in v1.0.14
func (*DNSData) ParseFromMsg ¶
ParseFromMsg and enrich data
type DohProtocol ¶ added in v1.0.13
type DohProtocol string
const ( JsonAPI DohProtocol = "jsonapi" GET DohProtocol = "get" POST DohProtocol = "post" )
func (DohProtocol) String ¶ added in v1.0.13
func (p DohProtocol) String() string
func (DohProtocol) StringWithSemicolon ¶ added in v1.0.13
func (p DohProtocol) StringWithSemicolon() string
type DohResolver ¶ added in v1.0.13
type DohResolver struct {
Protocol DohProtocol
URL string
}
func (DohResolver) Method ¶ added in v1.0.13
func (r DohResolver) Method() string
func (DohResolver) String ¶ added in v1.0.13
func (r DohResolver) String() string
type NetworkResolver ¶ added in v1.0.13
func (NetworkResolver) String ¶ added in v1.0.13
func (r NetworkResolver) String() string
type Options ¶ added in v1.0.13
type Options struct {
BaseResolvers []string
MaxRetries int
Timeout time.Duration
Hostsfile bool
LocalAddrIP net.IP
LocalAddrPort uint16
ConnectionPoolThreads int
MaxPerCNAMEFollows int
// Proxy is the URL of a SOCKS5 proxy that queries go through, for
// example "socks5://user:password@127.0.0.1:1080". The credentials
// are optional. Only the socks5 and socks5h schemes are accepted;
// any other scheme, including http and https, makes Validate fail
// with ErrProxySchemeUnsupported. When set, UDP resolvers are
// queried over TCP. An empty value disables the proxy.
Proxy string
// ExitOnStatusCodes lists DNS rcodes that terminate the retry
// loop. When non-empty, only attempts whose rcode is in this list
// are considered definitive: the response is parsed into the
// returned DNSData and the loop exits. Attempts with any other
// rcode are treated like transport errors - the response is not
// parsed, DNSData is not mutated, and the loop continues with the
// next resolver.
//
// Common values:
//
// []int{dns.RcodeSuccess} // NOERROR only
// []int{dns.RcodeSuccess, dns.RcodeNameError} // NOERROR or NXDOMAIN
//
// An empty/nil list preserves the legacy behavior: every attempt
// is parsed, DNSData.Raw accumulates across retries, and only
// RcodeSuccess breaks the loop.
ExitOnStatusCodes []int
}
func (*Options) GetLocalAddr ¶ added in v1.0.27
Returns a net.Addr of a UDP or TCP type depending on whats required
func (*Options) SetLocalAddrIP ¶ added in v1.0.27
Sets the ip from a string, if invalid sets as nil
func (*Options) SetLocalAddrIPFromNetInterface ¶ added in v1.0.27
Sets the first available IP from a network interface name e.g. eth0
type Protocol ¶ added in v1.0.13
type Protocol string
func (Protocol) StringWithSemicolon ¶ added in v1.0.13
type SOA ¶ added in v1.0.26
type SOA struct {
Name string `json:"name,omitempty"`
NS string `json:"ns,omitempty"`
Mbox string `json:"mailbox,omitempty"`
Serial uint32 `json:"serial,omitempty"`
Refresh uint32 `json:"refresh,omitempty"`
Retry uint32 `json:"retry,omitempty"`
Expire uint32 `json:"expire,omitempty"`
Minttl uint32 `json:"minttl,omitempty"`
}