Skip to main content

Common Issues

Bootstrap Discovery Failures

Error: “No RDAP servers found”

Cause: The bootstrap service couldn’t find an authoritative RDAP server for your query.
For domain queries:
  1. Check if the TLD is valid:
    # List all valid TLDs
    cat ~/.config/rdap/tlds.txt | grep -i "yourtld"
    
  2. Update your bootstrap configs:
    rdap --update
    
  3. Use explicit server override:
    rdap -s https://rdap.example.com example.com
    
  4. For ccTLDs not in IANA bootstrap, add to ~/.config/rdap/tlds.local.json:
    {
      "example.tld": "https://rdap.example-registry.com/"
    }
    
For IP queries:
  • Verify the IP format is correct (standard or CIDR)
  • Some IP ranges may not have RDAP coverage yet
For AS number queries:
  • Ensure the AS number exists and is allocated
  • Try with or without “AS” prefix: rdap 15169 or rdap AS15169

Error: “Failed to fetch registry: HTTP 404”

Cause: IANA bootstrap file not found or URL changed.
  1. Update bootstrap URLs:
    rdap --update
    
  2. Check IANA bootstrap service status:
  3. Manual config override: Create ~/.config/rdap/config.local.json:
    {
      "bootstrap": {
        "dns": "https://data.iana.org/rdap/dns.json",
        "asn": "https://data.iana.org/rdap/asn.json",
        "ipv4": "https://data.iana.org/rdap/ipv4.json",
        "ipv6": "https://data.iana.org/rdap/ipv6.json"
      },
      "cache": {
        "ttl_seconds": 86400
      }
    }
    
  4. Clear cache:
    rm -rf ~/.cache/rdap/*
    

Query Type Detection Issues

Issue: Single-word query treated as domain instead of TLD

Example: rdap google queries google as a domain instead of the .google TLD.
  1. Update TLD list:
    rdap --update
    
    This downloads the latest tlds.txt from IANA.
  2. Explicitly specify query type:
    rdap -t tld google
    
  3. Use full domain syntax for domains:
    rdap google.com  # Clearly a domain
    
How detection works:
  • Single word → Check if it’s in IANA TLD list → If yes: TLD, if no: check if numeric
  • If numeric → AS number
  • Otherwise → Domain

Issue: IP address not recognized

Example: Shorthand IP 1.1 not being detected as IP.
The client supports shorthand IPs and should auto-detect them. If detection fails:
  1. Use full IP notation:
    rdap 1.0.0.1  # Instead of 1.1
    
  2. Explicitly specify type:
    rdap -t ip 1.1
    
  3. Use CIDR notation:
    rdap 1.1.1.0/24
    
Supported shorthand formats:
  • 1.11.0.0.1
  • 8.88.0.0.8
  • 192.168192.168.0.0

HTTP and Network Errors

Error: “HTTP error: 400 Bad Request”

Cause: The RDAP server rejected the query as malformed.
  1. For IPv6 queries: Some servers don’t support host-level IPv6 queries. The client auto-retries with CIDR:
    rdap -v 2001:db8::1  # Use verbose to see retry attempts
    
    If auto-retry fails, manually use CIDR:
    rdap 2001:db8::/64
    rdap 2001:db8::/48
    rdap 2001:db8::/32
    
  2. Check query format:
    • Domain: example.com (no trailing dot unless intentional)
    • IP: Valid IPv4 or IPv6 address
    • AS: Numeric only, AS prefix optional
  3. Try different server:
    rdap -s https://rdap.arin.net/registry 8.8.8.8
    

Error: “HTTP error: 404 Not Found”

Cause: The resource doesn’t exist in the RDAP server’s database.
  1. Verify the resource exists:
    • Check domain registration elsewhere (DNS lookup)
    • Verify IP allocation (WHOIS)
    • Confirm AS number is allocated
  2. Check if you’re querying the right server:
    rdap -v example.com  # Verbose shows server URL
    
  3. Some registries may not have RDAP data:
    • Not all registries have transitioned from WHOIS to RDAP
    • Some objects may exist in WHOIS but not RDAP yet
  4. For recently registered domains:
    • RDAP data may lag by a few hours
    • Try again later or use --server to query registrar directly

Error: “Connection timeout” or “Connection refused”

Cause: Network connectivity issues or server is down.
  1. Increase timeout:
    rdap --timeout 60 example.com  # 60 seconds
    
  2. Check internet connectivity:
    ping data.iana.org
    curl -I https://rdap.verisign.com/com/v1/
    
  3. Verify firewall/proxy settings:
    • Ensure outbound HTTPS (port 443) is allowed
    • Check if corporate proxy is interfering
  4. Try alternate bootstrap servers: Edit ~/.config/rdap/config.local.json with mirror URLs if available.
  5. Use explicit server:
    rdap -s https://rdap.verisign.com/com/v1 example.com
    

Registrar Referral Issues

Issue: Missing registrar data for domain

Cause: Registrar doesn’t provide RDAP endpoint or referral link is broken.
  1. Check if registry provides referral link:
    rdap -f json-pretty example.com | grep -A5 '"links"'
    
  2. Some registries don’t include referral links:
    • This is compliant with RDAP spec
    • You’ll only get registry-level data
  3. Disable referral following to see registry-only data:
    rdap --no-referral example.com
    
  4. Manually query registrar if you know the URL:
    rdap -s https://rdap.markmonitor.com/rdap example.com
    

Error: “Failed to fetch registrar data”

Cause: Registrar’s RDAP server is unreachable or returned an error.
  1. View detailed error with verbose mode:
    rdap -v example.com
    
  2. Client falls back to registry-only data:
    • The query still succeeds with registry data
    • Warning is logged about registrar fetch failure
  3. Try querying registrar directly:
    # Get registrar URL from registry response
    rdap --no-referral -f json example.com | jq '.links[] | select(.rel=="related")'
    
    # Query it directly
    rdap -s <registrar-url> example.com
    
  4. Report to registrar if consistently failing:
    • May indicate misconfigured RDAP server
    • Some registrars still transitioning to RDAP

Configuration Problems

Issue: Config updates fail

Error: “Failed to update config.json” or similar.
  1. Check permissions:
    ls -la ~/.config/rdap/
    # Ensure directory is writable
    chmod 755 ~/.config/rdap/
    
  2. Verify internet connectivity:
    curl https://raw.githubusercontent.com/xtomcom/rdap/main/config/config.json
    
  3. Check disk space:
    df -h ~
    
  4. Manual update:
    cd ~/.config/rdap/
    curl -O https://raw.githubusercontent.com/xtomcom/rdap/main/config/config.json
    curl -O https://raw.githubusercontent.com/xtomcom/rdap/main/config/tlds.json
    curl -O https://data.iana.org/TLD/tlds-alpha-by-domain.txt
    mv tlds-alpha-by-domain.txt tlds.txt
    

Issue: Local overrides not working

Problem: Changes to *.local.json files not taking effect.
  1. Verify file location:
    ls ~/.config/rdap/*.local.json
    
    Files must be in ~/.config/rdap/, not /etc/rdap/
  2. Check JSON syntax:
    cat ~/.config/rdap/tlds.local.json | jq .
    
    If this errors, you have invalid JSON.
  3. Verify file is being loaded:
    rdap -v example.io 2>&1 | grep -i "config\|override"
    
  4. For TLD overrides, ensure correct format:
    {
      "io": "https://rdap.identitydigital.services/rdap/",
      "com.af": "https://rdap.coccaregistry.org/rdap/"
    }
    
    Keys are TLDs (lowercase), values are base RDAP URLs with trailing slash.

Cache Issues

Issue: Stale bootstrap data

Symptom: Bootstrap lookups returning old or incorrect servers.
  1. Clear cache:
    rm -rf ~/.cache/rdap/*
    
  2. Update configs and cache:
    rdap --update
    rm -rf ~/.cache/rdap/*
    rdap example.com  # Re-populates cache
    
  3. Adjust cache TTL: Edit ~/.config/rdap/config.local.json:
    {
      "cache": {
        "ttl_seconds": 3600
      }
    }
    
    Lower value = more frequent bootstrap fetches, higher latency but fresher data.
  4. Disable caching (for debugging):
    {
      "cache": {
        "ttl_seconds": 0
      }
    }
    

Debugging Techniques

Verbose Mode

Always use -v flag for debugging:
rdap -v example.com
Verbose output shows:
  • Detected query type
  • Bootstrap server URLs
  • RDAP server URLs being queried
  • Retry attempts (for IPv6 CIDR)
  • Registrar referral following

JSON Output for Inspection

# Pretty-printed JSON
rdap -f json-pretty example.com | less

# Pipe to jq for analysis
rdap -f json example.com | jq '.entities[] | select(.roles[] | contains("registrar"))'

# Save raw response for bug reports
rdap -f json example.com > response.json

Testing Bootstrap Matching

# Test domain matching
rdap -v example.com 2>&1 | grep -i bootstrap

# Test IP matching
rdap -v 8.8.8.8 2>&1 | grep -i bootstrap

# Test AS matching
rdap -v AS15169 2>&1 | grep -i bootstrap

Checking Configuration Precedence

# See which config file is loaded
rdap -v example.com 2>&1 | grep -i "loaded config"

# List all config files
ls -la ~/.config/rdap/
ls -la /etc/rdap/

# View active config
cat ~/.config/rdap/config.json
cat ~/.config/rdap/config.local.json  # Takes precedence

Network Debugging

# Test direct RDAP query with curl
curl -H "Accept: application/rdap+json" \
  https://rdap.verisign.com/com/v1/domain/example.com | jq .

# Check bootstrap file accessibility
curl https://data.iana.org/rdap/dns.json | jq .

# Trace DNS resolution
dig rdap.verisign.com

# Check TLS/SSL
openssl s_client -connect rdap.verisign.com:443 -servername rdap.verisign.com

Error Message Reference

Bootstrap Errors

ErrorCauseSolution
No RDAP servers foundBootstrap matching failedUpdate configs, check TLD overrides, use explicit server
Failed to fetch registry: HTTP {code}Bootstrap file inaccessibleCheck IANA service status, update config URLs
Entity queries require explicit serverNo bootstrap for entitiesUse -s flag with server URL

HTTP Errors

ErrorCauseSolution
HTTP error: 400Malformed queryCheck query format, try CIDR for IPv6
HTTP error: 404 / NotFoundResource doesn’t existVerify resource exists, check server
HTTP error: 429Rate limitedSlow down queries, wait and retry
HTTP error: 500Server errorTry later, use alternate server
HTTP error: 503Service unavailableServer maintenance, retry later

Query Errors

ErrorCauseSolution
Invalid IP address: {ip}IP format invalidUse standard notation or CIDR
Invalid AS number: {asn}Non-numeric AS valueEnsure numeric, AS prefix optional
Invalid query: {msg}General validation failureCheck query format

Network Errors

ErrorCauseSolution
Connection timeoutNetwork slow/unreachableIncrease timeout, check connectivity
Connection refusedServer down or firewallCheck server status, verify port 443 open
DNS resolution failedDNS issuesCheck DNS settings, try alternate DNS

JSON Errors

ErrorCauseSolution
JSON parse errorInvalid JSON from serverReport to server operator
Invalid RDAP responseNon-JSON or malformedUse verbose mode, save response for bug report

I/O Errors

ErrorCauseSolution
Permission deniedCan’t write config/cacheCheck file permissions
No such file or directoryConfig path issueCreate directory: mkdir -p ~/.config/rdap
Disk fullNo space for cacheFree disk space or clear cache

Performance Troubleshooting

Slow Queries

  1. Enable caching (default):
    • First query fetches bootstrap (slow)
    • Subsequent queries use cache (fast)
  2. Pre-warm cache:
    rdap example.com  # Populates DNS bootstrap cache
    rdap 8.8.8.8      # Populates IPv4 bootstrap cache
    rdap AS15169      # Populates ASN bootstrap cache
    
  3. Use explicit server to skip bootstrap:
    rdap -s https://rdap.verisign.com/com/v1 example.com
    
  4. Batch queries in scripts:
    # Share client instance in library usage
    let client = RdapClient::new()?;
    for domain in domains {
        client.query(&RdapRequest::new(QueryType::Domain, domain)).await?;
    }
    
  5. Reduce timeout for faster failures:
    rdap --timeout 10 example.com  # 10 seconds instead of 30
    

High Memory Usage

  1. For CLI usage:
    • Memory usage is minimal (typically less than 10 MB)
    • If high, may indicate network buffering of large responses
  2. For library usage with many queries:
    // Drop large responses when done
    let result = client.query(&request).await?;
    // Process result
    drop(result);  // Explicit drop if holding many in memory
    
  3. Limit JSON output size:
    rdap -f json example.com | head -n 100  # Truncate large responses
    

Getting Help

Before Reporting Issues

Information to gather:
  1. Version:
    rdap --version
    cargo tree | grep rdap  # For library usage
    
  2. Verbose output:
    rdap -v <your-query> 2>&1 | tee debug.log
    
  3. Configuration:
    ls -la ~/.config/rdap/
    cat ~/.config/rdap/*.json
    
  4. Platform:
    uname -a
    rustc --version
    
  5. Network:
    curl -v https://data.iana.org/rdap/dns.json
    

Reporting Bugs

When opening an issue:
  1. Provide minimal reproducible example
  2. Include verbose output
  3. Attach JSON response if relevant (-f json-pretty)
  4. Specify platform and version
  5. Describe expected vs actual behavior

Community Support

Build docs developers (and LLMs) love