The RDAP library supports all standard RDAP query types defined in RFC 7482.
QueryType Enum
The QueryType enum defines all available query operations:
pub enum QueryType {
Domain ,
Tld ,
Ip ,
Autnum ,
Entity ,
Nameserver ,
Help ,
DomainSearch ,
DomainSearchByNameserver ,
DomainSearchByNameserverIp ,
NameserverSearch ,
NameserverSearchByIp ,
EntitySearch ,
EntitySearchByHandle ,
}
Source reference: src/request.rs:8
Lookup Queries
Lookup queries retrieve a single object by its identifier.
Domain
Query a domain name:
use rdap :: { RdapRequest , QueryType };
let request = RdapRequest :: new ( QueryType :: Domain , "example.com" );
URL format: {base}/domain/example.com
Returns: RdapObject::Domain
Tld
Query a top-level domain:
let request = RdapRequest :: new ( QueryType :: Tld , "com" );
URL format: {base}/domain/com
Returns: RdapObject::Domain
TLD queries are automatically routed to IANA’s RDAP service.
Query an IP address or network:
IPv4 Address
IPv6 Address
CIDR Notation
let request = RdapRequest :: new ( QueryType :: Ip , "192.0.2.1" );
URL format: {base}/ip/192.0.2.1let request = RdapRequest :: new ( QueryType :: Ip , "2001:db8::1" );
URL format: {base}/ip/2001:db8::1let request = RdapRequest :: new ( QueryType :: Ip , "192.0.2.0/24" );
URL format: {base}/ip/192.0.2.0/24
Returns: RdapObject::IpNetwork
Autnum
Query an Autonomous System Number:
// With AS prefix
let request = RdapRequest :: new ( QueryType :: Autnum , "AS15169" );
// Without AS prefix
let request = RdapRequest :: new ( QueryType :: Autnum , "15169" );
URL format: {base}/autnum/15169
Returns: RdapObject::Autnum
The library automatically strips the “AS” prefix if present.
Source reference: src/request.rs:96
Entity
Query an entity (registrant, contact):
let request = RdapRequest :: new ( QueryType :: Entity , "ENTITY-HANDLE" );
URL format: {base}/entity/ENTITY-HANDLE
Returns: RdapObject::Entity
Nameserver
Query a nameserver:
let request = RdapRequest :: new ( QueryType :: Nameserver , "ns1.example.com" );
URL format: {base}/nameserver/ns1.example.com
Returns: RdapObject::Nameserver
Help
Query server help information:
let request = RdapRequest :: new ( QueryType :: Help , "" );
URL format: {base}/help
Returns: RdapObject::Help
Search Queries
Search queries return multiple matching objects.
DomainSearch
Search for domains by name:
let request = RdapRequest :: new ( QueryType :: DomainSearch , "example*.com" );
URL format: {base}/domains?name=example*.com
Returns: RdapObject::DomainSearch
Source reference: src/request.rs:107
DomainSearchByNameserver
Search for domains by nameserver name:
let request = RdapRequest :: new (
QueryType :: DomainSearchByNameserver ,
"ns1.example.com"
);
URL format: {base}/domains?nsLdhName=ns1.example.com
Returns: RdapObject::DomainSearch
Source reference: src/request.rs:110
DomainSearchByNameserverIp
Search for domains by nameserver IP:
let request = RdapRequest :: new (
QueryType :: DomainSearchByNameserverIp ,
"192.0.2.1"
);
URL format: {base}/domains?nsIp=192.0.2.1
Returns: RdapObject::DomainSearch
Source reference: src/request.rs:113
NameserverSearch
Search for nameservers by name:
let request = RdapRequest :: new ( QueryType :: NameserverSearch , "ns*.example.com" );
URL format: {base}/nameservers?name=ns*.example.com
Returns: RdapObject::NameserverSearch
Source reference: src/request.rs:116
NameserverSearchByIp
Search for nameservers by IP address:
let request = RdapRequest :: new ( QueryType :: NameserverSearchByIp , "192.0.2.1" );
URL format: {base}/nameservers?ip=192.0.2.1
Returns: RdapObject::NameserverSearch
Source reference: src/request.rs:119
EntitySearch
Search for entities by full name:
let request = RdapRequest :: new ( QueryType :: EntitySearch , "Example Corp" );
URL format: {base}/entities?fn=Example%20Corp
Returns: RdapObject::EntitySearch
Source reference: src/request.rs:122
EntitySearchByHandle
Search for entities by handle:
let request = RdapRequest :: new ( QueryType :: EntitySearchByHandle , "EXAMPLE-*" );
URL format: {base}/entities?handle=EXAMPLE-*
Returns: RdapObject::EntitySearch
Source reference: src/request.rs:125
Auto-Detection
The library can automatically detect the query type:
use rdap :: RdapRequest ;
// Domain
let qt = RdapRequest :: detect_type ( "example.com" ) ? ;
// QueryType::Domain
// IPv4
let qt = RdapRequest :: detect_type ( "8.8.8.8" ) ? ;
// QueryType::Ip
// IPv6
let qt = RdapRequest :: detect_type ( "2001:db8::1" ) ? ;
// QueryType::Ip
// AS Number (with prefix)
let qt = RdapRequest :: detect_type ( "AS15169" ) ? ;
// QueryType::Autnum
// AS Number (without prefix)
let qt = RdapRequest :: detect_type ( "15169" ) ? ;
// QueryType::Autnum
Source reference: src/request.rs:134
Detection Logic
The auto-detection follows this priority:
AS Number
Strings starting with “AS” followed by digits, or pure numeric strings.
IP Address
IPv4 or IPv6 patterns, including CIDR notation.
TLD
Single word (no dots) matching a known TLD.
Domain
Default fallback for all other strings.
Source reference: src/request.rs:139
URL Building
The library automatically constructs the correct RDAP URL:
use rdap :: RdapRequest ;
use url :: Url ;
let base_url = Url :: parse ( "https://rdap.example.com/" ) ? ;
let request = RdapRequest :: new ( QueryType :: Domain , "example.com" );
let url = request . build_url ( & base_url ) ? ;
// https://rdap.example.com/domain/example.com
Source reference: src/request.rs:88
Query strings are automatically URL-encoded for safe transmission.
Complete Example
use rdap :: { RdapClient , RdapRequest , QueryType };
#[tokio :: main]
async fn main () -> Result <(), Box < dyn std :: error :: Error >> {
let client = RdapClient :: new () ? ;
// Try different query types
let queries = vec! [
( QueryType :: Domain , "example.com" ),
( QueryType :: Ip , "8.8.8.8" ),
( QueryType :: Autnum , "AS15169" ),
( QueryType :: Entity , "IANA" ),
( QueryType :: DomainSearch , "example*.com" ),
];
for ( query_type , query ) in queries {
println! ( " \n === {:?}: {} ===" , query_type , query );
let request = RdapRequest :: new ( query_type , query );
match client . query ( & request ) . await {
Ok ( result ) => println! ( "✓ Success: {:?}" , result ),
Err ( e ) => eprintln! ( "✗ Error: {}" , e ),
}
}
Ok (())
}
Next Steps
Working with Results Learn how to extract data from query results
Error Handling Handle errors and edge cases