use rdap::{RdapClient, RdapRequest, QueryType, RdapObject};#[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 { if let Some(name) = &domain.ldh_name { println!("Domain: {}", name); } println!("Status: {:?}", domain.status); println!("Nameservers: {}", domain.nameservers.len()); } Ok(())}
use rdap::{RdapClient, RdapRequest, QueryType, RdapObject};#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let client = RdapClient::new()?; let request = RdapRequest::new(QueryType::Ip, "8.8.8.8"); let result = client.query(&request).await?; if let RdapObject::IpNetwork(network) = result { if let Some(name) = &network.name { println!("Network Name: {}", name); } if let (Some(start), Some(end)) = (&network.start_address, &network.end_address) { println!("Range: {} - {}", start, end); } if let Some(country) = &network.country { println!("Country: {}", country); } } Ok(())}
use rdap::{RdapClient, RdapRequest, QueryType, RdapObject};#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let client = RdapClient::new()?; let request = RdapRequest::new(QueryType::Ip, "2001:4860:4860::8888"); let result = client.query(&request).await?; if let RdapObject::IpNetwork(network) = result { if let Some(version) = &network.ip_version { println!("IP Version: IPv{}", version); } if let (Some(start), Some(end)) = (&network.start_address, &network.end_address) { println!("Range: {} - {}", start, end); } } Ok(())}
use rdap::{RdapClient, RdapRequest, QueryType};#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let client = RdapClient::new()?; // Query with CIDR notation let request = RdapRequest::new(QueryType::Ip, "192.0.2.0/24"); let result = client.query(&request).await?; println!("Result: {:?}", result); Ok(())}
Source reference:examples/ip_lookup.rs
The library automatically handles IPv6 normalization and can retry failed queries with CIDR notation for better compatibility with some RDAP servers.
use rdap::{RdapClient, RdapRequest, QueryType, RdapObject};#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let client = RdapClient::new()?; // AS prefix is optional let request = RdapRequest::new(QueryType::Autnum, "AS15169"); // or let request = RdapRequest::new(QueryType::Autnum, "15169"); 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); } println!("Contact entities: {}", autnum.entities.len()); } Ok(())}
Query a specific RDAP server instead of using bootstrap discovery:
use rdap::{RdapClient, RdapRequest, QueryType};use url::Url;#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let client = RdapClient::new()?; // Specify custom 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?; println!("Result: {:?}", result); Ok(())}