var protocols … var services … var dnsWaitGroup … const maxProtoLength … func lookupProtocolMap(name string) (int, error) { … } const maxPortBufSize … func lookupPortMap(network, service string) (port int, error error) { … } func lookupPortMapWithNetwork(network, errNetwork, service string) (port int, error error) { … } // ipVersion returns the provided network's IP version: '4', '6' or 0 // if network does not end in a '4' or '6' byte. func ipVersion(network string) byte { … } var DefaultResolver … type Resolver … func (r *Resolver) preferGo() bool { … } func (r *Resolver) strictErrors() bool { … } func (r *Resolver) getLookupGroup() *singleflight.Group { … } // LookupHost looks up the given host using the local resolver. // It returns a slice of that host's addresses. // // LookupHost uses [context.Background] internally; to specify the context, use // [Resolver.LookupHost]. func LookupHost(host string) (addrs []string, err error) { … } // LookupHost looks up the given host using the local resolver. // It returns a slice of that host's addresses. func (r *Resolver) LookupHost(ctx context.Context, host string) (addrs []string, err error) { … } // LookupIP looks up host using the local resolver. // It returns a slice of that host's IPv4 and IPv6 addresses. func LookupIP(host string) ([]IP, error) { … } // LookupIPAddr looks up host using the local resolver. // It returns a slice of that host's IPv4 and IPv6 addresses. func (r *Resolver) LookupIPAddr(ctx context.Context, host string) ([]IPAddr, error) { … } // LookupIP looks up host for the given network using the local resolver. // It returns a slice of that host's IP addresses of the type specified by // network. // network must be one of "ip", "ip4" or "ip6". func (r *Resolver) LookupIP(ctx context.Context, network, host string) ([]IP, error) { … } // LookupNetIP looks up host using the local resolver. // It returns a slice of that host's IP addresses of the type specified by // network. // The network must be one of "ip", "ip4" or "ip6". func (r *Resolver) LookupNetIP(ctx context.Context, network, host string) ([]netip.Addr, error) { … } type onlyValuesCtx … var _ … // Value performs a lookup if the original context hasn't expired. func (ovc *onlyValuesCtx) Value(key any) any { … } // withUnexpiredValuesPreserved returns a context.Context that only uses lookupCtx // for its values, otherwise it is never canceled and has no deadline. // If the lookup context expires, any looked up values will return nil. // See Issue 28600. func withUnexpiredValuesPreserved(lookupCtx context.Context) context.Context { … } // lookupIPAddr looks up host using the local resolver and particular network. // It returns a slice of that host's IPv4 and IPv6 addresses. func (r *Resolver) lookupIPAddr(ctx context.Context, network, host string) ([]IPAddr, error) { … } // lookupIPReturn turns the return values from singleflight.Do into // the return values from LookupIP. func lookupIPReturn(addrsi any, err error, shared bool) ([]IPAddr, error) { … } // ipAddrsEface returns an empty interface slice of addrs. func ipAddrsEface(addrs []IPAddr) []any { … } // LookupPort looks up the port for the given network and service. // // LookupPort uses [context.Background] internally; to specify the context, use // [Resolver.LookupPort]. func LookupPort(network, service string) (port int, err error) { … } // LookupPort looks up the port for the given network and service. // // The network must be one of "tcp", "tcp4", "tcp6", "udp", "udp4", "udp6" or "ip". func (r *Resolver) LookupPort(ctx context.Context, network, service string) (port int, err error) { … } // LookupCNAME returns the canonical name for the given host. // Callers that do not care about the canonical name can call // [LookupHost] or [LookupIP] directly; both take care of resolving // the canonical name as part of the lookup. // // A canonical name is the final name after following zero // or more CNAME records. // LookupCNAME does not return an error if host does not // contain DNS "CNAME" records, as long as host resolves to // address records. // // The returned canonical name is validated to be a properly // formatted presentation-format domain name. // // LookupCNAME uses [context.Background] internally; to specify the context, use // [Resolver.LookupCNAME]. func LookupCNAME(host string) (cname string, err error) { … } // LookupCNAME returns the canonical name for the given host. // Callers that do not care about the canonical name can call // [LookupHost] or [LookupIP] directly; both take care of resolving // the canonical name as part of the lookup. // // A canonical name is the final name after following zero // or more CNAME records. // LookupCNAME does not return an error if host does not // contain DNS "CNAME" records, as long as host resolves to // address records. // // The returned canonical name is validated to be a properly // formatted presentation-format domain name. func (r *Resolver) LookupCNAME(ctx context.Context, host string) (string, error) { … } // LookupSRV tries to resolve an [SRV] query of the given service, // protocol, and domain name. The proto is "tcp" or "udp". // The returned records are sorted by priority and randomized // by weight within a priority. // // LookupSRV constructs the DNS name to look up following RFC 2782. // That is, it looks up _service._proto.name. To accommodate services // publishing SRV records under non-standard names, if both service // and proto are empty strings, LookupSRV looks up name directly. // // The returned service names are validated to be properly // formatted presentation-format domain names. If the response contains // invalid names, those records are filtered out and an error // will be returned alongside the remaining results, if any. func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err error) { … } // LookupSRV tries to resolve an [SRV] query of the given service, // protocol, and domain name. The proto is "tcp" or "udp". // The returned records are sorted by priority and randomized // by weight within a priority. // // LookupSRV constructs the DNS name to look up following RFC 2782. // That is, it looks up _service._proto.name. To accommodate services // publishing SRV records under non-standard names, if both service // and proto are empty strings, LookupSRV looks up name directly. // // The returned service names are validated to be properly // formatted presentation-format domain names. If the response contains // invalid names, those records are filtered out and an error // will be returned alongside the remaining results, if any. func (r *Resolver) LookupSRV(ctx context.Context, service, proto, name string) (string, []*SRV, error) { … } // LookupMX returns the DNS MX records for the given domain name sorted by preference. // // The returned mail server names are validated to be properly // formatted presentation-format domain names. If the response contains // invalid names, those records are filtered out and an error // will be returned alongside the remaining results, if any. // // LookupMX uses [context.Background] internally; to specify the context, use // [Resolver.LookupMX]. func LookupMX(name string) ([]*MX, error) { … } // LookupMX returns the DNS MX records for the given domain name sorted by preference. // // The returned mail server names are validated to be properly // formatted presentation-format domain names. If the response contains // invalid names, those records are filtered out and an error // will be returned alongside the remaining results, if any. func (r *Resolver) LookupMX(ctx context.Context, name string) ([]*MX, error) { … } // LookupNS returns the DNS NS records for the given domain name. // // The returned name server names are validated to be properly // formatted presentation-format domain names. If the response contains // invalid names, those records are filtered out and an error // will be returned alongside the remaining results, if any. // // LookupNS uses [context.Background] internally; to specify the context, use // [Resolver.LookupNS]. func LookupNS(name string) ([]*NS, error) { … } // LookupNS returns the DNS NS records for the given domain name. // // The returned name server names are validated to be properly // formatted presentation-format domain names. If the response contains // invalid names, those records are filtered out and an error // will be returned alongside the remaining results, if any. func (r *Resolver) LookupNS(ctx context.Context, name string) ([]*NS, error) { … } // LookupTXT returns the DNS TXT records for the given domain name. // // LookupTXT uses [context.Background] internally; to specify the context, use // [Resolver.LookupTXT]. func LookupTXT(name string) ([]string, error) { … } // LookupTXT returns the DNS TXT records for the given domain name. func (r *Resolver) LookupTXT(ctx context.Context, name string) ([]string, error) { … } // LookupAddr performs a reverse lookup for the given address, returning a list // of names mapping to that address. // // The returned names are validated to be properly formatted presentation-format // domain names. If the response contains invalid names, those records are filtered // out and an error will be returned alongside the remaining results, if any. // // When using the host C library resolver, at most one result will be // returned. To bypass the host resolver, use a custom [Resolver]. // // LookupAddr uses [context.Background] internally; to specify the context, use // [Resolver.LookupAddr]. func LookupAddr(addr string) (names []string, err error) { … } // LookupAddr performs a reverse lookup for the given address, returning a list // of names mapping to that address. // // The returned names are validated to be properly formatted presentation-format // domain names. If the response contains invalid names, those records are filtered // out and an error will be returned alongside the remaining results, if any. func (r *Resolver) LookupAddr(ctx context.Context, addr string) ([]string, error) { … } var errMalformedDNSRecordsDetail … // dial makes a new connection to the provided server (which must be // an IP address) with the provided network type, using either r.Dial // (if both r and r.Dial are non-nil) or else Dialer.DialContext. func (r *Resolver) dial(ctx context.Context, network, server string) (Conn, error) { … } // goLookupSRV returns the SRV records for a target name, built either // from its component service ("sip"), protocol ("tcp"), and name // ("example.com."), or from name directly (if service and proto are // both empty). // // In either case, the returned target name ("_sip._tcp.example.com.") // is also returned on success. // // The records are sorted by weight. func (r *Resolver) goLookupSRV(ctx context.Context, service, proto, name string) (target string, srvs []*SRV, err error) { … } // goLookupMX returns the MX records for name. func (r *Resolver) goLookupMX(ctx context.Context, name string) ([]*MX, error) { … } // goLookupNS returns the NS records for name. func (r *Resolver) goLookupNS(ctx context.Context, name string) ([]*NS, error) { … } // goLookupTXT returns the TXT records from name. func (r *Resolver) goLookupTXT(ctx context.Context, name string) ([]string, error) { … } func parseCNAMEFromResources(resources []dnsmessage.Resource) (string, error) { … }