owasp-amass/amass · error

failed to traverse the FQDN

Error message

failed to traverse the FQDN

What it means

oneMoreName could not resolve an IPAddress while walking outgoing 'dns_record' edges from an FQDN entity: the edge query errored, returned no edges, or none of the edges led (via A/AAAA records or getAddr) to an IP asset. The message is slightly misleading — it is a DNS-graph traversal dead end for that name, not a generic traversal failure.

Source

Thrown at internal/net/addr.go:130

func getAddr(ctx context.Context, db repository.Repository, ip *dbt.Entity, since time.Time) (*network.IPAddress, error) {
	if entity, err := db.FindEntityById(ctx, ip.ID); err == nil && entity != nil {
		if ip, ok := entity.Asset.(*network.IPAddress); ok {
			return ip, nil
		}
	}
	return nil, errors.New("failed to extract the IP address")
}

func oneMoreName(ctx context.Context, db repository.Repository, fqdn *dbt.Entity, since time.Time) (*network.IPAddress, error) {
	if edges, err := db.OutgoingEdges(ctx, fqdn, since, "dns_record"); err == nil && len(edges) > 0 {
		for _, edge := range edges {
			if rel, ok := edge.Relation.(*oamdns.BasicDNSRelation); ok && (rel.Header.RRType == 1 || rel.Header.RRType == 28) {
				return getAddr(ctx, db, edge.ToEntity, since)
			}
		}
	}
	return nil, errors.New("failed to traverse the FQDN")
}

func cnameQuery(ctx context.Context, db repository.Repository, fqdn *dbt.Entity, since time.Time) (*network.IPAddress, error) {
	set := stringset.New()
	defer set.Close()

	next := fqdn
loop:
	for i := 0; i < 10; i++ {
		n, err := db.FindEntityById(ctx, next.ID)
		if err != nil || set.Has(n.Asset.Key()) {
			break
		}
		set.Insert(n.Asset.Key())

		if edges, err := db.OutgoingEdges(ctx, n, since, "dns_record"); err == nil && len(edges) > 0 {
			for _, edge := range edges {
				if rel, ok := edge.Relation.(*oamdns.BasicDNSRelation); ok {

View on GitHub (pinned to 79299dce87)

Solutions

  1. Confirm the FQDN entity actually has A/AAAA DNS record edges recorded after the 'since' cutoff
  2. Relax or review the time window passed as 'since' if records exist but are filtered out
  3. Handle the error as a non-fatal 'no address found' in NamesToAddrs and keep processing other names
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at internal/net/addr.go:130 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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