owasp-amass/amass · info · ErrNoRecordOfThisType

no record of this type

Error message

no record of this type

What it means

ErrNoRecordOfThisType is a sentinel error returned by dnsQuery/PerformQuery in engine/plugins/support/resolvers.go when the DNS response is successful (RcodeSuccess/NOERROR) but contains zero answer records of any kind. It means the name exists but has no records at all for the queried type, distinct from NXDOMAIN (ErrNameDoesNotExist). Callers use it to skip names that exist but lack the requested record type.

Source

Thrown at engine/plugins/support/resolvers.go:27

	"errors"
	"runtime"
	"strings"
	"time"

	"github.com/miekg/dns"
	"github.com/owasp-amass/resolve/conn"
	"github.com/owasp-amass/resolve/pool"
	"github.com/owasp-amass/resolve/selectors"
	"github.com/owasp-amass/resolve/servers"
	"github.com/owasp-amass/resolve/types"
	"github.com/owasp-amass/resolve/utils"
	"github.com/owasp-amass/resolve/wildcards"
	"golang.org/x/net/publicsuffix"
)

var (
	ErrNameDoesNotExist     = errors.New("name does not exist")
	ErrNoRecordOfThisType   = errors.New("no record of this type")
	ErrFailedMaxDNSAttempts = errors.New("failed the maximum number of DNS attempts")
)

type baseline struct {
	address string
	qps     int
}

// baselineResolvers is a list of trusted public DNS resolvers.
var baselineResolvers = []baseline{
	{"8.8.8.8", 5}, // Google Primary
	//	{"8.8.4.4", 5},         // Google Secondary
	{"95.85.95.85", 2},     // Gcore DNS Primary
	{"2.56.220.2", 2},      // Gcore DNS Secondary
	{"76.76.2.0", 2},       // ControlD Primary
	{"76.76.10.0", 2},      // ControlD Secondary
	{"9.9.9.9", 2},         // Quad9 Primary
	{"149.112.112.112", 2}, // Quad9 Secondary

View on GitHub (pinned to 79299dce87)

Solutions

  1. Skip this record type for the name and try a different qtype (A vs AAAA vs TXT) if needed.
  2. Do not retry aggressively: NOERROR-empty responses are often authoritative.
  3. Compare with support.ErrNoRecordOfThisType via == / errors.Is to handle it separately from NXDOMAIN.
  4. If records are expected, verify with dig @resolver name TYPE and try alternate trusted resolvers.

Example fix

// before
rr, err := support.PerformQuery(ctx, fqdn, dns.TypeAAAA)
if err != nil {
    return err
}
// after
rr, err := support.PerformQuery(ctx, fqdn, dns.TypeAAAA)
if err != nil {
    if err == support.ErrNoRecordOfThisType {
        return nil // name exists, just no AAAA records
    }
    return err
}
Defensive patterns

Strategy: try-catch

Validate before calling

// Pre-check other record types before assuming data is missing
dig +short example.com A
dig +short example.com TXT

Type guard

func isNoRecordOfThisType(err error) bool { return errors.Is(err, support.ErrNoRecordOfThisType) }

Try / catch

rr, err := support.PerformQuery(ctx, name, qtype)
if err != nil {
    if errors.Is(err, support.ErrNoRecordOfThisType) {
        return nil // name exists, no records of this type
    }
    return err
}

Prevention

When it happens

Trigger: Calling support.PerformQuery(ctx, name, qtype) where the response has Rcode == dns.RcodeSuccess but len(resp.Answer) == 0 — e.g. querying A records for a name that only exists as a CNAME edge case or has an empty answer from a trusted resolver.

Common situations: Querying TXT records for a domain that has none; asking for AAAA on IPv4-only hosts; DNS servers returning NOERROR with empty answers for non-existent record types; rate-limited or filtered resolvers returning empty NOERROR responses.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


AI-assisted analysis of owasp-amass/amass@79299dce87 (2026-09-06). Data as JSON: /api/errors/70d7a2e244742fbc. Report an issue: GitHub.