This guide will get you from zero to querying RDAP data in under 5 minutes. We’ll cover the most common use cases and show you how to get the information you need.
use rdap::{QueryType, RdapClient, RdapRequest, display::RdapDisplay};#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { // Create a client let client = RdapClient::new()?; // Create a domain query let request = RdapRequest::new(QueryType::Domain, "example.com"); // Execute the query let result = client.query(&request).await?; // Display the result with colors result.display(false); Ok(())}
use rdap::{RdapClient, RdapRequest};#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let client = RdapClient::new()?; // Auto-detect query type let query = "8.8.8.8"; let query_type = RdapRequest::detect_type(query)?; let request = RdapRequest::new(query_type, query); let result = client.query(&request).await?; // Display result use rdap::display::RdapDisplay; result.display(false); Ok(())}
use rdap::{QueryType, RdapClient, RdapObject, RdapRequest};#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let client = RdapClient::new()?; let request = RdapRequest::new(QueryType::Domain, "example.com"); let result = client.query(&request).await?; if let RdapObject::Domain(domain) = result { // Access domain properties println!("Domain: {}", domain.ldh_name.unwrap_or_default()); // Check status for status in &domain.status { println!("Status: {}", status); } // List nameservers for ns in &domain.nameservers { if let Some(name) = &ns.ldh_name { println!("Nameserver: {}", name); } } // Check DNSSEC if let Some(dnssec) = &domain.secure_dns { if let Some(signed) = dnssec.delegation_signed { println!("DNSSEC: {}", if signed { "Signed" } else { "Not signed" }); } } } Ok(())}
use rdap::{QueryType, RdapClient, RdapObject, RdapRequest};#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let client = RdapClient::new()?; let request = RdapRequest::new(QueryType::Autnum, "AS15169"); let result = client.query(&request).await?; if let RdapObject::Autnum(autnum) = result { if let Some(start) = autnum.start_autnum { println!("AS Number: AS{}", start); } if let Some(name) = &autnum.name { println!("Name: {}", name); } if let Some(country) = &autnum.country { println!("Country: {}", country); } } Ok(())}
use rdap::{QueryType, RdapClient, RdapRequest, display::RdapDisplay};use url::Url;#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let client = RdapClient::new()?; // Query with a specific RDAP server let server = Url::parse("https://rdap.nic.cz")?; let request = RdapRequest::new(QueryType::Domain, "nic.cz") .with_server(server); let result = client.query(&request).await?; result.display(false); Ok(())}
# For IP addresses (shown at top of output)rdap 8.8.8.8 | head -n 3# For AS numbersrdap AS15169 | head -n 3# Extract from JSONrdap -f json 8.8.8.8 | jq '.entities[] | select(.roles[] | contains("abuse"))'
# Check if domain is lockedrdap -f json example.com | jq '.status[] | select(contains("lock"))'# Get all status valuesrdap -f json example.com | jq '.status[]'