From e63f218861ae01db9b166b53343c6c8d56446718 Mon Sep 17 00:00:00 2001 From: Adam Guyot Date: Mon, 17 Jun 2024 10:38:31 -0400 Subject: [PATCH] gtld functionality --- icann-rdap-cli/src/main.rs | 4 + icann-rdap-cli/src/query.rs | 13 + icann-rdap-client/src/gtld/domain.rs | 179 ++ icann-rdap-client/src/gtld/entity.rs | 225 ++ icann-rdap-client/src/gtld/error.rs | 8 + icann-rdap-client/src/gtld/help.rs | 8 + icann-rdap-client/src/gtld/mod.rs | 78 + icann-rdap-client/src/gtld/nameserver.rs | 20 + icann-rdap-client/src/gtld/network.rs | 28 + icann-rdap-client/src/gtld/types.rs | 8 + icann-rdap-client/src/lib.rs | 1 + icann-rdap-client/src/md/mod.rs | 3 +- icann-rdap-client/src/test_files/arin.json | 1894 +++++++++++++++++ .../src/test_files/lemonde.fr.json | 1007 +++++++++ .../src/test_files/microsoft.click.json | 455 ++++ icann-rdap-client/src/test_files/nic.xyz.json | 347 +++ 16 files changed, 4276 insertions(+), 2 deletions(-) create mode 100644 icann-rdap-client/src/gtld/domain.rs create mode 100644 icann-rdap-client/src/gtld/entity.rs create mode 100644 icann-rdap-client/src/gtld/error.rs create mode 100644 icann-rdap-client/src/gtld/help.rs create mode 100644 icann-rdap-client/src/gtld/mod.rs create mode 100644 icann-rdap-client/src/gtld/nameserver.rs create mode 100644 icann-rdap-client/src/gtld/network.rs create mode 100644 icann-rdap-client/src/gtld/types.rs create mode 100644 icann-rdap-client/src/test_files/arin.json create mode 100644 icann-rdap-client/src/test_files/lemonde.fr.json create mode 100644 icann-rdap-client/src/test_files/microsoft.click.json create mode 100644 icann-rdap-client/src/test_files/nic.xyz.json diff --git a/icann-rdap-cli/src/main.rs b/icann-rdap-cli/src/main.rs index caecd5c..fcdda1f 100644 --- a/icann-rdap-cli/src/main.rs +++ b/icann-rdap-cli/src/main.rs @@ -292,6 +292,9 @@ enum OtypeArg { /// RDAP JSON with extra information. JsonExtra, + /// Global Top Level Domain Output + Gtld, + /// Automatically determine the output type. Auto, } @@ -392,6 +395,7 @@ pub async fn main() -> anyhow::Result<()> { OtypeArg::Json => OutputType::Json, OtypeArg::PrettyJson => OutputType::PrettyJson, OtypeArg::JsonExtra => OutputType::JsonExtra, + OtypeArg::Gtld => OutputType::Gtld, }; let check_types = if cli.check_type.is_empty() { diff --git a/icann-rdap-cli/src/query.rs b/icann-rdap-cli/src/query.rs index 13f512a..86e1617 100644 --- a/icann-rdap-cli/src/query.rs +++ b/icann-rdap-cli/src/query.rs @@ -6,6 +6,7 @@ use tracing::error; use tracing::info; use icann_rdap_client::{ + gtld::{GtldParams, ToGtld}, md::{redacted::replace_redacted_items, MdOptions, MdParams, ToMd}, query::{qtype::QueryType, request::ResponseData}, request::{RequestData, RequestResponse, RequestResponses, SourceType}, @@ -33,6 +34,9 @@ pub(crate) enum OutputType { /// Results are output as Pretty RDAP JSON. PrettyJson, + /// Global Top Level Domain Output + Gtld, + /// RDAP JSON with extra information. JsonExtra, } @@ -267,6 +271,14 @@ fn do_output<'a, W: std::io::Write>( }) )?; } + OutputType::Gtld => { + let mut params = GtldParams { + root: &response.rdap, + parent_type: response.rdap.get_type(), + label: "".to_string(), + }; + writeln!(write, "{}", response.rdap.to_gtld(&mut params))?; + } _ => {} // do nothing }; @@ -312,6 +324,7 @@ fn do_final_output( OutputType::JsonExtra => { writeln!(write, "{}", serde_json::to_string(&transactions).unwrap())? } + OutputType::Gtld => {} _ => {} // do nothing }; diff --git a/icann-rdap-client/src/gtld/domain.rs b/icann-rdap-client/src/gtld/domain.rs new file mode 100644 index 0000000..23a7c3e --- /dev/null +++ b/icann-rdap-client/src/gtld/domain.rs @@ -0,0 +1,179 @@ +use super::{GtldParams, ToGtld}; +use icann_rdap_common::response::domain::Domain; +use icann_rdap_common::response::domain::SecureDns; +use icann_rdap_common::response::nameserver::Nameserver; +use icann_rdap_common::response::network::Network; +use icann_rdap_common::response::types::{Event, StatusValue}; + +impl ToGtld for Domain { + fn to_gtld(&self, params: &mut GtldParams) -> String { + let mut gtld = String::new(); + + gtld.push_str("\n\n"); + // Domain Name + let domain_name = format_domain_name(self); + gtld.push_str(&domain_name); + + // Domain ID + let domain_id = format_domain_id(self.object_common.handle.as_ref()); + gtld.push_str(&domain_id); + + // Date Time for Registry + let date_info = format_registry_dates(&self.object_common.events); + gtld.push_str(&date_info); + + // Common Object Stuff + let domain_info = + format_domain_info(&self.object_common.status, &self.object_common.port_43); + gtld.push_str(&domain_info); + + // Enitities! + // registrar and abuse/tech/admin/registrant info + // let formatted_data = format_registrar_and_role_info(params, &self.object_common.entities); + let formatted_data = self.object_common.entities.to_gtld(params); + gtld.push_str(&formatted_data); + + // nameservers and network + let additional_info = + format_nameservers_and_network(&self.nameservers, &self.network, params); + gtld.push_str(&additional_info); + + // secure dns + let dnssec_info = format_dnssec_info(&self.secure_dns); + gtld.push_str(&dnssec_info); + + gtld.push_str( + "URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/\n", + ); + + // last update info + format_last_update_info(&self.object_common.events, &mut gtld); + + gtld + } +} + +fn format_domain_name(domain: &Domain) -> String { + if let Some(unicode_name) = &domain.unicode_name { + format!("Domain Name: {unicode_name}\n") + } else if let Some(ldh_name) = &domain.ldh_name { + format!("Domain Name: {ldh_name}\n") + } else if let Some(handle) = &domain.object_common.handle { + format!("Domain Name: {handle}\n") + } else { + "Domain Name: \n".to_string() + } +} + +fn format_domain_id(handle: Option<&String>) -> String { + if let Some(handle) = handle { + format!("Registry Domain ID: {handle}\n") + } else { + "Registry Domain ID: \n".to_string() + } +} + +fn format_registry_dates(events: &Option>) -> String { + let mut formatted_dates = String::new(); + if let Some(events) = events { + for event in events { + match event.event_action.as_str() { + "last changed" => { + if let Some(event_date) = &event.event_date { + formatted_dates.push_str(&format!("Updated Date: {}\n", event_date)); + } + } + "registration" => { + if let Some(event_date) = &event.event_date { + formatted_dates.push_str(&format!("Creation Date: {}\n", event_date)); + } + } + "expiration" => { + if let Some(event_date) = &event.event_date { + formatted_dates + .push_str(&format!("Registry Expiry Date: {}\n", event_date)); + } + } + _ => {} + } + } + } + + formatted_dates +} + +fn format_domain_info(status: &Option>, port_43: &Option) -> String { + let mut info = String::new(); + if let Some(status) = status { + for value in status { + info.push_str(&format!("Domain Status: {}\n", **value)); + } + } + if let Some(port_43) = port_43 { + if !port_43.is_empty() { + info.push_str(&format!("Registrar Whois Server: {}\n", port_43)); + } + } + + info +} + +fn format_nameservers_and_network( + nameservers: &Option>, + network: &Option, + params: &mut GtldParams, +) -> String { + let mut gtld = String::new(); + + if let Some(nameservers) = nameservers { + nameservers + .iter() + .for_each(|ns| gtld.push_str(&ns.to_gtld(params))); + } + + if let Some(network) = network { + gtld.push_str(&network.to_gtld(params)); + } + + gtld +} + +fn format_dnssec_info(secure_dns: &Option) -> String { + let mut dnssec_info = String::new(); + + if let Some(secure_dns) = secure_dns { + if secure_dns.delegation_signed.unwrap_or(false) { + dnssec_info.push_str("DNSSEC: signedDelegation\n"); + if let Some(ds_data) = &secure_dns.ds_data { + for ds in ds_data { + if let (Some(key_tag), Some(algorithm), Some(digest_type), Some(digest)) = + (ds.key_tag, ds.algorithm, ds.digest_type, ds.digest.as_ref()) + { + dnssec_info.push_str(&format!( + "DNSSEC DS Data: {} {} {} {}\n", + key_tag, algorithm, digest_type, digest + )); + } + } + } + } + } + + dnssec_info +} + +fn format_last_update_info(events: &Option>, gtld: &mut String) { + if let Some(events) = events { + for event in events { + if event.event_action == "last update of RDAP database" { + if let Some(event_date) = &event.event_date { + gtld.push_str(&format!( + ">>> Last update of RDAP database: {} <<<\n", + event_date + )); + } + break; + } + } + } +} diff --git a/icann-rdap-client/src/gtld/entity.rs b/icann-rdap-client/src/gtld/entity.rs new file mode 100644 index 0000000..30ea7ae --- /dev/null +++ b/icann-rdap-client/src/gtld/entity.rs @@ -0,0 +1,225 @@ +use super::{GtldParams, RoleInfo, ToGtld}; +use icann_rdap_common::contact::PostalAddress; +use icann_rdap_common::response::entity::Entity; + +impl ToGtld for Option> { + fn to_gtld(&self, params: &mut GtldParams) -> String { + let mut front_formatted_data = String::new(); + let mut formatted_data = String::new(); + + if let Some(entities) = self { + for entity in entities { + if let Some(roles) = &entity.roles { + for role in roles { + match role.as_str() { + "registrar" => { + if let Some(vcard_array) = &entity.vcard_array { + let role_info = extract_role_info(role, vcard_array, params); + // Now use role_info to append to formatted_data + if !role_info.name.is_empty() { + front_formatted_data += + &format!("{}: {}\n", cfl(role), role_info.name); + } + if !role_info.org.is_empty() { + front_formatted_data += &format!( + "{} Organization: {}\n", + cfl(role), + role_info.org + ); + } + if !role_info.url.is_empty() { + front_formatted_data += + &format!("{} URL: {}\n", cfl(role), role_info.url); + } + if !role_info.adr.is_empty() { + front_formatted_data += &role_info.adr; + } + } + // Special Sauce for Registrar IANA ID and Abuse Contact + if let Some(public_ids) = &entity.public_ids { + for public_id in public_ids { + if public_id.id_type.as_str() == "IANA Registrar ID" + && !public_id.identifier.is_empty() + { + front_formatted_data += &format!( + "Registrar IANA ID: {}\n", + public_id.identifier.clone() + ); + } + } + } + append_abuse_contact_info(entity, &mut front_formatted_data); + } + "technical" | "administrative" | "registrant" => { + if let Some(vcard_array) = &entity.vcard_array { + let role_info = extract_role_info(role, vcard_array, params); + // Now use role_info to append to formatted_data + if !role_info.name.is_empty() { + formatted_data += + &format!("{} Name: {}\n", cfl(role), role_info.name); + } + if !role_info.org.is_empty() { + formatted_data += &format!( + "{} Organization: {}\n", + cfl(role), + role_info.org + ); + } + if !role_info.adr.is_empty() { + formatted_data += &role_info.adr; + } + } + } + _ => {} // Are there any roles we are missing? + } + } + } + } + } + + front_formatted_data += &formatted_data; + front_formatted_data + } +} + +fn format_address_with_label( + params: &mut GtldParams, + address_components: &[serde_json::Value], +) -> String { + let postal_address = PostalAddress::builder() + .street_parts( + address_components + .get(2) + .and_then(|v| v.as_str()) + .map_or_else(Vec::new, |s| vec![s.to_string()]), + ) + .locality( + address_components + .get(3) + .and_then(|v| v.as_str()) + .map_or_else(String::new, String::from), + ) + .region_name( + address_components + .get(4) + .and_then(|v| v.as_str()) + .map_or_else(String::new, String::from), + ) + .country_name( + address_components + .get(6) + .and_then(|v| v.as_str()) + .map_or_else(String::new, String::from), + ) + .country_code( + address_components + .get(6) + .and_then(|v| v.as_str()) + .map_or_else(String::new, String::from), + ) + .postal_code( + address_components + .get(5) + .and_then(|v| v.as_str()) + .map_or_else(String::new, String::from), + ) + .build(); + + postal_address.to_gtld(params).to_string() +} + +fn extract_role_info( + role: &str, + vcard_array: &[serde_json::Value], + params: &mut GtldParams, +) -> RoleInfo { + let mut name = String::new(); + let mut org = String::new(); + let mut url = String::new(); + let mut adr = String::new(); + + let label = match role { + "registrar" => "Registrar", + "technical" => "Technical", + "administrative" => "Admin", + "registrant" => "Registrant", + _ => "", + }; + params.label = label.to_string(); + + for vcard in vcard_array.iter() { + if let Some(properties) = vcard.as_array() { + for property in properties { + if let Some(property) = property.as_array() { + match property[0].as_str().unwrap_or("") { + "fn" => name = property[3].as_str().unwrap_or("").to_string(), + "url" => url = property[3].as_str().unwrap_or("").to_string(), + "org" => org = property[3].as_str().unwrap_or("").to_string(), + "adr" => { + if let Some(address_components) = property[3].as_array() { + adr = format_address_with_label(params, address_components); + } + } + _ => {} + } + } + } + } + } + + RoleInfo { + name, + org, + url, + adr, + } +} + +fn append_abuse_contact_info(entity: &Entity, front_formatted_data: &mut String) { + if let Some(entities) = &entity.object_common.entities { + for entity in entities { + if let Some(roles) = &entity.roles { + for role in roles { + if role.as_str() == "abuse" { + if let Some(vcard_array) = &entity.vcard_array { + if let Some(properties) = vcard_array[1].as_array() { + for property in properties { + if let Some(property) = property.as_array() { + if property[0].as_str().unwrap_or("") == "tel" { + let abuse_contact_phone = + property[3].as_str().unwrap_or("").to_string(); + if !abuse_contact_phone.is_empty() { + front_formatted_data.push_str(&format!( + "Registrar Abuse Contact Phone: {}\n", + abuse_contact_phone + )); + } + } else if property[0].as_str().unwrap_or("") == "email" { + let abuse_contact_email = + property[3].as_str().unwrap_or("").to_string(); + if !abuse_contact_email.is_empty() { + front_formatted_data.push_str(&format!( + "Registrar Abuse Contact Email: {}\n", + abuse_contact_email + )); + } + } + } + } + } + } + } + } + } + } + } +} + +// Where do we move this to? +// capitalize first letter +fn cfl(s: &str) -> String { + s.char_indices() + .next() + .map(|(i, c)| c.to_uppercase().collect::() + &s[i + 1..]) + .unwrap_or_default() +} diff --git a/icann-rdap-client/src/gtld/error.rs b/icann-rdap-client/src/gtld/error.rs new file mode 100644 index 0000000..1119cc5 --- /dev/null +++ b/icann-rdap-client/src/gtld/error.rs @@ -0,0 +1,8 @@ +use super::{GtldParams, ToGtld}; +use icann_rdap_common::response::error::Error; + +impl ToGtld for Error { + fn to_gtld(&self, _params: &mut GtldParams) -> String { + String::new() + } +} diff --git a/icann-rdap-client/src/gtld/help.rs b/icann-rdap-client/src/gtld/help.rs new file mode 100644 index 0000000..868a368 --- /dev/null +++ b/icann-rdap-client/src/gtld/help.rs @@ -0,0 +1,8 @@ +use super::{GtldParams, ToGtld}; +use icann_rdap_common::response::help::Help; + +impl ToGtld for Help { + fn to_gtld(&self, _params: &mut GtldParams) -> String { + String::new() + } +} diff --git a/icann-rdap-client/src/gtld/mod.rs b/icann-rdap-client/src/gtld/mod.rs new file mode 100644 index 0000000..73f867e --- /dev/null +++ b/icann-rdap-client/src/gtld/mod.rs @@ -0,0 +1,78 @@ +use icann_rdap_common::contact::PostalAddress; +use icann_rdap_common::response::RdapResponse; +use std::any::TypeId; + +pub mod domain; +pub mod entity; +pub mod error; +pub mod help; +pub mod nameserver; +pub mod network; +pub mod types; + +#[derive(Clone)] +pub struct GtldParams<'a> { + pub root: &'a RdapResponse, + pub parent_type: TypeId, + pub label: String, +} + +impl<'a> GtldParams<'a> { + pub fn from_parent(&mut self, parent_type: TypeId) -> Self { + GtldParams { + parent_type, + root: self.root, + label: self.label.clone(), + } + } + + pub fn next_level(&self) -> Self { + GtldParams { + label: self.label.clone(), + ..*self + } + } +} + +pub trait ToGtld { + fn to_gtld(&self, params: &mut GtldParams) -> String; +} + +impl ToGtld for RdapResponse { + fn to_gtld(&self, params: &mut GtldParams) -> String { + let mut gtld = String::new(); + let variant_gtld = match &self { + RdapResponse::Domain(domain) => domain.to_gtld(params), + _ => String::new(), + }; + gtld.push_str(&variant_gtld); + gtld + } +} + +impl ToGtld for PostalAddress { + fn to_gtld(&self, params: &mut GtldParams) -> String { + let label = ¶ms.label; // Use the label from params + + let street = self + .street_parts + .as_ref() + .map(|parts| parts.join(" ")) + .unwrap_or_default(); + let city = self.locality.as_deref().unwrap_or(""); + let state = self.region_name.as_deref().unwrap_or(""); + let postal_code = self.postal_code.as_deref().unwrap_or(""); + let country = self.country_code.as_deref().unwrap_or(""); + + format!( + "{} Street: {}\n{} City: {}\n{} State/Province: {}\n{} Postal Code: {}\n{} Country: {}\n", + label, street, label, city, label, state, label, postal_code, label, country + ) + } +} +pub struct RoleInfo { + name: String, + org: String, + url: String, + adr: String, +} diff --git a/icann-rdap-client/src/gtld/nameserver.rs b/icann-rdap-client/src/gtld/nameserver.rs new file mode 100644 index 0000000..8495d65 --- /dev/null +++ b/icann-rdap-client/src/gtld/nameserver.rs @@ -0,0 +1,20 @@ +use super::{GtldParams, ToGtld}; +use icann_rdap_common::response::nameserver::Nameserver; + +impl ToGtld for Nameserver { + fn to_gtld(&self, _params: &mut GtldParams) -> String { + let mut gtld = String::new(); + // header + let header_text = if let Some(unicode_name) = &self.unicode_name { + format!("Name Server: {unicode_name}\n") + } else if let Some(ldh_name) = &self.ldh_name { + format!("Name Server: {ldh_name}\n") + } else if let Some(handle) = &self.object_common.handle { + format!("Name Server: {handle}\n") + } else { + "Name Server: \n".to_string() + }; + gtld.push_str(&header_text); + gtld + } +} diff --git a/icann-rdap-client/src/gtld/network.rs b/icann-rdap-client/src/gtld/network.rs new file mode 100644 index 0000000..2f523c9 --- /dev/null +++ b/icann-rdap-client/src/gtld/network.rs @@ -0,0 +1,28 @@ +use super::{GtldParams, ToGtld}; +use icann_rdap_common::response::network::Network; +use std::any::TypeId; + +impl ToGtld for Network { + fn to_gtld(&self, params: &mut GtldParams) -> String { + let _typeid = TypeId::of::(); + let mut gtld = String::new(); + gtld.push_str(&self.common.to_gtld(params)); + let header_text = if self.start_address.is_some() && self.end_address.is_some() { + format!( + "IP Network: {}-{}\n", + &self.start_address.as_ref().unwrap(), + &self.end_address.as_ref().unwrap() + ) + } else if let Some(start_address) = &self.start_address { + format!("IP Network: {start_address}\n") + } else if let Some(handle) = &self.object_common.handle { + format!("IP Network: {handle}\n") + } else if let Some(name) = &self.name { + format!("IP Network: {name}\n") + } else { + "IP Network:\n".to_string() + }; + gtld.push_str(&header_text); + gtld + } +} diff --git a/icann-rdap-client/src/gtld/types.rs b/icann-rdap-client/src/gtld/types.rs new file mode 100644 index 0000000..bf223d8 --- /dev/null +++ b/icann-rdap-client/src/gtld/types.rs @@ -0,0 +1,8 @@ +use super::{GtldParams, ToGtld}; +use icann_rdap_common::response::types::Common; + +impl ToGtld for Common { + fn to_gtld(&self, _params: &mut GtldParams) -> String { + String::new() + } +} diff --git a/icann-rdap-client/src/lib.rs b/icann-rdap-client/src/lib.rs index ad5effe..9287700 100644 --- a/icann-rdap-client/src/lib.rs +++ b/icann-rdap-client/src/lib.rs @@ -10,6 +10,7 @@ use icann_rdap_common::{ }; use thiserror::Error; +pub mod gtld; pub mod md; pub mod query; pub mod request; diff --git a/icann-rdap-client/src/md/mod.rs b/icann-rdap-client/src/md/mod.rs index 8c68a62..93d1687 100644 --- a/icann-rdap-client/src/md/mod.rs +++ b/icann-rdap-client/src/md/mod.rs @@ -1,7 +1,6 @@ use crate::request::RequestData; -use std::{any::TypeId, char}; - use icann_rdap_common::{check::CheckParams, response::RdapResponse}; +use std::{any::TypeId, char}; use strum::EnumMessage; use icann_rdap_common::check::{CheckClass, Checks, CHECK_CLASS_LEN}; diff --git a/icann-rdap-client/src/test_files/arin.json b/icann-rdap-client/src/test_files/arin.json new file mode 100644 index 0000000..e954e1f --- /dev/null +++ b/icann-rdap-client/src/test_files/arin.json @@ -0,0 +1,1894 @@ +{ + "rdapConformance": [ + "nro_rdap_profile_0", + "rdap_level_0" + ], + "notices": [ + { + "title": "Terms of Service", + "description": [ + "By using the ARIN RDAP/Whois service, you are agreeing to the RDAP/Whois Terms of Use" + ], + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "terms-of-service", + "href": "https://www.arin.net/resources/registry/whois/tou/", + "type": "text/html" + } + ] + }, + { + "title": "Whois Inaccuracy Reporting", + "description": [ + "If you see inaccuracies in the results, please visit: " + ], + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "inaccuracy-report", + "href": "https://www.arin.net/resources/registry/whois/inaccuracy_reporting/", + "type": "text/html" + } + ] + }, + { + "title": "Copyright Notice", + "description": [ + "Copyright 1997-2024, American Registry for Internet Numbers, Ltd." + ] + } + ], + "objectClassName": "domain", + "handle": "152.112.149.in-addr.arpa.", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/rdns/152.112.149.in-addr.arpa.", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2024-01-08T14:14:34-05:00" + } + ], + "port43": "whois.arin.net", + "entities": [ + { + "objectClassName": "entity", + "handle": "ARINL", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/ARINL", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/org/ARINL", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2024-01-08T13:57:34-05:00" + }, + { + "eventAction": "registration", + "eventDate": "2021-08-17T07:05:54-04:00" + } + ], + "port43": "whois.arin.net", + "entities": [ + { + "objectClassName": "entity", + "handle": "SOFTW9-ARIN", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/SOFTW9-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/SOFTW9-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2024-04-30T12:38:31-04:00" + }, + { + "eventAction": "registration", + "eventDate": "2021-12-16T11:37:09-05:00" + } + ], + "status": [ + "validated" + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "P.O. Box 232290\nCentreville\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "Software Engineer" + ], + [ + "org", + {}, + "text", + "Software Engineer" + ], + [ + "kind", + {}, + "text", + "group" + ], + [ + "email", + {}, + "text", + "eric@djungelorm.com" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-703-227-0660" + ] + ] + ], + "roles": [ + "dns", + "routing" + ] + }, + { + "objectClassName": "entity", + "handle": "NICKG2-ARIN", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/NICKG2-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/NICKG2-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2023-02-27T14:29:23-05:00" + }, + { + "eventAction": "registration", + "eventDate": "2021-12-16T11:39:26-05:00" + } + ], + "status": [ + "validated" + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "P.O. Box 232290\nCentreville\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "NICKG-ARIN" + ], + [ + "org", + {}, + "text", + "NICKG-ARIN" + ], + [ + "kind", + {}, + "text", + "group" + ], + [ + "email", + {}, + "text", + "nick.t.gui+arinnet@gmail.com" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-703-227-9840" + ] + ] + ], + "roles": [ + "dns", + "routing" + ] + }, + { + "objectClassName": "entity", + "handle": "FFH1-ARIN", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/FFH1-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/FFH1-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2023-04-26T09:56:09-04:00" + }, + { + "eventAction": "registration", + "eventDate": "2020-02-26T12:57:02-05:00" + } + ], + "status": [ + "validated" + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "PO Box 232290\nChantilly\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "Frank F Hill" + ], + [ + "n", + {}, + "text", + [ + "Hill", + "Frank", + "F", + "", + "" + ] + ], + [ + "kind", + {}, + "text", + "individual" + ], + [ + "email", + {}, + "text", + "franklookyou@gmail.com" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-540-982-1858" + ] + ] + ], + "roles": [ + "dns", + "routing" + ] + }, + { + "objectClassName": "entity", + "handle": "KLANG2-ARIN", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/KLANG2-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/KLANG2-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2023-04-26T12:27:01-04:00" + }, + { + "eventAction": "registration", + "eventDate": "2019-03-02T13:35:54-05:00" + } + ], + "status": [ + "validated" + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "PO Box 232290\nCentreville\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "KLANG-ROLE" + ], + [ + "org", + {}, + "text", + "KLANG-ROLE" + ], + [ + "kind", + {}, + "text", + "group" + ], + [ + "email", + {}, + "text", + "krislangers@yahoo.com" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-703-227-9840" + ] + ] + ], + "roles": [ + "routing" + ] + }, + { + "objectClassName": "entity", + "handle": "ARINL3-ARIN", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/ARINL3-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/ARINL3-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2023-11-22T14:44:15-05:00" + }, + { + "eventAction": "registration", + "eventDate": "2023-01-12T10:37:38-05:00" + } + ], + "status": [ + "validated" + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "PO Box 232290\nCentreville\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "ARINL ROLE" + ], + [ + "org", + {}, + "text", + "ARINL ROLE" + ], + [ + "kind", + {}, + "text", + "group" + ], + [ + "email", + {}, + "text", + "routing.security@arin.net" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-703-938-9969" + ] + ] + ], + "roles": [ + "administrative", + "dns", + "noc", + "routing", + "abuse", + "technical" + ] + }, + { + "objectClassName": "entity", + "handle": "DUBIN7-ARIN", + "remarks": [ + { + "title": "Registration Comments", + "description": [ + "Test 3/2/22", + "", + "http://example.com" + ] + } + ], + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/DUBIN7-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/DUBIN7-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2024-04-25T07:22:58-04:00" + }, + { + "eventAction": "registration", + "eventDate": "2014-09-03T08:38:00-04:00" + } + ], + "status": [ + "validated" + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "PO Box 232290\nCentreville\nVA\n20151\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "Garth Dubin" + ], + [ + "n", + {}, + "text", + [ + "Dubin", + "Garth", + "", + "", + "" + ] + ], + [ + "kind", + {}, + "text", + "individual" + ], + [ + "email", + {}, + "text", + "garth.dubin+arin@gmail.com" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-703-227-9840" + ] + ] + ], + "roles": [ + "routing" + ] + }, + { + "objectClassName": "entity", + "handle": "WORLE37-ARIN", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/WORLE37-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/WORLE37-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2023-10-24T14:45:22-04:00" + }, + { + "eventAction": "registration", + "eventDate": "2018-07-19T18:56:27-04:00" + } + ], + "status": [ + "validated" + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "PO Box 232290\nCentreville\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "Jon Worley" + ], + [ + "n", + {}, + "text", + [ + "Worley", + "Jon", + "", + "", + "" + ] + ], + [ + "kind", + {}, + "text", + "individual" + ], + [ + "email", + {}, + "text", + "jon.worley@gmail.com" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-703-227-9840" + ] + ] + ], + "roles": [ + "routing" + ] + }, + { + "objectClassName": "entity", + "handle": "ISAEV-ARIN", + "remarks": [ + { + "title": "Unvalidated POC", + "description": [ + "ARIN has attempted to validate the data for this POC, but has received no response from the POC since 2022-12-16" + ] + } + ], + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/ISAEV-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/ISAEV-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2021-12-16T11:51:55-05:00" + }, + { + "eventAction": "registration", + "eventDate": "2021-12-16T11:51:55-05:00" + } + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "PO BOX 232290\nCenterville\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "ISAEVA-ROLE" + ], + [ + "org", + {}, + "text", + "ISAEVA-ROLE" + ], + [ + "kind", + {}, + "text", + "group" + ], + [ + "email", + {}, + "text", + "nargiza.isaeeva@gmail.com" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-703-227-9840" + ] + ] + ], + "roles": [ + "routing" + ] + } + ], + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "fn", + {}, + "text", + "ARIN Routing Security" + ], + [ + "adr", + { + "label": "PO Box 232290\nCentreville\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "kind", + {}, + "text", + "org" + ] + ] + ], + "roles": [ + "registrant" + ] + } + ], + "ldhName": "152.112.149.in-addr.arpa.", + "network": { + "objectClassName": "ip network", + "handle": "NET-149-112-152-0-1", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/ip/149.112.152.0", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/net/NET-149-112-152-0-1", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2022-05-19T11:54:41-04:00" + }, + { + "eventAction": "registration", + "eventDate": "2021-08-20T11:13:48-04:00" + } + ], + "status": [ + "active" + ], + "port43": "whois.arin.net", + "entities": [ + { + "objectClassName": "entity", + "handle": "ARINL", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/ARINL", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/org/ARINL", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2024-01-08T13:57:34-05:00" + }, + { + "eventAction": "registration", + "eventDate": "2021-08-17T07:05:54-04:00" + } + ], + "port43": "whois.arin.net", + "entities": [ + { + "objectClassName": "entity", + "handle": "SOFTW9-ARIN", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/SOFTW9-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/SOFTW9-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2024-04-30T12:38:31-04:00" + }, + { + "eventAction": "registration", + "eventDate": "2021-12-16T11:37:09-05:00" + } + ], + "status": [ + "validated" + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "P.O. Box 232290\nCentreville\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "Software Engineer" + ], + [ + "org", + {}, + "text", + "Software Engineer" + ], + [ + "kind", + {}, + "text", + "group" + ], + [ + "email", + {}, + "text", + "eric@djungelorm.com" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-703-227-0660" + ] + ] + ], + "roles": [ + "dns", + "routing" + ] + }, + { + "objectClassName": "entity", + "handle": "NICKG2-ARIN", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/NICKG2-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/NICKG2-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2023-02-27T14:29:23-05:00" + }, + { + "eventAction": "registration", + "eventDate": "2021-12-16T11:39:26-05:00" + } + ], + "status": [ + "validated" + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "P.O. Box 232290\nCentreville\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "NICKG-ARIN" + ], + [ + "org", + {}, + "text", + "NICKG-ARIN" + ], + [ + "kind", + {}, + "text", + "group" + ], + [ + "email", + {}, + "text", + "nick.t.gui+arinnet@gmail.com" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-703-227-9840" + ] + ] + ], + "roles": [ + "dns", + "routing" + ] + }, + { + "objectClassName": "entity", + "handle": "FFH1-ARIN", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/FFH1-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/FFH1-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2023-04-26T09:56:09-04:00" + }, + { + "eventAction": "registration", + "eventDate": "2020-02-26T12:57:02-05:00" + } + ], + "status": [ + "validated" + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "PO Box 232290\nChantilly\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "Frank F Hill" + ], + [ + "n", + {}, + "text", + [ + "Hill", + "Frank", + "F", + "", + "" + ] + ], + [ + "kind", + {}, + "text", + "individual" + ], + [ + "email", + {}, + "text", + "franklookyou@gmail.com" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-540-982-1858" + ] + ] + ], + "roles": [ + "dns", + "routing" + ] + }, + { + "objectClassName": "entity", + "handle": "KLANG2-ARIN", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/KLANG2-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/KLANG2-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2023-04-26T12:27:01-04:00" + }, + { + "eventAction": "registration", + "eventDate": "2019-03-02T13:35:54-05:00" + } + ], + "status": [ + "validated" + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "PO Box 232290\nCentreville\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "KLANG-ROLE" + ], + [ + "org", + {}, + "text", + "KLANG-ROLE" + ], + [ + "kind", + {}, + "text", + "group" + ], + [ + "email", + {}, + "text", + "krislangers@yahoo.com" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-703-227-9840" + ] + ] + ], + "roles": [ + "routing" + ] + }, + { + "objectClassName": "entity", + "handle": "ARINL3-ARIN", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/ARINL3-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/ARINL3-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2023-11-22T14:44:15-05:00" + }, + { + "eventAction": "registration", + "eventDate": "2023-01-12T10:37:38-05:00" + } + ], + "status": [ + "validated" + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "PO Box 232290\nCentreville\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "ARINL ROLE" + ], + [ + "org", + {}, + "text", + "ARINL ROLE" + ], + [ + "kind", + {}, + "text", + "group" + ], + [ + "email", + {}, + "text", + "routing.security@arin.net" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-703-938-9969" + ] + ] + ], + "roles": [ + "administrative", + "dns", + "noc", + "routing", + "abuse", + "technical" + ] + }, + { + "objectClassName": "entity", + "handle": "DUBIN7-ARIN", + "remarks": [ + { + "title": "Registration Comments", + "description": [ + "Test 3/2/22", + "", + "http://example.com" + ] + } + ], + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/DUBIN7-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/DUBIN7-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2024-04-25T07:22:58-04:00" + }, + { + "eventAction": "registration", + "eventDate": "2014-09-03T08:38:00-04:00" + } + ], + "status": [ + "validated" + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "PO Box 232290\nCentreville\nVA\n20151\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "Garth Dubin" + ], + [ + "n", + {}, + "text", + [ + "Dubin", + "Garth", + "", + "", + "" + ] + ], + [ + "kind", + {}, + "text", + "individual" + ], + [ + "email", + {}, + "text", + "garth.dubin+arin@gmail.com" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-703-227-9840" + ] + ] + ], + "roles": [ + "routing" + ] + }, + { + "objectClassName": "entity", + "handle": "WORLE37-ARIN", + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/WORLE37-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/WORLE37-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2023-10-24T14:45:22-04:00" + }, + { + "eventAction": "registration", + "eventDate": "2018-07-19T18:56:27-04:00" + } + ], + "status": [ + "validated" + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "PO Box 232290\nCentreville\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "Jon Worley" + ], + [ + "n", + {}, + "text", + [ + "Worley", + "Jon", + "", + "", + "" + ] + ], + [ + "kind", + {}, + "text", + "individual" + ], + [ + "email", + {}, + "text", + "jon.worley@gmail.com" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-703-227-9840" + ] + ] + ], + "roles": [ + "routing" + ] + }, + { + "objectClassName": "entity", + "handle": "ISAEV-ARIN", + "remarks": [ + { + "title": "Unvalidated POC", + "description": [ + "ARIN has attempted to validate the data for this POC, but has received no response from the POC since 2022-12-16" + ] + } + ], + "links": [ + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "self", + "href": "https://rdap.arin.net/registry/entity/ISAEV-ARIN", + "type": "application/rdap+json" + }, + { + "value": "https://rdap.arin.net/registry/domain/152.112.149.in-addr.arpa.", + "rel": "alternate", + "href": "https://whois.arin.net/rest/poc/ISAEV-ARIN", + "type": "application/xml" + } + ], + "events": [ + { + "eventAction": "last changed", + "eventDate": "2021-12-16T11:51:55-05:00" + }, + { + "eventAction": "registration", + "eventDate": "2021-12-16T11:51:55-05:00" + } + ], + "port43": "whois.arin.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + { + "label": "PO BOX 232290\nCenterville\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "fn", + {}, + "text", + "ISAEVA-ROLE" + ], + [ + "org", + {}, + "text", + "ISAEVA-ROLE" + ], + [ + "kind", + {}, + "text", + "group" + ], + [ + "email", + {}, + "text", + "nargiza.isaeeva@gmail.com" + ], + [ + "tel", + { + "type": [ + "work", + "voice" + ] + }, + "text", + "+1-703-227-9840" + ] + ] + ], + "roles": [ + "routing" + ] + } + ], + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "fn", + {}, + "text", + "ARIN Routing Security" + ], + [ + "adr", + { + "label": "PO Box 232290\nCentreville\nVA\n20120\nUnited States" + }, + "text", + [ + "", + "", + "", + "", + "", + "", + "" + ] + ], + [ + "kind", + {}, + "text", + "org" + ] + ] + ], + "roles": [ + "registrant" + ] + } + ], + "startAddress": "149.112.152.0", + "endAddress": "149.112.155.255", + "ipVersion": "v4", + "name": "RS-RND", + "type": "DIRECT ALLOCATION", + "parentHandle": "NET-149-0-0-0-0", + "cidr0_cidrs": [ + { + "v4prefix": "149.112.152.0", + "length": 22 + } + ] + } +} diff --git a/icann-rdap-client/src/test_files/lemonde.fr.json b/icann-rdap-client/src/test_files/lemonde.fr.json new file mode 100644 index 0000000..8674289 --- /dev/null +++ b/icann-rdap-client/src/test_files/lemonde.fr.json @@ -0,0 +1,1007 @@ +{ + "rdapConformance": [ + "rdap_level_0", + "icann_rdap_technical_implementation_guide_0", + "icann_rdap_response_profile_0" + ], + "objectClassName": "domain", + "handle": "DOM000000024309-FRNIC", + "links": [ + { + "value": "https://rdap.nic.fr/domain/lemonde.fr", + "rel": "self", + "href": "https://rdap.nic.fr/domain/lemonde.fr" + } + ], + "events": [ + { + "eventAction": "registration", + "eventDate": "2005-08-02T14:16:36Z" + }, + { + "eventAction": "expiration", + "eventDate": "2025-06-09T22:08:09Z" + }, + { + "eventAction": "last changed", + "eventDate": "2024-06-12T22:09:39.881923Z" + }, + { + "eventAction": "transfer", + "eventDate": "2022-06-09T22:08:09Z" + } + ], + "status": [ + "server update prohibited", + "server transfer prohibited", + "server delete prohibited", + "server recover prohibited" + ], + "port43": "whois.nameshield.net", + "entities": [ + { + "objectClassName": "entity", + "handle": "RAR24-FRNIC", + "remarks": [ + { + "description": [ + "No" + ] + } + ], + "links": [ + { + "value": "https://rdap.nic.fr/entity/RAR24-FRNIC", + "rel": "self", + "href": "https://rdap.nic.fr/entity/RAR24-FRNIC" + } + ], + "events": [ + { + "eventAction": "registration", + "eventDate": "1997-12-29T00:00:00Z" + }, + { + "eventAction": "last changed", + "eventDate": "2022-10-01T11:41:28.622961Z" + } + ], + "status": [ + "active" + ], + "port43": "whois.nameshield.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "fn", + {}, + "text", + "NAMESHIELD" + ], + [ + "tel", + {}, + "text", + "+33.241182828" + ], + [ + "tel", + { + "type": "fax" + }, + "text", + "+33.241182829" + ], + [ + "email", + {}, + "text", + "registrar@nameshield.net" + ], + [ + "url", + {}, + "uri", + "https://www.nameshield.com/contact-nameshield/" + ], + [ + "adr", + {}, + "text", + [ + "", + "", + "39 boulevard des Capucines", + "PARIS", + "", + "75002", + "FR" + ] + ] + ] + ], + "roles": [ + "sponsor", + "registrar" + ], + "publicIds": [ + { + "type": "IANA Registrar ID", + "identifier": "1251" + } + ] + }, + { + "objectClassName": "entity", + "handle": "N17024-FRNIC", + "remarks": [ + { + "description": [ + "NO" + ] + }, + { + "description": [ + "NO" + ] + }, + { + "description": [ + "ORGANIZATION" + ] + }, + { + "description": [ + "NO" + ] + }, + { + "description": [ + "NotIdentified" + ] + }, + { + "description": [ + "NAMESHIELD" + ] + } + ], + "links": [ + { + "value": "https://rdap.nic.fr/entity/N17024-FRNIC", + "rel": "self", + "href": "https://rdap.nic.fr/entity/N17024-FRNIC" + } + ], + "events": [ + { + "eventAction": "registration", + "eventDate": "2017-11-21T09:50:30Z" + }, + { + "eventAction": "last changed", + "eventDate": "2024-06-13T12:35:12.350131Z" + } + ], + "status": [ + "associated", + "active" + ], + "port43": "whois.nameshield.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "fn", + {}, + "text", + "NAMESHIELD" + ], + [ + "org", + {}, + "text", + "TECHNICAL department" + ], + [ + "adr", + {}, + "text", + [ + "", + "", + "79 rue Desjardins", + "ANGERS", + "", + "49100", + "FR" + ] + ], + [ + "email", + {}, + "text", + "technical@nameshield.net" + ], + [ + "tel", + {}, + "text", + "+33.241182828" + ], + [ + "tel", + { + "type": "fax" + }, + "text", + "+33.241182829" + ] + ] + ], + "roles": [ + "technical" + ] + }, + { + "objectClassName": "entity", + "handle": "SEDM254-FRNIC", + "remarks": [ + { + "description": [ + "NO" + ] + }, + { + "description": [ + "NO" + ] + }, + { + "description": [ + "ORGANIZATION" + ] + }, + { + "description": [ + "NO" + ] + }, + { + "description": [ + "NotIdentified" + ] + }, + { + "description": [ + "NAMESHIELD" + ] + } + ], + "links": [ + { + "value": "https://rdap.nic.fr/entity/SEDM254-FRNIC", + "rel": "self", + "href": "https://rdap.nic.fr/entity/SEDM254-FRNIC" + } + ], + "events": [ + { + "eventAction": "registration", + "eventDate": "2022-04-04T07:21:16Z" + } + ], + "status": [ + "server update prohibited", + "associated" + ], + "port43": "whois.nameshield.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "fn", + {}, + "text", + "SOCIETE EDITRICE du monde" + ], + [ + "org", + {}, + "text", + "SOCIETE EDITRICE DU MONDE" + ], + [ + "adr", + {}, + "text", + [ + "", + "", + "67-69 avenue Pierre Mendes-France", + "PARIS", + "", + "75013", + "FR" + ] + ], + [ + "email", + {}, + "text", + "domain_names@lemonde.fr" + ], + [ + "tel", + {}, + "text", + "+33.157282224" + ] + ] + ], + "roles": [ + "registrant" + ] + }, + { + "objectClassName": "entity", + "handle": "SEDM255-FRNIC", + "remarks": [ + { + "description": [ + "NO" + ] + }, + { + "description": [ + "NO" + ] + }, + { + "description": [ + "ORGANIZATION" + ] + }, + { + "description": [ + "NO" + ] + }, + { + "description": [ + "NotIdentified" + ] + }, + { + "description": [ + "NAMESHIELD" + ] + } + ], + "links": [ + { + "value": "https://rdap.nic.fr/entity/SEDM255-FRNIC", + "rel": "self", + "href": "https://rdap.nic.fr/entity/SEDM255-FRNIC" + } + ], + "events": [ + { + "eventAction": "registration", + "eventDate": "2022-04-04T07:21:17Z" + }, + { + "eventAction": "last changed", + "eventDate": "2022-11-01T07:38:07.668742Z" + } + ], + "status": [ + "associated", + "active" + ], + "port43": "whois.nameshield.net", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "fn", + {}, + "text", + "SOCIETE EDITRICE du monde" + ], + [ + "org", + {}, + "text", + "SOCIETE EDITRICE DU MONDE" + ], + [ + "adr", + {}, + "text", + [ + "", + "", + "67-69 avenue Pierre Mendes-France", + "PARIS", + "", + "75013", + "FR" + ] + ], + [ + "email", + {}, + "text", + "domain_names@lemonde.fr" + ], + [ + "tel", + {}, + "text", + "+33.157282224" + ] + ] + ], + "roles": [ + "administrative" + ] + } + ], + "ldhName": "lemonde.fr", + "nameservers": [ + { + "objectClassName": "nameserver", + "handle": "HOST65144-FRNIC", + "remarks": [ + { + "title": "result set truncated due to authorization", + "description": [ + "The list of results does not contain all results due to lack of authorization.", + "This may indicate to some clients that proper authorization will yield a longer result set." + ] + } + ], + "links": [ + { + "value": "https://rdap.nic.fr/nameserver/ns-cloud-b4.googledomains.com", + "rel": "self", + "href": "https://rdap.nic.fr/nameserver/ns-cloud-b4.googledomains.com" + } + ], + "status": [ + "associated", + "active" + ], + "port43": "whois.nic.fr", + "entities": [ + { + "objectClassName": "entity", + "handle": "RAR939-FRNIC", + "remarks": [ + { + "description": [ + "No" + ] + } + ], + "links": [ + { + "value": "https://rdap.nic.fr/entity/RAR939-FRNIC", + "rel": "self", + "href": "https://rdap.nic.fr/entity/RAR939-FRNIC" + } + ], + "events": [ + { + "eventAction": "registration", + "eventDate": "2014-07-29T15:35:33Z" + }, + { + "eventAction": "last changed", + "eventDate": "2022-10-12T18:54:01.785057Z" + } + ], + "status": [ + "active" + ], + "port43": "whois.nic.fr", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "fn", + {}, + "text", + "Registry Operations" + ], + [ + "tel", + {}, + "text", + "+33.139308300" + ], + [ + "tel", + { + "type": "fax" + }, + "text", + "+33.139308301" + ], + [ + "email", + {}, + "text", + "support@afnic.fr" + ], + [ + "url", + {}, + "uri", + "https://www.afnic.fr" + ], + [ + "adr", + {}, + "text", + [ + "", + "", + [ + "AFNIC", + "immeuble le Stephenson", + "1, rue Stephenson" + ], + "Montigny-Le-Bretonneux", + "", + "78180", + "FR" + ] + ] + ] + ], + "roles": [ + "sponsor", + "registrar" + ], + "publicIds": [ + { + "type": "IANA Registrar ID", + "identifier": "9999" + } + ] + } + ], + "ldhName": "ns-cloud-b4.googledomains.com", + "ipAddresses": {} + }, + { + "objectClassName": "nameserver", + "handle": "HOST65142-FRNIC", + "remarks": [ + { + "title": "result set truncated due to authorization", + "description": [ + "The list of results does not contain all results due to lack of authorization.", + "This may indicate to some clients that proper authorization will yield a longer result set." + ] + } + ], + "links": [ + { + "value": "https://rdap.nic.fr/nameserver/ns-cloud-b2.googledomains.com", + "rel": "self", + "href": "https://rdap.nic.fr/nameserver/ns-cloud-b2.googledomains.com" + } + ], + "status": [ + "associated", + "active" + ], + "port43": "whois.nic.fr", + "entities": [ + { + "objectClassName": "entity", + "handle": "RAR939-FRNIC", + "remarks": [ + { + "description": [ + "No" + ] + } + ], + "links": [ + { + "value": "https://rdap.nic.fr/entity/RAR939-FRNIC", + "rel": "self", + "href": "https://rdap.nic.fr/entity/RAR939-FRNIC" + } + ], + "events": [ + { + "eventAction": "registration", + "eventDate": "2014-07-29T15:35:33Z" + }, + { + "eventAction": "last changed", + "eventDate": "2022-10-12T18:54:01.785057Z" + } + ], + "status": [ + "active" + ], + "port43": "whois.nic.fr", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "fn", + {}, + "text", + "Registry Operations" + ], + [ + "tel", + {}, + "text", + "+33.139308300" + ], + [ + "tel", + { + "type": "fax" + }, + "text", + "+33.139308301" + ], + [ + "email", + {}, + "text", + "support@afnic.fr" + ], + [ + "url", + {}, + "uri", + "https://www.afnic.fr" + ], + [ + "adr", + {}, + "text", + [ + "", + "", + [ + "AFNIC", + "immeuble le Stephenson", + "1, rue Stephenson" + ], + "Montigny-Le-Bretonneux", + "", + "78180", + "FR" + ] + ] + ] + ], + "roles": [ + "sponsor", + "registrar" + ], + "publicIds": [ + { + "type": "IANA Registrar ID", + "identifier": "9999" + } + ] + } + ], + "ldhName": "ns-cloud-b2.googledomains.com", + "ipAddresses": {} + }, + { + "objectClassName": "nameserver", + "handle": "HOST65143-FRNIC", + "remarks": [ + { + "title": "result set truncated due to authorization", + "description": [ + "The list of results does not contain all results due to lack of authorization.", + "This may indicate to some clients that proper authorization will yield a longer result set." + ] + } + ], + "links": [ + { + "value": "https://rdap.nic.fr/nameserver/ns-cloud-b3.googledomains.com", + "rel": "self", + "href": "https://rdap.nic.fr/nameserver/ns-cloud-b3.googledomains.com" + } + ], + "status": [ + "associated", + "active" + ], + "port43": "whois.nic.fr", + "entities": [ + { + "objectClassName": "entity", + "handle": "RAR939-FRNIC", + "remarks": [ + { + "description": [ + "No" + ] + } + ], + "links": [ + { + "value": "https://rdap.nic.fr/entity/RAR939-FRNIC", + "rel": "self", + "href": "https://rdap.nic.fr/entity/RAR939-FRNIC" + } + ], + "events": [ + { + "eventAction": "registration", + "eventDate": "2014-07-29T15:35:33Z" + }, + { + "eventAction": "last changed", + "eventDate": "2022-10-12T18:54:01.785057Z" + } + ], + "status": [ + "active" + ], + "port43": "whois.nic.fr", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "fn", + {}, + "text", + "Registry Operations" + ], + [ + "tel", + {}, + "text", + "+33.139308300" + ], + [ + "tel", + { + "type": "fax" + }, + "text", + "+33.139308301" + ], + [ + "email", + {}, + "text", + "support@afnic.fr" + ], + [ + "url", + {}, + "uri", + "https://www.afnic.fr" + ], + [ + "adr", + {}, + "text", + [ + "", + "", + [ + "AFNIC", + "immeuble le Stephenson", + "1, rue Stephenson" + ], + "Montigny-Le-Bretonneux", + "", + "78180", + "FR" + ] + ] + ] + ], + "roles": [ + "sponsor", + "registrar" + ], + "publicIds": [ + { + "type": "IANA Registrar ID", + "identifier": "9999" + } + ] + } + ], + "ldhName": "ns-cloud-b3.googledomains.com", + "ipAddresses": {} + }, + { + "objectClassName": "nameserver", + "handle": "HOST65141-FRNIC", + "remarks": [ + { + "title": "result set truncated due to authorization", + "description": [ + "The list of results does not contain all results due to lack of authorization.", + "This may indicate to some clients that proper authorization will yield a longer result set." + ] + } + ], + "links": [ + { + "value": "https://rdap.nic.fr/nameserver/ns-cloud-b1.googledomains.com", + "rel": "self", + "href": "https://rdap.nic.fr/nameserver/ns-cloud-b1.googledomains.com" + } + ], + "status": [ + "associated", + "active" + ], + "port43": "whois.nic.fr", + "entities": [ + { + "objectClassName": "entity", + "handle": "RAR939-FRNIC", + "remarks": [ + { + "description": [ + "No" + ] + } + ], + "links": [ + { + "value": "https://rdap.nic.fr/entity/RAR939-FRNIC", + "rel": "self", + "href": "https://rdap.nic.fr/entity/RAR939-FRNIC" + } + ], + "events": [ + { + "eventAction": "registration", + "eventDate": "2014-07-29T15:35:33Z" + }, + { + "eventAction": "last changed", + "eventDate": "2022-10-12T18:54:01.785057Z" + } + ], + "status": [ + "active" + ], + "port43": "whois.nic.fr", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "fn", + {}, + "text", + "Registry Operations" + ], + [ + "tel", + {}, + "text", + "+33.139308300" + ], + [ + "tel", + { + "type": "fax" + }, + "text", + "+33.139308301" + ], + [ + "email", + {}, + "text", + "support@afnic.fr" + ], + [ + "url", + {}, + "uri", + "https://www.afnic.fr" + ], + [ + "adr", + {}, + "text", + [ + "", + "", + [ + "AFNIC", + "immeuble le Stephenson", + "1, rue Stephenson" + ], + "Montigny-Le-Bretonneux", + "", + "78180", + "FR" + ] + ] + ] + ], + "roles": [ + "sponsor", + "registrar" + ], + "publicIds": [ + { + "type": "IANA Registrar ID", + "identifier": "9999" + } + ] + } + ], + "ldhName": "ns-cloud-b1.googledomains.com", + "ipAddresses": {} + } + ] +} diff --git a/icann-rdap-client/src/test_files/microsoft.click.json b/icann-rdap-client/src/test_files/microsoft.click.json new file mode 100644 index 0000000..ae4a7cf --- /dev/null +++ b/icann-rdap-client/src/test_files/microsoft.click.json @@ -0,0 +1,455 @@ +{ + "rdapConformance": [ + "icann_rdap_technical_implementation_guide_0", + "ur_domain_check_0" + ], + "notices": [ + { + "title": "Status Codes", + "description": [ + "For more information on domain status codes, please visit https://icann.org/epp" + ], + "links": [ + { + "href": "https://icann.org/epp" + } + ] + }, + { + "title": "RDDS Inaccuracy Complaint Form", + "description": [ + "URL of the ICANN RDDS Inaccuracy Complaint Form: https://www.icann.org/wicf/" + ], + "links": [ + { + "href": "https://www.icann.org/wicf/" + } + ] + }, + { + "title": "Terms of service", + "description": [ + "The WHOIS information provided in this page has been redacted", + "in compliance with ICANN's Temporary Specification for gTLD", + "Registration Data.", + "", + "The data in this record is provided by Uniregistry for informational", + "purposes only, and it does not guarantee its accuracy. Uniregistry is", + "authoritative for whois information in top-level domains it operates", + "under contract with the Internet Corporation for Assigned Names and", + "Numbers. Whois information from other top-level domains is provided by", + "a third-party under license to Uniregistry.", + "", + "This service is intended only for query-based access. By using this", + "service, you agree that you will use any data presented only for lawful", + "purposes and that, under no circumstances will you use (a) data", + "acquired for the purpose of allowing, enabling, or otherwise supporting", + "the transmission by e-mail, telephone, facsimile or other", + "communications mechanism of mass unsolicited, commercial advertising", + "or solicitations to entities other than your existing customers; or", + "(b) this service to enable high volume, automated, electronic processes", + "that send queries or data to the systems of any Registrar or any", + "Registry except as reasonably necessary to register domain names or", + "modify existing domain name registrations.", + "", + "Uniregistry reserves the right to modify these terms at any time. By", + "submitting this query, you agree to abide by this policy. All rights", + "reserved.", + "" + ], + "links": [ + { + "href": "https://whois.uniregistry.net/" + } + ] + } + ], + "objectClassName": "domain", + "handle": "DO_a7aec7e93f5797ee898b23cefe340fe3-UR", + "events": [ + { + "eventAction": "registration", + "eventActor": "markmonitor", + "eventDate": "2014-11-12T19:15:55.283Z" + }, + { + "eventAction": "expiration", + "eventDate": "2024-11-12T19:15:55.283Z" + }, + { + "eventAction": "last changed", + "eventDate": "2023-10-17T10:47:21.733Z" + }, + { + "eventAction": "last update of RDAP database", + "eventDate": "2024-06-12T19:40:52.232Z" + } + ], + "status": [ + "client update prohibited", + "client transfer prohibited", + "client delete prohibited" + ], + "entities": [ + { + "objectClassName": "entity", + "remarks": [ + { + "title": "REDACTED FOR PRIVACY", + "description": [ + "Some of the data in this object has been removed" + ] + }, + { + "title": "EMAIL REDACTED FOR PRIVACY", + "description": [ + "Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name." + ] + } + ], + "events": [ + { + "eventAction": "last update of RDAP database", + "eventDate": "2024-06-12T19:40:52.232Z" + } + ], + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "org", + {}, + "text", + "Microsoft Corporation" + ], + [ + "adr", + {}, + "text", + [ + "", + "", + "", + "", + "WA", + "", + "US" + ] + ] + ] + ], + "roles": [ + "registrant" + ] + }, + { + "objectClassName": "entity", + "remarks": [ + { + "title": "REDACTED FOR PRIVACY", + "description": [ + "Some of the data in this object has been removed" + ] + }, + { + "title": "EMAIL REDACTED FOR PRIVACY", + "description": [ + "Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name." + ] + } + ], + "events": [ + { + "eventAction": "last update of RDAP database", + "eventDate": "2024-06-12T19:40:52.232Z" + } + ], + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + {}, + "text", + [ + "", + "", + "", + "", + "" + ] + ] + ] + ], + "roles": [ + "administrative" + ] + }, + { + "objectClassName": "entity", + "remarks": [ + { + "title": "REDACTED FOR PRIVACY", + "description": [ + "Some of the data in this object has been removed" + ] + }, + { + "title": "EMAIL REDACTED FOR PRIVACY", + "description": [ + "Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name." + ] + } + ], + "events": [ + { + "eventAction": "last update of RDAP database", + "eventDate": "2024-06-12T19:40:52.232Z" + } + ], + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "adr", + {}, + "text", + [ + "", + "", + "", + "", + "" + ] + ] + ] + ], + "roles": [ + "technical" + ] + }, + { + "objectClassName": "entity", + "handle": "292", + "events": [ + { + "eventAction": "last update of RDAP database", + "eventDate": "2024-06-12T19:40:52.232Z" + } + ], + "entities": [ + { + "objectClassName": "entity", + "handle": "CO_03a1e5a41de9801039c48cce9ea7414f-UR", + "events": [ + { + "eventAction": "last update of RDAP database", + "eventDate": "2024-06-12T19:40:52.232Z" + } + ], + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "fn", + {}, + "text", + "Markmonitor" + ], + [ + "adr", + {}, + "text", + [ + "", + "", + [ + "2150 S Bonito Way, Suite 150", + "", + "" + ], + "Meridian", + "ID", + "83642", + "US" + ] + ], + [ + "tel", + { + "type": "voice" + }, + "uri", + "tel:+1.2083895740" + ], + [ + "tel", + { + "type": "fax" + }, + "uri", + "tel:+1.2083895771" + ], + [ + "email", + {}, + "text", + "abusecomplaints@markmonitor.com" + ] + ] + ], + "roles": [ + "abuse" + ] + } + ], + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "fn", + {}, + "text", + "MarkMonitor Inc." + ], + [ + "adr", + {}, + "text", + [ + "", + "", + "3540 East Longwing Lane, Suite 300", + "Meridian", + "ID", + "83646", + "US" + ] + ], + [ + "tel", + { + "type": "voice" + }, + "uri", + "tel:+1.208389574" + ], + [ + "tel", + { + "type": "fax" + }, + "uri", + "tel:+1.2083895771" + ], + [ + "email", + {}, + "text", + "ccops@markmonitor.com" + ] + ] + ], + "roles": [ + "registrar" + ] + } + ], + "ldhName": "microsoft.click", + "unicodeName": "microsoft.click", + "secureDNS": { + "delegationSigned": false + }, + "nameservers": [ + { + "objectClassName": "nameserver", + "handle": "HO_6d2f0b70100a174318954d7e2af08b36-UR", + "events": [ + { + "eventAction": "last update of RDAP database", + "eventDate": "2024-06-12T19:40:52.232Z" + } + ], + "status": [ + "associated" + ], + "ldhName": "ns4-08.azure-dns.info", + "unicodeName": "ns4-08.azure-dns.info" + }, + { + "objectClassName": "nameserver", + "handle": "HO_a639e2ec1bd022f8dcf45d00dfc1cf7d-UR", + "events": [ + { + "eventAction": "last update of RDAP database", + "eventDate": "2024-06-12T19:40:52.232Z" + } + ], + "status": [ + "associated" + ], + "ldhName": "ns2-08.azure-dns.net", + "unicodeName": "ns2-08.azure-dns.net" + }, + { + "objectClassName": "nameserver", + "handle": "HO_bcdf18efa72577e5ac61514bce694770-UR", + "events": [ + { + "eventAction": "last update of RDAP database", + "eventDate": "2024-06-12T19:40:52.232Z" + } + ], + "status": [ + "associated" + ], + "ldhName": "ns3-08.azure-dns.org", + "unicodeName": "ns3-08.azure-dns.org" + }, + { + "objectClassName": "nameserver", + "handle": "HO_8fa40a46321cfbe1b88b1590e5bd9cea-UR", + "events": [ + { + "eventAction": "last update of RDAP database", + "eventDate": "2024-06-12T19:40:52.232Z" + } + ], + "status": [ + "associated" + ], + "ldhName": "ns1-08.azure-dns.com", + "unicodeName": "ns1-08.azure-dns.com" + } + ] +} \ No newline at end of file diff --git a/icann-rdap-client/src/test_files/nic.xyz.json b/icann-rdap-client/src/test_files/nic.xyz.json new file mode 100644 index 0000000..babe4bf --- /dev/null +++ b/icann-rdap-client/src/test_files/nic.xyz.json @@ -0,0 +1,347 @@ +{ + "rdapConformance": [ + "icann_rdap_response_profile_0", + "icann_rdap_technical_implementation_guide_0", + "rdap_level_0" + ], + "notices": [ + { + "title": "Status Codes", + "description": [ + "For more information on domain status codes, please visit https://icann.org/epp" + ], + "links": [ + { + "href": "https://icann.org/epp", + "title": "More information on domain status codes" + } + ] + }, + { + "title": "Terms of Use", + "description": [ + "For more information on Whois status codes, please visit https://icann.org/epp", + "", + ">>> IMPORTANT INFORMATION ABOUT THE DEPLOYMENT OF RDAP: please visit", + "https://www.centralnic.com/support/rdap <<<", + "", + "The Whois and RDAP services are provided by CentralNic, and contain", + "information pertaining to Internet domain names registered by our", + "our customers. By using this service you are agreeing (1) not to use any", + "information presented here for any purpose other than determining", + "ownership of domain names, (2) not to store or reproduce this data in", + "any way, (3) not to use any high-volume, automated, electronic processes", + "to obtain data from this service. Abuse of this service is monitored and", + "actions in contravention of these terms will result in being permanently", + "blacklisted. All data is (c) CentralNic Ltd (https://www.centralnic.com)", + "", + "Access to the Whois and RDAP services is rate limited. For more", + "information, visit https://registrar-console.centralnic.com/pub/whois_guidance." + ], + "links": [ + { + "href": "https://www.centralnicregistry.com/", + "title": "Terms of Use" + } + ] + }, + { + "title": "RDDS Inaccuracy Complaint Form", + "description": [ + "URL of the ICANN RDDS Inaccuracy Complaint Form: https://www.icann.org/wicf/" + ], + "links": [ + { + "href": "https://www.icann.org/wicf/", + "title": "ICANN RDDS Inaccuracy Complaint Form" + } + ] + }, + { + "title": "Data Policy", + "description": [ + "The contact information for one or more entities associated with this domain has been redacted in accordance with the entity's disclosure preferences." + ] + } + ], + "objectClassName": "domain", + "handle": "D1465615-CNIC", + "links": [ + { + "rel": "self", + "href": "https://rdap.centralnic.com/xyz/domain/nic.xyz", + "title": "Authoritative URL for this resource", + "type": "application/rdap+json" + }, + { + "rel": "help", + "href": "https://whois.nic.xyz/rdap", + "title": "RDAP Service Help" + }, + { + "href": "https://gen.xyz/", + "title": "XYZ.com, LLC" + }, + { + "rel": "related", + "href": "https://rdap.centralnic.com/xyz/domain/nic.xyz", + "title": "URL of Sponsoring Registrar's RDAP Record", + "type": "application/rdap+json" + } + ], + "events": [ + { + "eventAction": "registration", + "eventDate": "2013-09-11T11:58:06.0Z" + }, + { + "eventAction": "expiration", + "eventDate": "2024-09-11T23:59:59.0Z" + }, + { + "eventAction": "last update of RDAP database", + "eventDate": "2024-06-12T13:31:47.0Z" + }, + { + "eventAction": "last changed", + "eventDate": "2023-09-05T00:05:10.0Z" + } + ], + "status": [ + "server transfer prohibited", + "server update prohibited", + "server delete prohibited", + "server renew prohibited" + ], + "port43": "whois.nic.xyz", + "entities": [ + { + "objectClassName": "entity", + "remarks": [ + { + "title": "Data Policy", + "description": [ + "Some of the data in this object has been removed." + ] + }, + { + "title": "REDACTED FOR PRIVACY", + "description": [ + "Some of the data in this object has been removed." + ] + }, + { + "title": "EMAIL REDACTED FOR PRIVACY", + "description": [ + "Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant of the queried domain name." + ] + } + ], + "status": [ + "removed" + ], + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "kind", + {}, + "text", + "org" + ], + [ + "org", + {}, + "text", + "XYZ.COM LLC" + ], + [ + "adr", + {}, + "text", + [ + "", + "", + [ + "", + "", + "" + ], + "", + "NV", + "", + "United States" + ] + ], + [ + "ISO-3166-1-alpha-2", + {}, + "text", + "US" + ] + ] + ], + "roles": [ + "registrant", + "technical", + "administrative", + "billing" + ] + }, + { + "objectClassName": "entity", + "handle": "9999", + "links": [ + { + "rel": "self", + "href": "https://rdap.centralnic.com/xyz/entity/9999", + "type": "application/rdap+json" + } + ], + "entities": [ + { + "objectClassName": "entity", + "handle": "not applicable", + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "fn", + {}, + "text", + "Abuse Contact" + ], + [ + "org", + {}, + "text", + "CentralNic Ltd" + ], + [ + "email", + {}, + "text", + "ops@centralnic.com" + ], + [ + "tel", + { + "type": "voice" + }, + "uri", + "tel:+44.2033880600" + ] + ] + ], + "roles": [ + "abuse" + ] + } + ], + "vcardArray": [ + "vcard", + [ + [ + "version", + {}, + "text", + "4.0" + ], + [ + "fn", + {}, + "text", + "CentralNic Ltd" + ] + ] + ], + "roles": [ + "registrar" + ], + "publicIds": [ + { + "type": "IANA Registrar ID", + "identifier": "9999" + } + ] + } + ], + "ldhName": "nic.xyz", + "secureDNS": { + "delegationSigned": false + }, + "nameservers": [ + { + "objectClassName": "nameserver", + "links": [ + { + "rel": "self", + "href": "https://rdap.centralnic.com/xyz/nameserver/x.nic.xyz", + "title": "Authoritative URL for this object", + "type": "application/rdap+json" + } + ], + "status": [ + "removed" + ], + "ldhName": "x.nic.xyz" + }, + { + "objectClassName": "nameserver", + "links": [ + { + "rel": "self", + "href": "https://rdap.centralnic.com/xyz/nameserver/y.nic.xyz", + "title": "Authoritative URL for this object", + "type": "application/rdap+json" + } + ], + "status": [ + "removed" + ], + "ldhName": "y.nic.xyz" + }, + { + "objectClassName": "nameserver", + "links": [ + { + "rel": "self", + "href": "https://rdap.centralnic.com/xyz/nameserver/z.nic.xyz", + "title": "Authoritative URL for this object", + "type": "application/rdap+json" + } + ], + "status": [ + "removed" + ], + "ldhName": "z.nic.xyz" + }, + { + "objectClassName": "nameserver", + "links": [ + { + "rel": "self", + "href": "https://rdap.centralnic.com/xyz/nameserver/generationxyz.nic.xyz", + "title": "Authoritative URL for this object", + "type": "application/rdap+json" + } + ], + "status": [ + "removed" + ], + "ldhName": "generationxyz.nic.xyz" + } + ] +}