From ffaaac09c155e9d5062057edea804b796ec4b8e2 Mon Sep 17 00:00:00 2001 From: "[Thomas Green]" Date: Wed, 19 Jul 2023 18:16:25 +0200 Subject: [PATCH] Removes "asnroots" profile parameter - #1052 This profile parameter was deprecated in 2020.1. - Remove code - Remove documentation - Replace unitary tests from "asnroots" to "asn_db.style" and "asn_db.sources" --- lib/Zonemaster/Engine/ASNLookup.pm | 20 +---- lib/Zonemaster/Engine/Profile.pm | 22 ------ t/asn.data | 120 +++++++++++++++-------------- t/asn.t | 5 +- t/profiles.t | 96 +++++++++++++++-------- 5 files changed, 135 insertions(+), 128 deletions(-) diff --git a/lib/Zonemaster/Engine/ASNLookup.pm b/lib/Zonemaster/Engine/ASNLookup.pm index fea3aeaa2..e6f18a5c6 100644 --- a/lib/Zonemaster/Engine/ASNLookup.pm +++ b/lib/Zonemaster/Engine/ASNLookup.pm @@ -23,23 +23,9 @@ sub get_with_prefix { my ( $class, $ip ) = @_; if ( not @db_sources ) { - # - # Backward compatibility in case asnroots is still configured in profile - # but we prefer new model if present - # - my @roots; - if ( Zonemaster::Engine::Profile->effective->get( q{asnroots} ) ) { - @roots = map { name( $_ ) } @{ Zonemaster::Engine::Profile->effective->get( q{asnroots} ) }; - } - if ( scalar @roots ) { - @db_sources = @roots; - $db_style = q{cymru}; - } - else { - $db_style = Zonemaster::Engine::Profile->effective->get( q{asn_db.style} ); - my %db_sources = %{ Zonemaster::Engine::Profile->effective->get( q{asn_db.sources} ) }; - @db_sources = map { name( $_ ) } @{ $db_sources{ $db_style } }; - } + $db_style = Zonemaster::Engine::Profile->effective->get( q{asn_db.style} ); + my %db_sources = %{ Zonemaster::Engine::Profile->effective->get( q{asn_db.sources} ) }; + @db_sources = map { name( $_ ) } @{ $db_sources{ $db_style } }; } if ( not ref( $ip ) or not $ip->isa( 'Net::IP::XS' ) ) { diff --git a/lib/Zonemaster/Engine/Profile.pm b/lib/Zonemaster/Engine/Profile.pm index eeb215cdf..9726c4200 100644 --- a/lib/Zonemaster/Engine/Profile.pm +++ b/lib/Zonemaster/Engine/Profile.pm @@ -91,19 +91,6 @@ my %profile_properties_details = ( q{no_network} => { type => q{Bool} }, - q{asnroots} => { - type => q{ArrayRef}, - test => sub { - foreach my $ndd ( @{$_[0]} ) { - die "Property asnroots has a NULL item" if not defined $ndd; - die "Property asnroots has a non scalar item" if not defined ref($ndd); - die "Property asnroots has an item too long" if length($ndd) > 255; - foreach my $label ( split /[.]/, $ndd ) { - die "Property asnroots has a non domain name item" if $label !~ /^[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?$/; - } - } - } - }, q{asn_db.style} => { type => q{Str}, test => sub { @@ -740,15 +727,6 @@ A boolean. If true, network traffic is forbidden. Default false. Use when you want to be sure that any data is only taken from a preloaded cache. -=head2 asnroots (DEPRECATED) - -An arrayref of domain names. Default C<["asnlookup.zonemaster.net", -"asnlookup.iis.se", "asn.cymru.com"]>. - -The domains will be assumed to be Cymru-style AS lookup zones. -Normally only the first name in the list will be used, the rest are -backups in case the earlier ones don't work. - =head2 asn_db.style A string that is either C<"Cymru"> or C<"RIPE">. Defines which method will diff --git a/t/asn.data b/t/asn.data index 486b30952..e0a256556 100644 --- a/t/asn.data +++ b/t/asn.data @@ -1,66 +1,74 @@ -nsp.dnsnode.net 2a01:03f1:3032:0000:0000:0000:0000:0053 {} -nsp.dnsnode.net 194.58.198.32 {} -asnlookup-ns2.zonemaster.net 2001:067c:124c:7312:0000:0000:0000:0070 {"GkYZ8zZvr859U6n0RWIQnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":35,"answerfrom":"2001:67c:124c:7312::70","timestamp":1699367056.78143,"data":"blWEAwABAAAAAQAAATEBMAMxNjgDMTkyBm9yaWdpbglhc25sb29rdXAKem9uZW1hc3RlcgNuZXQAABAAAcAfAAYAAQAAA4QAPA1hc25sb29rdXAtbnMxwCkGbm9tYWlsDmFzbmxvb2t1cC1tYWlswCllSh/KAAAHCAAAA4QAAVGAAAADhA=="}}},"vlHtIPwxJvH03j2ezw1DQw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"56eEAAABAAEAAgAAAjQ2AjM2AzIyNgI5MQZvcmlnaW4JYXNubG9va3VwCnpvbmVtYXN0ZXIDbmV0AAAQAAHADAAQAAEAADhAACcmMTk3NTY0IHwgOTEuMjI2LjM2LjAvMjMgfCBOQSB8IE5BIHwgTkHAIAACAAEAAAJYABANYXNubG9va3VwLW5zMsAqwCAAAgABAAACWAAQDWFzbmxvb2t1cC1uczHAKg==","answerfrom":"2001:67c:124c:7312::70","querytime":34,"timestamp":1699367055.00318}}},"9/xxo9P3GPiuofuKjPAr9Q":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367056.44601,"querytime":35,"answerfrom":"2001:67c:124c:7312::70","data":"hWmAAAABAAcAAAAAATABMwEwATABMgEwATABMAEwATABMAEwATABMAEwATABMAEwATABMAFlATMBYQFiATMBMAE1ATABMQEwATABMgdvcmlnaW42CWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwAwAEAABAAA4QAArKjM5NjU2NyB8IDIwMDE6NTAzOmJhM2U6Oi80OCB8IE5BIHwgTkEgfCBOQcAMABAAAQAAOEAAKyozOTcyMDggfCAyMDAxOjUwMzpiYTNlOjovNDggfCBOQSB8IE5BIHwgTkHADAAQAAEAADhAACsqMzk2NTQwIHwgMjAwMTo1MDM6YmEzZTo6LzQ4IHwgTkEgfCBOQSB8IE5BwAwAEAABAAA4QAArKjM5NjU1OSB8IDIwMDE6NTAzOmJhM2U6Oi80OCB8IE5BIHwgTkEgfCBOQcAMABAAAQAAOEAAKyozOTY1NzQgfCAyMDAxOjUwMzpiYTNlOjovNDggfCBOQSB8IE5BIHwgTkHADAAQAAEAADhAACsqMzk2NTQ0IHwgMjAwMTo1MDM6YmEzZTo6LzQ4IHwgTkEgfCBOQSB8IE5BwAwAEAABAAA4QAArKjM5NjU1NSB8IDIwMDE6NTAzOmJhM2U6Oi80OCB8IE5BIHwgTkEgfCBOQQ=="}}},"M+X8v3VuYu/obcS9NzRAnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367054.67787,"querytime":35,"answerfrom":"2001:67c:124c:7312::70","data":"ljSEAAABAAEAAgAAATgBOAE4ATgGb3JpZ2luCWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwAwAEAABAAA4QAAiITE1MTY5IHwgOC44LjguMC8yNCB8IE5BIHwgTkEgfCBOQcAbAAIAAQAAAlgAEA1hc25sb29rdXAtbnMxwCXAGwACAAEAAAJYABANYXNubG9va3VwLW5zMsAl"}}},"hD/Z7LyYnh1x0WDPm6PVDw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":34,"answerfrom":"2001:67c:124c:7312::70","timestamp":1699367057.10476,"data":"KCKEAAABAAEAAgAAAzE3OAMxMTEDMTI0ATMGb3JpZ2luCWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwAwAEAABAAA4QAAkIzE2NTA5IHwgMy4xMjQuMC4wLzE0IHwgTkEgfCBOQSB8IE5BwCEAAgABAAACWAAQDWFzbmxvb2t1cC1uczHAK8AhAAIAAQAAAlgAEA1hc25sb29rdXAtbnMywCs="}}}} -d.nic.fr 2001:0678:000c:0000:0000:0000:0000:0001 {} -d.nic.fr 194.0.9.1 {} -av2.nstld.com 192.42.178.30 {} -av2.nstld.com 2001:0500:0125:0000:0000:0000:0000:0030 {} -l.root-servers.net 2001:0500:009f:0000:0000:0000:0000:0042 {} -l.root-servers.net 199.7.83.42 {} -h.root-servers.net 198.97.190.53 {} -h.root-servers.net 2001:0500:0001:0000:0000:0000:0000:0053 {} c.root-servers.net 2001:0500:0002:0000:0000:0000:0000:000c {} c.root-servers.net 192.33.4.12 {} -j.gtld-servers.net 192.48.79.30 {} -f.ext.nic.fr 2001:067c:1010:0011:0000:0000:0000:0053 {} -f.ext.nic.fr 194.146.106.46 {} -b.root-servers.net 2001:0500:0200:0000:0000:0000:0000:000b {} -b.root-servers.net 199.9.14.201 {} -m.gtld-servers.net 2001:0501:b1f9:0000:0000:0000:0000:0030 {"Hx/wBzZ7dxT0btOz2sXTow":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":8,"answerfrom":"2001:501:b1f9::30","timestamp":1699367056.08226,"data":"dx2AAAABAAAABAAJA2F2NAVuc3RsZANjb20AABwAAcAQAAIAAQACowAABgNhdjHAEMAQAAIAAQACowAABgNhdjLAEMAQAAIAAQACowAABgNhdjPAEMAQAAIAAQACowAAAsAMwCsAAQABAAKjAAAEwCqxHsArABwAAQACowAAECABBQABJAAAAAAAAAAAADDAPQABAAEAAqMAAATAKrIewD0AHAABAAKjAAAQIAEFAAElAAAAAAAAAAAAMMBPAAEAAQACowAABMBShR7ATwAcAAEAAqMAABAgAQUAASYAAAAAAAAAAAAwwAwAAQABAAKjAAAEwFKGHsAMABwAAQACowAAECABBQABJwAAAAAAAAAAADAAACkQAAAAAAAAAA=="}}},"ioaSLvyfzM2idj7aWcQm4g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":7,"answerfrom":"2001:501:b1f9::30","timestamp":1699367056.41647,"data":"1ZCAAAABAAAABAAHDWFzbmxvb2t1cC1uczIKem9uZW1hc3RlcgNuZXQAAAEAAcAaAAIAAQACowAADANuczIDbmljAmZyAMAaAAIAAQACowAADgNuc3AHZG5zbm9kZcAlwBoAAgABAAKjAAAGA25zdcBWwBoAAgABAAKjAAAGA25zYcBWwFIAAQABAAKjAAAEwjrGIMBSABwAAQACowAAECoBA/EwMgAAAAAAAAAAAFPAbAABAAEAAqMAAAS5KoliwGwAHAABAAKjAAAQKgED8AQAAAAAAAAAAAAAMsB+AAEAAQACowAABMI6wCDAfgAcAAEAAqMAABAqAQPxADIAAAAAAAAAAABTAAApEAAAAAAAAAA="}}},"KoOHMqlriAzfyyS3tJUVhQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"2001:501:b1f9::30","querytime":8,"timestamp":1699367055.80854,"data":"XLeAAAABAAAABAAJA2F2NAVuc3RsZANjb20AAAEAAcAQAAIAAQACowAABgNhdjHAEMAQAAIAAQACowAABgNhdjLAEMAQAAIAAQACowAABgNhdjPAEMAQAAIAAQACowAAAsAMwCsAAQABAAKjAAAEwCqxHsArABwAAQACowAAECABBQABJAAAAAAAAAAAADDAPQABAAEAAqMAAATAKrIewD0AHAABAAKjAAAQIAEFAAElAAAAAAAAAAAAMMBPAAEAAQACowAABMBShR7ATwAcAAEAAqMAABAgAQUAASYAAAAAAAAAAAAwwAwAAQABAAKjAAAEwFKGHsAMABwAAQACowAAECABBQABJwAAAAAAAAAAADAAACkQAAAAAAAAAA=="}}},"oyAxWnDqjJc3r3vkZARqkw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367056.36363,"querytime":7,"answerfrom":"2001:501:b1f9::30","data":"8LWAAAABAAAABAABAWMMZ3RsZC1zZXJ2ZXJzA25ldAAAHAABwA4AAgABAAKjAAAPA2F2MQVuc3RsZANjb20AwA4AAgABAAKjAAAGA2F2MsA0wA4AAgABAAKjAAAGA2F2M8A0wA4AAgABAAKjAAAGA2F2NMA0AAApEAAAAAAAAAA="}}},"sXDcACKhm0MFS8wh6cIIDQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"meqAAAABAAAABAAHDWFzbmxvb2t1cC1uczIKem9uZW1hc3RlcgNuZXQAABwAAcAaAAIAAQACowAADANuczIDbmljAmZyAMAaAAIAAQACowAADgNuc3AHZG5zbm9kZcAlwBoAAgABAAKjAAAGA25zdcBWwBoAAgABAAKjAAAGA25zYcBWwFIAAQABAAKjAAAEwjrGIMBSABwAAQACowAAECoBA/EwMgAAAAAAAAAAAFPAbAABAAEAAqMAAAS5KoliwGwAHAABAAKjAAAQKgED8AQAAAAAAAAAAAAAMsB+AAEAAQACowAABMI6wCDAfgAcAAEAAqMAABAqAQPxADIAAAAAAAAAAABTAAApEAAAAAAAAAA=","timestamp":1699367056.43358,"answerfrom":"2001:501:b1f9::30","querytime":7}}}} -m.gtld-servers.net 192.55.83.30 {"ioaSLvyfzM2idj7aWcQm4g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":8,"answerfrom":"192.55.83.30","timestamp":1699367054.33477,"data":"QS+AAAABAAAABAAHDWFzbmxvb2t1cC1uczIKem9uZW1hc3RlcgNuZXQAAAEAAcAaAAIAAQACowAADANuczIDbmljAmZyAMAaAAIAAQACowAADgNuc3AHZG5zbm9kZcAlwBoAAgABAAKjAAAGA25zdcBWwBoAAgABAAKjAAAGA25zYcBWwFIAAQABAAKjAAAEwjrGIMBSABwAAQACowAAECoBA/EwMgAAAAAAAAAAAFPAbAABAAEAAqMAAAS5KoliwGwAHAABAAKjAAAQKgED8AQAAAAAAAAAAAAAMsB+AAEAAQACowAABMI6wCDAfgAcAAEAAqMAABAqAQPxADIAAAAAAAAAAABTAAApEAAAAAAAAAA="}}},"M+X8v3VuYu/obcS9NzRAnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"EP6AAAABAAAABAAHATgBOAE4ATgGb3JpZ2luCWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwCUAAgABAAKjAAAMA25zMgNuaWMCZnIAwCUAAgABAAKjAAAOA25zcAdkbnNub2RlwDDAJQACAAEAAqMAAAYDbnN1wGHAJQACAAEAAqMAAAYDbnNhwGHAXQABAAEAAqMAAATCOsYgwF0AHAABAAKjAAAQKgED8TAyAAAAAAAAAAAAU8B3AAEAAQACowAABLkqiWLAdwAcAAEAAqMAABAqAQPwBAAAAAAAAAAAAAAywIkAAQABAAKjAAAEwjrAIMCJABwAAQACowAAECoBA/EAMgAAAAAAAAAAAFMAACkQAAAAAAAAAA==","answerfrom":"192.55.83.30","querytime":8,"timestamp":1699367053.53808}}},"GkYZ8zZvr859U6n0RWIQnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367056.74414,"querytime":6,"answerfrom":"192.55.83.30","data":"eg6AAAABAAAABAAHATEBMAMxNjgDMTkyBm9yaWdpbglhc25sb29rdXAKem9uZW1hc3RlcgNuZXQAABAAAcApAAIAAQACowAADANuczIDbmljAmZyAMApAAIAAQACowAADgNuc3AHZG5zbm9kZcA0wCkAAgABAAKjAAAGA25zdcBlwCkAAgABAAKjAAAGA25zYcBlwGEAAQABAAKjAAAEwjrGIMBhABwAAQACowAAECoBA/EwMgAAAAAAAAAAAFPAewABAAEAAqMAAAS5KoliwHsAHAABAAKjAAAQKgED8AQAAAAAAAAAAAAAMsCNAAEAAQACowAABMI6wCDAjQAcAAEAAqMAABAqAQPxADIAAAAAAAAAAABTAAApEAAAAAAAAAA="}}},"vlHtIPwxJvH03j2ezw1DQw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.55.83.30","querytime":7,"timestamp":1699367054.96627,"data":"atyAAAABAAAABAAHAjQ2AjM2AzIyNgI5MQZvcmlnaW4JYXNubG9va3VwCnpvbmVtYXN0ZXIDbmV0AAAQAAHAKgACAAEAAqMAAAwDbnMyA25pYwJmcgDAKgACAAEAAqMAAA4DbnNwB2Ruc25vZGXANcAqAAIAAQACowAABgNuc3XAZsAqAAIAAQACowAABgNuc2HAZsBiAAEAAQACowAABMI6xiDAYgAcAAEAAqMAABAqAQPxMDIAAAAAAAAAAABTwHwAAQABAAKjAAAEuSqJYsB8ABwAAQACowAAECoBA/AEAAAAAAAAAAAAADLAjgABAAEAAqMAAATCOsAgwI4AHAABAAKjAAAQKgED8QAyAAAAAAAAAAAAUwAAKRAAAAAAAAAA"}}},"sXDcACKhm0MFS8wh6cIIDQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":8,"answerfrom":"192.55.83.30","timestamp":1699367054.63274,"data":"w6uAAAABAAAABAAHDWFzbmxvb2t1cC1uczIKem9uZW1hc3RlcgNuZXQAABwAAcAaAAIAAQACowAADANuczIDbmljAmZyAMAaAAIAAQACowAADgNuc3AHZG5zbm9kZcAlwBoAAgABAAKjAAAGA25zdcBWwBoAAgABAAKjAAAGA25zYcBWwFIAAQABAAKjAAAEwjrGIMBSABwAAQACowAAECoBA/EwMgAAAAAAAAAAAFPAbAABAAEAAqMAAAS5KoliwGwAHAABAAKjAAAQKgED8AQAAAAAAAAAAAAAMsB+AAEAAQACowAABMI6wCDAfgAcAAEAAqMAABAqAQPxADIAAAAAAAAAAABTAAApEAAAAAAAAAA="}}},"hD/Z7LyYnh1x0WDPm6PVDw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"mkyAAAABAAAABAAHAzE3OAMxMTEDMTI0ATMGb3JpZ2luCWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwCsAAgABAAKjAAAMA25zMgNuaWMCZnIAwCsAAgABAAKjAAAOA25zcAdkbnNub2RlwDbAKwACAAEAAqMAAAYDbnN1wGfAKwACAAEAAqMAAAYDbnNhwGfAYwABAAEAAqMAAATCOsYgwGMAHAABAAKjAAAQKgED8TAyAAAAAAAAAAAAU8B9AAEAAQACowAABLkqiWLAfQAcAAEAAqMAABAqAQPwBAAAAAAAAAAAAAAywI8AAQABAAKjAAAEwjrAIMCPABwAAQACowAAECoBA/EAMgAAAAAAAAAAAFMAACkQAAAAAAAAAA==","querytime":8,"answerfrom":"192.55.83.30","timestamp":1699367057.06748}}},"yk3rcZr2wIk8FHE/pkf2kw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367055.54642,"answerfrom":"192.55.83.30","querytime":7,"data":"/6mAAAABAAAABAABAWMMZ3RsZC1zZXJ2ZXJzA25ldAAAAQABwA4AAgABAAKjAAAPA2F2MQVuc3RsZANjb20AwA4AAgABAAKjAAAGA2F2MsA0wA4AAgABAAKjAAAGA2F2M8A0wA4AAgABAAKjAAAGA2F2NMA0AAApEAAAAAAAAAA="}}}} -av3.nstld.com 192.82.133.30 {} -av3.nstld.com 2001:0500:0126:0000:0000:0000:0000:0030 {} -f.root-servers.net 2001:0500:002f:0000:0000:0000:0000:000f {} -f.root-servers.net 192.5.5.241 {} -nsu.dnsnode.net 185.42.137.98 {} -nsu.dnsnode.net 2a01:03f0:0400:0000:0000:0000:0000:0032 {"ioaSLvyfzM2idj7aWcQm4g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"2a01:3f0:400::32","querytime":30,"timestamp":1699367054.34853,"data":"WHyEAAABAAEABAABDWFzbmxvb2t1cC1uczIKem9uZW1hc3RlcgNuZXQAAAEAAcAMAAEAAQAADhAABC2bYEbAGgACAAEAAA4QAAwDbnMyA25pYwJmcgDAGgACAAEAAA4QAA4DbnNhB2Ruc25vZGXAJcAaAAIAAQAADhAABgNuc3DAZsAaAAIAAQAADhAABgNuc3XAZgAAKRAAAAAAAAAA"}}},"sXDcACKhm0MFS8wh6cIIDQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367054.64356,"answerfrom":"2a01:3f0:400::32","querytime":30,"data":"t5KEAAABAAEABAABDWFzbmxvb2t1cC1uczIKem9uZW1hc3RlcgNuZXQAABwAAcAMABwAAQAADhAAECABBnwSTHMSAAAAAAAAAHDAGgACAAEAAA4QAAwDbnMyA25pYwJmcgDAGgACAAEAAA4QAA4DbnNhB2Ruc25vZGXAJcAaAAIAAQAADhAABgNuc3DAcsAaAAIAAQAADhAABgNuc3XAcgAAKRAAAAAAAAAA"}}}} -g.ext.nic.fr 194.0.36.1 {} -g.ext.nic.fr 2001:0678:004c:0000:0000:0000:0000:0001 {"f39y8o9yMy+2CJ3Tild/Hw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"xtuEAAABAAEAAAABA25zMgNuaWMCZnIAABwAAcAMABwAAQACowAAECABBmAwBQABAAAAAAABAAIAACkQAAAAAAAAAA==","timestamp":1699367054.06341,"answerfrom":"2001:678:4c::1","querytime":5}}},"SwbApgSh9mA6B3tXP/GkUg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"PPuEAAABAAEAAAABA25zMgNuaWMCZnIAAAEAAcAMAAEAAQACowAABMBdAAQAACkQAAAAAAAAAA==","answerfrom":"2001:678:4c::1","querytime":4,"timestamp":1699367053.80721}}}} -i.gtld-servers.net 192.43.172.30 {} -g.root-servers.net 2001:0500:0012:0000:0000:0000:0000:0d0d {} -g.root-servers.net 192.112.36.4 {} -a.root-servers.net 198.41.0.4 {} -a.root-servers.net 2001:0503:ba3e:0000:0000:0000:0002:0030 {} -av1.nstld.com 192.42.177.30 {} -av1.nstld.com 2001:0500:0124:0000:0000:0000:0000:0030 {} e.ext.nic.fr 2a00:0d78:0000:0102:0193:0176:0144:0022 {} e.ext.nic.fr 193.176.144.22 {} -av4.nstld.com 192.82.134.30 {"yk3rcZr2wIk8FHE/pkf2kw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367056.10403,"answerfrom":"192.82.134.30","querytime":5,"data":"A+CEAAABAAEABAABAWMMZ3RsZC1zZXJ2ZXJzA25ldAAAAQABwAwAAQABAAFRgAAEwBpcHsAOAAIAAQABUYAADwNhdjQFbnN0bGQDY29tAMAOAAIAAQABUYAABgNhdjLARMAOAAIAAQABUYAABgNhdjPARMAOAAIAAQABUYAABgNhdjHARAAAKRAAAAAAAAAA"}}}} -av4.nstld.com 2001:0500:0127:0000:0000:0000:0000:0030 {"oyAxWnDqjJc3r3vkZARqkw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"OV6EAAABAAEABAABAWMMZ3RsZC1zZXJ2ZXJzA25ldAAAHAABwAwAHAABAAFRgAAQIAEFA4PrAAAAAAAAAAAAMMAOAAIAAQABUYAADwNhdjQFbnN0bGQDY29tAMAOAAIAAQABUYAABgNhdjLAUMAOAAIAAQABUYAABgNhdjPAUMAOAAIAAQABUYAABgNhdjHAUAAAKRAAAAAAAAAA","timestamp":1699367056.37301,"querytime":5,"answerfrom":"2001:500:127::30"}}},"Hx/wBzZ7dxT0btOz2sXTow":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367056.09412,"querytime":5,"answerfrom":"2001:500:127::30","data":"sKyEAAABAAEABAAIA2F2NAVuc3RsZANjb20AABwAAcAMABwAAQAAASwAECABBQABJwAAAAAAAAAAADDAEAACAAEAAVGAAALADMAQAAIAAQABUYAABgNhdjLAEMAQAAIAAQABUYAABgNhdjPAEMAQAAIAAQABUYAABgNhdjHAEMAMAAEAAQAAASwABMBShh7AVQABAAEAAAEsAATAKrIewFUAHAABAAABLAAQIAEFAAElAAAAAAAAAAAAMMBnAAEAAQAAASwABMBShR7AZwAcAAEAAAEsABAgAQUAASYAAAAAAAAAAAAwwHkAAQABAAABLAAEwCqxHsB5ABwAAQAAASwAECABBQABJAAAAAAAAAAAADAAACkQAAAAAAAAAA=="}}},"KoOHMqlriAzfyyS3tJUVhQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367055.82192,"answerfrom":"2001:500:127::30","querytime":6,"data":"uO2EAAABAAEABAAIA2F2NAVuc3RsZANjb20AAAEAAcAMAAEAAQAAASwABMBShh7AEAACAAEAAVGAAALADMAQAAIAAQABUYAABgNhdjLAEMAQAAIAAQABUYAABgNhdjPAEMAQAAIAAQABUYAABgNhdjHAEMAMABwAAQAAASwAECABBQABJwAAAAAAAAAAADDASQABAAEAAAEsAATAKrIewEkAHAABAAABLAAQIAEFAAElAAAAAAAAAAAAMMBbAAEAAQAAASwABMBShR7AWwAcAAEAAAEsABAgAQUAASYAAAAAAAAAAAAwwG0AAQABAAABLAAEwCqxHsBtABwAAQAAASwAECABBQABJAAAAAAAAAAAADAAACkQAAAAAAAAAA=="}}}} -nsa.dnsnode.net 194.58.192.32 {} -nsa.dnsnode.net 2a01:03f1:0032:0000:0000:0000:0000:0053 {} -k.root-servers.net 2001:07fd:0000:0000:0000:0000:0000:0001 {} -k.root-servers.net 193.0.14.129 {} +ns2.nic.fr 192.93.0.4 {"M+X8v3VuYu/obcS9NzRAnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1689779440.12033,"querytime":6,"data":"M1CAAAABAAAAAgABATgBOAE4ATgGb3JpZ2luCWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwBsAAgABAAAOEAAQDWFzbmxvb2t1cC1uczLAJcAbAAIAAQAADhAAEA1hc25sb29rdXAtbnMxwCUAACkFmAAAAAAAAA==","answerfrom":"192.93.0.4"}}},"9/xxo9P3GPiuofuKjPAr9Q":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.93.0.4","querytime":7,"data":"QeiAAAABAAAAAgABATABMwEwATABMgEwATABMAEwATABMAEwATABMAEwATABMAEwATABMAFlATMBYQFiATMBMAE1ATABMQEwATABMgdvcmlnaW42CWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwFQAAgABAAAOEAAQDWFzbmxvb2t1cC1uczLAXsBUAAIAAQAADhAAEA1hc25sb29rdXAtbnMxwF4AACkFmAAAAAAAAA==","timestamp":1689779440.60442}}},"vlHtIPwxJvH03j2ezw1DQw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.93.0.4","data":"0u6AAAABAAAAAgABAjQ2AjM2AzIyNgI5MQZvcmlnaW4JYXNubG9va3VwCnpvbmVtYXN0ZXIDbmV0AAAQAAHAIAACAAEAAA4QABANYXNubG9va3VwLW5zMsAqwCAAAgABAAAOEAAQDWFzbmxvb2t1cC1uczHAKgAAKQWYAAAAAAAA","querytime":6,"timestamp":1689779440.32532}}},"GkYZ8zZvr859U6n0RWIQnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.93.0.4","data":"EQKAAAABAAAAAgABATEBMAMxNjgDMTkyBm9yaWdpbglhc25sb29rdXAKem9uZW1hc3RlcgNuZXQAABAAAcAfAAIAAQAADhAAEA1hc25sb29rdXAtbnMxwCnAHwACAAEAAA4QABANYXNubG9va3VwLW5zMsApAAApBZgAAAAAAAA=","querytime":6,"timestamp":1689779440.69891}}}} +ns2.nic.fr 2001:0660:3005:0001:0000:0000:0001:0002 {} +ns1.nic.fr 2001:067c:2218:0002:0000:0000:0004:0001 {} +ns1.nic.fr 192.134.4.1 {} e.root-servers.net 192.203.230.10 {} e.root-servers.net 2001:0500:00a8:0000:0000:0000:0000:000e {} -d.root-servers.net 199.7.91.13 {} -d.root-servers.net 2001:0500:002d:0000:0000:0000:0000:000d {} -l.gtld-servers.net 192.41.162.30 {} -c.gtld-servers.net 2001:0503:83eb:0000:0000:0000:0000:0030 {} -c.gtld-servers.net 192.26.92.30 {"9/xxo9P3GPiuofuKjPAr9Q":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367056.38318,"querytime":5,"answerfrom":"192.26.92.30","data":"qC+AAAABAAAABAAHATABMwEwATABMgEwATABMAEwATABMAEwATABMAEwATABMAEwATABMAFlATMBYQFiATMBMAE1ATABMQEwATABMgdvcmlnaW42CWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwF4AAgABAAKjAAAMA25zMgNuaWMCZnIAwF4AAgABAAKjAAAOA25zcAdkbnNub2RlwGnAXgACAAEAAqMAAAYDbnN1wJrAXgACAAEAAqMAAAYDbnNhwJrAlgABAAEAAqMAAATCOsYgwJYAHAABAAKjAAAQKgED8TAyAAAAAAAAAAAAU8CwAAEAAQACowAABLkqiWLAsAAcAAEAAqMAABAqAQPwBAAAAAAAAAAAAAAywMIAAQABAAKjAAAEwjrAIMDCABwAAQACowAAECoBA/EAMgAAAAAAAAAAAFMAACkQAAAAAAAAAA=="}}}} -h.gtld-servers.net 192.54.112.30 {} -ns2.nic.fr 2001:0660:3005:0001:0000:0000:0001:0002 {} -ns2.nic.fr 192.93.0.4 {"hD/Z7LyYnh1x0WDPm6PVDw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.93.0.4","querytime":4,"timestamp":1699367057.08583,"data":"7LqAAAABAAAAAgABAzE3OAMxMTEDMTI0ATMGb3JpZ2luCWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwCEAAgABAAAOEAAQDWFzbmxvb2t1cC1uczLAK8AhAAIAAQAADhAAEA1hc25sb29rdXAtbnMxwCsAACkFmAAAAAAAAA=="}}},"9/xxo9P3GPiuofuKjPAr9Q":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.93.0.4","querytime":4,"timestamp":1699367056.40256,"data":"LHCAAAABAAAAAgABATABMwEwATABMgEwATABMAEwATABMAEwATABMAEwATABMAEwATABMAFlATMBYQFiATMBMAE1ATABMQEwATABMgdvcmlnaW42CWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwFQAAgABAAAOEAAQDWFzbmxvb2t1cC1uczHAXsBUAAIAAQAADhAAEA1hc25sb29rdXAtbnMywF4AACkFmAAAAAAAAA=="}}},"GkYZ8zZvr859U6n0RWIQnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"1OGAAAABAAAAAgABATEBMAMxNjgDMTkyBm9yaWdpbglhc25sb29rdXAKem9uZW1hc3RlcgNuZXQAABAAAcAfAAIAAQAADhAAEA1hc25sb29rdXAtbnMxwCnAHwACAAEAAA4QABANYXNubG9va3VwLW5zMsApAAApBZgAAAAAAAA=","timestamp":1699367056.76069,"querytime":5,"answerfrom":"192.93.0.4"}}},"vlHtIPwxJvH03j2ezw1DQw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":4,"answerfrom":"192.93.0.4","timestamp":1699367054.98436,"data":"1r6AAAABAAAAAgABAjQ2AjM2AzIyNgI5MQZvcmlnaW4JYXNubG9va3VwCnpvbmVtYXN0ZXIDbmV0AAAQAAHAIAACAAEAAA4QABANYXNubG9va3VwLW5zMcAqwCAAAgABAAAOEAAQDWFzbmxvb2t1cC1uczLAKgAAKQWYAAAAAAAA"}}},"M+X8v3VuYu/obcS9NzRAnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"E0iAAAABAAAAAgABATgBOAE4ATgGb3JpZ2luCWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwBsAAgABAAAOEAAQDWFzbmxvb2t1cC1uczHAJcAbAAIAAQAADhAAEA1hc25sb29rdXAtbnMywCUAACkFmAAAAAAAAA==","timestamp":1699367054.07048,"querytime":5,"answerfrom":"192.93.0.4"}}}} -b.gtld-servers.net 192.33.14.30 {} -j.root-servers.net 2001:0503:0c27:0000:0000:0000:0002:0030 {} -j.root-servers.net 192.58.128.30 {} +d.nic.fr 2001:0678:000c:0000:0000:0000:0000:0001 {} +d.nic.fr 194.0.9.1 {} +asnlookup-ns2.zonemaster.net 45.155.96.70 {"GkYZ8zZvr859U6n0RWIQnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"45.155.96.70","data":"CCKEAwABAAAAAQAAATEBMAMxNjgDMTkyBm9yaWdpbglhc25sb29rdXAKem9uZW1hc3RlcgNuZXQAABAAAcAfAAYAAQAAA4QAPA1hc25sb29rdXAtbnMxwCkGbm9tYWlsDmFzbmxvb2t1cC1tYWlswClkt7s4AAAHCAAAA4QAAVGAAAADhA==","querytime":37,"timestamp":1689779440.71131}}},"M+X8v3VuYu/obcS9NzRAnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"45.155.96.70","data":"mvqEAAABAAEAAgAAATgBOAE4ATgGb3JpZ2luCWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwAwAEAABAAA4QAAiITE1MTY5IHwgOC44LjguMC8yNCB8IE5BIHwgTkEgfCBOQcAbAAIAAQAAAlgAEA1hc25sb29rdXAtbnMywCXAGwACAAEAAAJYABANYXNubG9va3VwLW5zMcAl","querytime":37,"timestamp":1689779440.25449}}},"9/xxo9P3GPiuofuKjPAr9Q":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"wgCAAAABAAcAAAAAATABMwEwATABMgEwATABMAEwATABMAEwATABMAEwATABMAEwATABMAFlATMBYQFiATMBMAE1ATABMQEwATABMgdvcmlnaW42CWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwAwAEAABAAA4QAAqKTE5ODM2IHwgMjAwMTo1MDM6YmEzZTo6LzQ4IHwgTkEgfCBOQSB8IE5BwAwAEAABAAA4QAArKjM5NjU3NCB8IDIwMDE6NTAzOmJhM2U6Oi80OCB8IE5BIHwgTkEgfCBOQcAMABAAAQAAOEAAKyozOTY2MDUgfCAyMDAxOjUwMzpiYTNlOjovNDggfCBOQSB8IE5BIHwgTkHADAAQAAEAADhAACopMzI2NTEgfCAyMDAxOjUwMzpiYTNlOjovNDggfCBOQSB8IE5BIHwgTkHADAAQAAEAADhAACsqMzk3MTk3IHwgMjAwMTo1MDM6YmEzZTo6LzQ4IHwgTkEgfCBOQSB8IE5BwAwAEAABAAA4QAArKjM5NjU2MyB8IDIwMDE6NTAzOmJhM2U6Oi80OCB8IE5BIHwgTkEgfCBOQcAMABAAAQAAOEAAKyozOTY1NjYgfCAyMDAxOjUwMzpiYTNlOjovNDggfCBOQSB8IE5BIHwgTkE=","querytime":39,"timestamp":1689779440.62154,"answerfrom":"45.155.96.70"}}},"vlHtIPwxJvH03j2ezw1DQw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"45.155.96.70","querytime":38,"data":"/q6EAAABAAEAAgAAAjQ2AjM2AzIyNgI5MQZvcmlnaW4JYXNubG9va3VwCnpvbmVtYXN0ZXIDbmV0AAAQAAHADAAQAAEAADhAACcmMTk3NTY0IHwgOTEuMjI2LjM2LjAvMjMgfCBOQSB8IE5BIHwgTkHAIAACAAEAAAJYABANYXNubG9va3VwLW5zMcAqwCAAAgABAAACWAAQDWFzbmxvb2t1cC1uczLAKg==","timestamp":1689779440.33699}}}} +asnlookup-ns2.zonemaster.net 2001:067c:124c:7312:0000:0000:0000:0070 {"M+X8v3VuYu/obcS9NzRAnA":null,"9/xxo9P3GPiuofuKjPAr9Q":null,"vlHtIPwxJvH03j2ezw1DQw":null,"GkYZ8zZvr859U6n0RWIQnA":null} f.gtld-servers.net 192.35.51.30 {} -m.root-servers.net 2001:0dc3:0000:0000:0000:0000:0000:0035 {"ioaSLvyfzM2idj7aWcQm4g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"yOSAAAABAAAADQAODWFzbmxvb2t1cC1uczIKem9uZW1hc3RlcgNuZXQAAAEAAcAlAAIAAQACowAAEQFlDGd0bGQtc2VydmVyc8AlwCUAAgABAAKjAAAEAWbAPMAlAAIAAQACowAABAFpwDzAJQACAAEAAqMAAAQBasA8wCUAAgABAAKjAAAEAWPAPMAlAAIAAQACowAABAFiwDzAJQACAAEAAqMAAAQBbMA8wCUAAgABAAKjAAAEAWfAPMAlAAIAAQACowAABAFkwDzAJQACAAEAAqMAAAQBYcA8wCUAAgABAAKjAAAEAWjAPMAlAAIAAQACowAABAFrwDzAJQACAAEAAqMAAAQBbcA8wQcAAQABAAKjAAAEwDdTHsCnAAEAAQACowAABMApoh7A9wABAAEAAqMAAATANLIewHcAAQABAAKjAAAEwDBPHsBnAAEAAQACowAABMArrB7A5wABAAEAAqMAAATANnAewLcAAQABAAKjAAAEwCpdHsBXAAEAAQACowAABMAjMx7AOgABAAEAAqMAAATADF4ewMcAAQABAAKjAAAEwB9QHsCHAAEAAQACowAABMAaXB7AlwABAAEAAqMAAATAIQ4ewNcAAQABAAKjAAAEwAUGHgAAKQTQAAAAAAAA","answerfrom":"2001:dc3::35","querytime":247,"timestamp":1699367054.07936}}},"Hx/wBzZ7dxT0btOz2sXTow":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":246,"answerfrom":"2001:dc3::35","timestamp":1699367055.83036,"data":"oeyAAAABAAAADQAPA2F2NAVuc3RsZANjb20AABwAAcAWAAIAAQACowAAFAFkDGd0bGQtc2VydmVycwNuZXQAwBYAAgABAAKjAAAEAWbALcAWAAIAAQACowAABAFpwC3AFgACAAEAAqMAAAQBaMAtwBYAAgABAAKjAAAEAWLALcAWAAIAAQACowAABAFqwC3AFgACAAEAAqMAAAQBa8AtwBYAAgABAAKjAAAEAWzALcAWAAIAAQACowAABAFtwC3AFgACAAEAAqMAAAQBZcAtwBYAAgABAAKjAAAEAWHALcAWAAIAAQACowAABAFnwC3AFgACAAEAAqMAAAQBY8AtwLsAAQABAAKjAAAEwDdTHsCrAAEAAQACowAABMApoh7AmwABAAEAAqMAAATANLIewIsAAQABAAKjAAAEwDBPHsBbAAEAAQACowAABMArrB7AawABAAEAAqMAAATANnAewOsAAQABAAKjAAAEwCpdHsBLAAEAAQACowAABMAjMx7AywABAAEAAqMAAATADF4ewCsAAQABAAKjAAAEwB9QHsD7AAEAAQACowAABMAaXB7AewABAAEAAqMAAATAIQ4ewNsAAQABAAKjAAAEwAUGHsC7ABwAAQACowAAECABBQGx+QAAAAAAAAAAADAAACkE0AAAAAAAAA=="}}},"sXDcACKhm0MFS8wh6cIIDQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367054.38131,"answerfrom":"2001:dc3::35","querytime":244,"data":"vr2AAAABAAAADQAODWFzbmxvb2t1cC1uczIKem9uZW1hc3RlcgNuZXQAABwAAcAlAAIAAQACowAAEQFmDGd0bGQtc2VydmVyc8AlwCUAAgABAAKjAAAEAWXAPMAlAAIAAQACowAABAFkwDzAJQACAAEAAqMAAAQBYsA8wCUAAgABAAKjAAAEAWjAPMAlAAIAAQACowAABAFpwDzAJQACAAEAAqMAAAQBasA8wCUAAgABAAKjAAAEAWvAPMAlAAIAAQACowAABAFnwDzAJQACAAEAAqMAAAQBbcA8wCUAAgABAAKjAAAEAWPAPMAlAAIAAQACowAABAFhwDzAJQACAAEAAqMAAAQBbMA8wNcAAQABAAKjAAAEwDdTHsEHAAEAAQACowAABMApoh7AtwABAAEAAqMAAATANLIewKcAAQABAAKjAAAEwDBPHsCXAAEAAQACowAABMArrB7AhwABAAEAAqMAAATANnAewMcAAQABAAKjAAAEwCpdHsA6AAEAAQACowAABMAjMx7AVwABAAEAAqMAAATADF4ewGcAAQABAAKjAAAEwB9QHsDnAAEAAQACowAABMAaXB7AdwABAAEAAqMAAATAIQ4ewPcAAQABAAKjAAAEwAUGHgAAKQTQAAAAAAAA"}}},"GkYZ8zZvr859U6n0RWIQnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"6LOAAAABAAAADQAOATEBMAMxNjgDMTkyBm9yaWdpbglhc25sb29rdXAKem9uZW1hc3RlcgNuZXQAABAAAcA0AAIAAQACowAAEQFoDGd0bGQtc2VydmVyc8A0wDQAAgABAAKjAAAEAWrAS8A0AAIAAQACowAABAFiwEvANAACAAEAAqMAAAQBZMBLwDQAAgABAAKjAAAEAWfAS8A0AAIAAQACowAABAFmwEvANAACAAEAAqMAAAQBbMBLwDQAAgABAAKjAAAEAWPAS8A0AAIAAQACowAABAFpwEvANAACAAEAAqMAAAQBYcBLwDQAAgABAAKjAAAEAW3AS8A0AAIAAQACowAABAFlwEvANAACAAEAAqMAAAQBa8BLwPYAAQABAAKjAAAEwDdTHsC2AAEAAQACowAABMApoh7BFgABAAEAAqMAAATANLIewGYAAQABAAKjAAAEwDBPHsDWAAEAAQACowAABMArrB7ASQABAAEAAqMAAATANnAewJYAAQABAAKjAAAEwCpdHsCmAAEAAQACowAABMAjMx7BBgABAAEAAqMAAATADF4ewIYAAQABAAKjAAAEwB9QHsDGAAEAAQACowAABMAaXB7AdgABAAEAAqMAAATAIQ4ewOYAAQABAAKjAAAEwAUGHgAAKQTQAAAAAAAA","querytime":245,"answerfrom":"2001:dc3::35","timestamp":1699367056.48939}}},"vlHtIPwxJvH03j2ezw1DQw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"2001:dc3::35","querytime":241,"timestamp":1699367054.71827,"data":"GOuAAAABAAAADQAOAjQ2AjM2AzIyNgI5MQZvcmlnaW4JYXNubG9va3VwCnpvbmVtYXN0ZXIDbmV0AAAQAAHANQACAAEAAqMAABEBbQxndGxkLXNlcnZlcnPANcA1AAIAAQACowAABAFhwEzANQACAAEAAqMAAAQBZsBMwDUAAgABAAKjAAAEAWLATMA1AAIAAQACowAABAFqwEzANQACAAEAAqMAAAQBZMBMwDUAAgABAAKjAAAEAWPATMA1AAIAAQACowAABAFnwEzANQACAAEAAqMAAAQBaMBMwDUAAgABAAKjAAAEAWnATMA1AAIAAQACowAABAFlwEzANQACAAEAAqMAAAQBa8BMwDUAAgABAAKjAAAEAWzATMBKAAEAAQACowAABMA3Ux7BFwABAAEAAqMAAATAKaIewQcAAQABAAKjAAAEwDSyHsCXAAEAAQACowAABMAwTx7A5wABAAEAAqMAAATAK6wewNcAAQABAAKjAAAEwDZwHsDHAAEAAQACowAABMAqXR7AdwABAAEAAqMAAATAIzMewPcAAQABAAKjAAAEwAxeHsCnAAEAAQACowAABMAfUB7AtwABAAEAAqMAAATAGlwewIcAAQABAAKjAAAEwCEOHsBnAAEAAQACowAABMAFBh4AACkE0AAAAAAAAA=="}}},"M+X8v3VuYu/obcS9NzRAnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"2001:dc3::35","querytime":245,"timestamp":1699367053.284,"data":"WO6AAAABAAAADQAOATgBOAE4ATgGb3JpZ2luCWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwDAAAgABAAKjAAARAWIMZ3RsZC1zZXJ2ZXJzwDDAMAACAAEAAqMAAAQBY8BHwDAAAgABAAKjAAAEAWzAR8AwAAIAAQACowAABAFtwEfAMAACAAEAAqMAAAQBZsBHwDAAAgABAAKjAAAEAWvAR8AwAAIAAQACowAABAFowEfAMAACAAEAAqMAAAQBacBHwDAAAgABAAKjAAAEAWTAR8AwAAIAAQACowAABAFlwEfAMAACAAEAAqMAAAQBYcBHwDAAAgABAAKjAAAEAWfAR8AwAAIAAQACowAABAFqwEfAggABAAEAAqMAAATAN1MewHIAAQABAAKjAAAEwCmiHsCiAAEAAQACowAABMA0sh7BEgABAAEAAqMAAATAME8ewMIAAQABAAKjAAAEwCusHsCyAAEAAQACowAABMA2cB7BAgABAAEAAqMAAATAKl0ewJIAAQABAAKjAAAEwCMzHsDiAAEAAQACowAABMAMXh7A0gABAAEAAqMAAATAH1AewGIAAQABAAKjAAAEwBpcHsBFAAEAAQACowAABMAhDh7A8gABAAEAAqMAAATABQYeAAApBNAAAAAAAAA="}}},"f39y8o9yMy+2CJ3Tild/Hw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"p/CAAAABAAAABAAJA25zMgNuaWMCZnIAABwAAcAUAAIAAQACowAACAFmA2V4dMAQwBQAAgABAAKjAAAEAWfAKsAUAAIAAQACowAABAFkwBDAFAACAAEAAqMAAAQBZcAqwDwAAQABAAKjAAAEwgAkAcAoAAEAAQACowAABMKSai7AXAABAAEAAqMAAATBsJAWwEwAAQABAAKjAAAEwgAJAcA8ABwAAQACowAAECABBngATAAAAAAAAAAAAAHAKAAcAAEAAqMAABAgAQZ8EBAAEQAAAAAAAABTwFwAHAABAAKjAAAQKgANeAAAAQIBkwF2AUQAIsBMABwAAQACowAAECABBngADAAAAAAAAAAAAAEAACkE0AAAAAAAAA==","answerfrom":"2001:dc3::35","querytime":245,"timestamp":1699367053.81386}}},"hD/Z7LyYnh1x0WDPm6PVDw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367056.82034,"answerfrom":"2001:dc3::35","querytime":242,"data":"y8uAAAABAAAADQAOAzE3OAMxMTEDMTI0ATMGb3JpZ2luCWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwDYAAgABAAKjAAARAWUMZ3RsZC1zZXJ2ZXJzwDbANgACAAEAAqMAAAQBY8BNwDYAAgABAAKjAAAEAW3ATcA2AAIAAQACowAABAFnwE3ANgACAAEAAqMAAAQBacBNwDYAAgABAAKjAAAEAWTATcA2AAIAAQACowAABAFmwE3ANgACAAEAAqMAAAQBYcBNwDYAAgABAAKjAAAEAWzATcA2AAIAAQACowAABAFrwE3ANgACAAEAAqMAAAQBaMBNwDYAAgABAAKjAAAEAWLATcA2AAIAAQACowAABAFqwE3AeAABAAEAAqMAAATAN1MewNgAAQABAAKjAAAEwCmiHsDoAAEAAQACowAABMA0sh7BGAABAAEAAqMAAATAME8ewJgAAQABAAKjAAAEwCusHsD4AAEAAQACowAABMA2cB7AiAABAAEAAqMAAATAKl0ewLgAAQABAAKjAAAEwCMzHsBLAAEAAQACowAABMAMXh7AqAABAAEAAqMAAATAH1AewGgAAQABAAKjAAAEwBpcHsEIAAEAAQACowAABMAhDh7AyAABAAEAAqMAAATABQYeAAApBNAAAAAAAAA="}}},"9/xxo9P3GPiuofuKjPAr9Q":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367055.04347,"querytime":248,"answerfrom":"2001:dc3::35","data":"enWAAAABAAAADQALATABMwEwATABMgEwATABMAEwATABMAEwATABMAEwATABMAEwATABMAFlATMBYQFiATMBMAE1ATABMQEwATABMgdvcmlnaW42CWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwGkAAgABAAKjAAARAWMMZ3RsZC1zZXJ2ZXJzwGnAaQACAAEAAqMAAAQBbMCAwGkAAgABAAKjAAAEAWXAgMBpAAIAAQACowAABAFowIDAaQACAAEAAqMAAAQBYsCAwGkAAgABAAKjAAAEAWHAgMBpAAIAAQACowAABAFnwIDAaQACAAEAAqMAAAQBZsCAwGkAAgABAAKjAAAEAW3AgMBpAAIAAQACowAABAFkwIDAaQACAAEAAqMAAAQBasCAwGkAAgABAAKjAAAEAWvAgMBpAAIAAQACowAABAFpwIDBCwABAAEAAqMAAATAN1MewJsAAQABAAKjAAAEwCmiHsE7AAEAAQACowAABMA0sh7BKwABAAEAAqMAAATAME8ewUsAAQABAAKjAAAEwCusHsC7AAEAAQACowAABMA2cB7A6wABAAEAAqMAAATAKl0ewPsAAQABAAKjAAAEwCMzHsCrAAEAAQACowAABMAMXh7BGwABAAEAAqMAAATAH1AeAAApBNAAAAAAAAA="}}},"SwbApgSh9mA6B3tXP/GkUg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367053.55035,"querytime":248,"answerfrom":"2001:dc3::35","data":"v2+AAAABAAAABAAJA25zMgNuaWMCZnIAAAEAAcAUAAIAAQACowAABAFkwBDAFAACAAEAAqMAAAgBZwNleHTAEMAUAAIAAQACowAABAFmwDrAFAACAAEAAqMAAAQBZcA6wDgAAQABAAKjAAAEwgAkAcBMAAEAAQACowAABMKSai7AXAABAAEAAqMAAATBsJAWwCgAAQABAAKjAAAEwgAJAcA4ABwAAQACowAAECABBngATAAAAAAAAAAAAAHATAAcAAEAAqMAABAgAQZ8EBAAEQAAAAAAAABTwFwAHAABAAKjAAAQKgANeAAAAQIBkwF2AUQAIsAoABwAAQACowAAECABBngADAAAAAAAAAAAAAEAACkE0AAAAAAAAA=="}}},"oyAxWnDqjJc3r3vkZARqkw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367056.11199,"querytime":246,"answerfrom":"2001:dc3::35","data":"Cj+AAAABAAAADQAPAWMMZ3RsZC1zZXJ2ZXJzA25ldAAAHAABwBsAAgABAAKjAAAEAWXADsAbAAIAAQACowAABAFnwA7AGwACAAEAAqMAAAQBZsAOwBsAAgABAAKjAAAEAWHADsAbAAIAAQACowAABAFtwA7AGwACAAEAAqMAAAQBa8AOwBsAAgABAAKjAAACwAzAGwACAAEAAqMAAAQBZMAOwBsAAgABAAKjAAAEAWrADsAbAAIAAQACowAABAFiwA7AGwACAAEAAqMAAAQBaMAOwBsAAgABAAKjAAAEAWnADsAbAAIAAQACowAABAFswA7ADAAcAAEAAqMAABAgAQUDg+sAAAAAAAAAAAAwwAwAAQABAAKjAAAEwBpcHsBwAAEAAQACowAABMA3Ux7A7gABAAEAAqMAAATAKaIewIAAAQABAAKjAAAEwDSyHsCuAAEAAQACowAABMAwTx7A3gABAAEAAqMAAATAK6wewM4AAQABAAKjAAAEwDZwHsBAAAEAAQACowAABMAqXR7AUAABAAEAAqMAAATAIzMewDAAAQABAAKjAAAEwAxeHsCeAAEAAQACowAABMAfUB7AvgABAAEAAqMAAATAIQ4ewGAAAQABAAKjAAAEwAUGHgAAKQTQAAAAAAAA"}}},"yk3rcZr2wIk8FHE/pkf2kw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1699367055.30022,"querytime":239,"answerfrom":"2001:dc3::35","data":"2IyAAAABAAAADQAPAWMMZ3RsZC1zZXJ2ZXJzA25ldAAAAQABwBsAAgABAAKjAAAEAW3ADsAbAAIAAQACowAABAFqwA7AGwACAAEAAqMAAAQBZ8AOwBsAAgABAAKjAAAEAWbADsAbAAIAAQACowAABAFiwA7AGwACAAEAAqMAAAQBZMAOwBsAAgABAAKjAAAEAWvADsAbAAIAAQACowAABAFlwA7AGwACAAEAAqMAAALADMAbAAIAAQACowAABAFowA7AGwACAAEAAqMAAAQBYcAOwBsAAgABAAKjAAAEAWzADsAbAAIAAQACowAABAFpwA7ADAABAAEAAqMAAATAGlwewDAAAQABAAKjAAAEwDdTHsDeAAEAAQACowAABMApoh7AkAABAAEAAqMAAATANLIewEAAAQABAAKjAAAEwDBPHsDuAAEAAQACowAABMArrB7AvgABAAEAAqMAAATANnAewFAAAQABAAKjAAAEwCpdHsBgAAEAAQACowAABMAjMx7AoAABAAEAAqMAAATADF4ewIAAAQABAAKjAAAEwB9QHsBwAAEAAQACowAABMAhDh7AzgABAAEAAqMAAATABQYewAwAHAABAAKjAAAQIAEFA4PrAAAAAAAAAAAAMAAAKQTQAAAAAAAA"}}},"KoOHMqlriAzfyyS3tJUVhQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"ZbaAAAABAAAADQAPA2F2NAVuc3RsZANjb20AAAEAAcAWAAIAAQACowAAFAFtDGd0bGQtc2VydmVycwNuZXQAwBYAAgABAAKjAAAEAWbALcAWAAIAAQACowAABAFswC3AFgACAAEAAqMAAAQBaMAtwBYAAgABAAKjAAAEAWPALcAWAAIAAQACowAABAFiwC3AFgACAAEAAqMAAAQBZcAtwBYAAgABAAKjAAAEAWfALcAWAAIAAQACowAABAFhwC3AFgACAAEAAqMAAAQBasAtwBYAAgABAAKjAAAEAWTALcAWAAIAAQACowAABAFrwC3AFgACAAEAAqMAAAQBacAtwCsAAQABAAKjAAAEwDdTHsBbAAEAAQACowAABMApoh7A6wABAAEAAqMAAATANLIewMsAAQABAAKjAAAEwDBPHsD7AAEAAQACowAABMArrB7AawABAAEAAqMAAATANnAewKsAAQABAAKjAAAEwCpdHsBLAAEAAQACowAABMAjMx7AmwABAAEAAqMAAATADF4ewNsAAQABAAKjAAAEwB9QHsB7AAEAAQACowAABMAaXB7AiwABAAEAAqMAAATAIQ4ewLsAAQABAAKjAAAEwAUGHsArABwAAQACowAAECABBQGx+QAAAAAAAAAAADAAACkE0AAAAAAAAA==","answerfrom":"2001:dc3::35","querytime":246,"timestamp":1699367055.55718}}}} -m.root-servers.net 202.12.27.33 {} -a.gtld-servers.net 192.5.6.30 {} -i.root-servers.net 2001:07fe:0000:0000:0000:0000:0000:0053 {} -i.root-servers.net 192.36.148.17 {} g.gtld-servers.net 192.42.93.30 {} +nsa.dnsnode.net 2a01:03f1:0032:0000:0000:0000:0000:0053 {} +nsa.dnsnode.net 194.58.192.32 {} k.gtld-servers.net 192.52.178.30 {} -e.gtld-servers.net 192.12.94.30 {} +nsp.dnsnode.net 2a01:03f1:3032:0000:0000:0000:0000:0053 {} +nsp.dnsnode.net 194.58.198.32 {} +ns6.ext.nic.fr 130.59.31.29 {"SwbApgSh9mA6B3tXP/GkUg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"130.59.31.29","querytime":22,"data":"Tq6EAAABAAEAAAABA25zMgNuaWMCZnIAAAEAAcAMAAEAAQACowAABMBdAAQAACkE0AAAAAAAAA==","timestamp":1689779440.0556}}},"f39y8o9yMy+2CJ3Tild/Hw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"130.59.31.29","querytime":22,"data":"JxqEAAABAAEAAAABA25zMgNuaWMCZnIAABwAAcAMABwAAQACowAAECABBmAwBQABAAAAAAABAAIAACkE0AAAAAAAAA==","timestamp":1689779440.09603}}}} +ns6.ext.nic.fr 2001:0620:0000:00ff:0000:0000:0000:002f {"SwbApgSh9mA6B3tXP/GkUg":null,"f39y8o9yMy+2CJ3Tild/Hw":null} +ns1.ext.nic.fr 193.51.208.13 {} +a.root-servers.net 198.41.0.4 {} +a.root-servers.net 2001:0503:ba3e:0000:0000:0000:0002:0030 {} +m.gtld-servers.net 192.55.83.30 {"oyAxWnDqjJc3r3vkZARqkw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.55.83.30","data":"fGyAAAABAAAABAABAWMMZ3RsZC1zZXJ2ZXJzA25ldAAAHAABwA4AAgABAAKjAAAPA2F2MQVuc3RsZANjb20AwA4AAgABAAKjAAAGA2F2MsA0wA4AAgABAAKjAAAGA2F2M8A0wA4AAgABAAKjAAAGA2F2NMA0AAApEAAAAAAAAAA=","querytime":16,"timestamp":1689779440.53767}}},"ioaSLvyfzM2idj7aWcQm4g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.55.83.30","data":"p/WAAAABAAAABAAHDWFzbmxvb2t1cC1uczIKem9uZW1hc3RlcgNuZXQAAAEAAcAaAAIAAQACowAADANuczIDbmljAmZyAMAaAAIAAQACowAADgNuc3AHZG5zbm9kZcAlwBoAAgABAAKjAAAGA25zdcBWwBoAAgABAAKjAAAGA25zYcBWwFIAAQABAAKjAAAEwjrGIMBSABwAAQACowAAECoBA/EwMgAAAAAAAAAAAFPAbAABAAEAAqMAAAS5KoliwGwAHAABAAKjAAAQKgED8AQAAAAAAAAAAAAAMsB+AAEAAQACowAABMI6wCDAfgAcAAEAAqMAABAqAQPxADIAAAAAAAAAAABTAAApEAAAAAAAAAA=","querytime":16,"timestamp":1689779440.138}}},"yk3rcZr2wIk8FHE/pkf2kw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":16,"data":"eLaAAAABAAAABAABAWMMZ3RsZC1zZXJ2ZXJzA25ldAAAAQABwA4AAgABAAKjAAAPA2F2MQVuc3RsZANjb20AwA4AAgABAAKjAAAGA2F2MsA0wA4AAgABAAKjAAAGA2F2M8A0wA4AAgABAAKjAAAGA2F2NMA0AAApEAAAAAAAAAA=","timestamp":1689779440.40111,"answerfrom":"192.55.83.30"}}},"Hx/wBzZ7dxT0btOz2sXTow":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1689779440.47718,"querytime":17,"data":"FGWAAAABAAAABAAJA2F2NAVuc3RsZANjb20AABwAAcAQAAIAAQACowAABgNhdjHAEMAQAAIAAQACowAABgNhdjLAEMAQAAIAAQACowAABgNhdjPAEMAQAAIAAQACowAAAsAMwCsAAQABAAKjAAAEwCqxHsArABwAAQACowAAECABBQABJAAAAAAAAAAAADDAPQABAAEAAqMAAATAKrIewD0AHAABAAKjAAAQIAEFAAElAAAAAAAAAAAAMMBPAAEAAQACowAABMBShR7ATwAcAAEAAqMAABAgAQUAASYAAAAAAAAAAAAwwAwAAQABAAKjAAAEwFKGHsAMABwAAQACowAAECABBQABJwAAAAAAAAAAADAAACkQAAAAAAAAAA==","answerfrom":"192.55.83.30"}}},"sXDcACKhm0MFS8wh6cIIDQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.55.83.30","data":"+12AAAABAAAABAAHDWFzbmxvb2t1cC1uczIKem9uZW1hc3RlcgNuZXQAABwAAcAaAAIAAQACowAADANuczIDbmljAmZyAMAaAAIAAQACowAADgNuc3AHZG5zbm9kZcAlwBoAAgABAAKjAAAGA25zdcBWwBoAAgABAAKjAAAGA25zYcBWwFIAAQABAAKjAAAEwjrGIMBSABwAAQACowAAECoBA/EwMgAAAAAAAAAAAFPAbAABAAEAAqMAAAS5KoliwGwAHAABAAKjAAAQKgED8AQAAAAAAAAAAAAAMsB+AAEAAQACowAABMI6wCDAfgAcAAEAAqMAABAqAQPxADIAAAAAAAAAAABTAAApEAAAAAAAAAA=","querytime":16,"timestamp":1689779440.20086}}},"vlHtIPwxJvH03j2ezw1DQw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.55.83.30","timestamp":1689779440.30361,"querytime":16,"data":"jzKAAAABAAAABAAHAjQ2AjM2AzIyNgI5MQZvcmlnaW4JYXNubG9va3VwCnpvbmVtYXN0ZXIDbmV0AAAQAAHAKgACAAEAAqMAAAwDbnMyA25pYwJmcgDAKgACAAEAAqMAAA4DbnNwB2Ruc25vZGXANcAqAAIAAQACowAABgNuc3XAZsAqAAIAAQACowAABgNuc2HAZsBiAAEAAQACowAABMI6xiDAYgAcAAEAAqMAABAqAQPxMDIAAAAAAAAAAABTwHwAAQABAAKjAAAEuSqJYsB8ABwAAQACowAAECoBA/AEAAAAAAAAAAAAADLAjgABAAEAAqMAAATCOsAgwI4AHAABAAKjAAAQKgED8QAyAAAAAAAAAAAAUwAAKRAAAAAAAAAA"}}},"M+X8v3VuYu/obcS9NzRAnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.55.83.30","querytime":16,"data":"qJaAAAABAAAABAAHATgBOAE4ATgGb3JpZ2luCWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwCUAAgABAAKjAAAMA25zMgNuaWMCZnIAwCUAAgABAAKjAAAOA25zcAdkbnNub2RlwDDAJQACAAEAAqMAAAYDbnN1wGHAJQACAAEAAqMAAAYDbnNhwGHAXQABAAEAAqMAAATCOsYgwF0AHAABAAKjAAAQKgED8TAyAAAAAAAAAAAAU8B3AAEAAQACowAABLkqiWLAdwAcAAEAAqMAABAqAQPwBAAAAAAAAAAAAAAywIkAAQABAAKjAAAEwjrAIMCJABwAAQACowAAECoBA/EAMgAAAAAAAAAAAFMAACkQAAAAAAAAAA==","timestamp":1689779440.02131}}},"KoOHMqlriAzfyyS3tJUVhQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.55.83.30","timestamp":1689779440.42942,"data":"jZmAAAABAAAABAAJA2F2NAVuc3RsZANjb20AAAEAAcAQAAIAAQACowAABgNhdjHAEMAQAAIAAQACowAABgNhdjLAEMAQAAIAAQACowAABgNhdjPAEMAQAAIAAQACowAAAsAMwCsAAQABAAKjAAAEwCqxHsArABwAAQACowAAECABBQABJAAAAAAAAAAAADDAPQABAAEAAqMAAATAKrIewD0AHAABAAKjAAAQIAEFAAElAAAAAAAAAAAAMMBPAAEAAQACowAABMBShR7ATwAcAAEAAqMAABAgAQUAASYAAAAAAAAAAAAwwAwAAQABAAKjAAAEwFKGHsAMABwAAQACowAAECABBQABJwAAAAAAAAAAADAAACkQAAAAAAAAAA==","querytime":16}}},"GkYZ8zZvr859U6n0RWIQnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.55.83.30","querytime":16,"data":"Jb+AAAABAAAABAAHATEBMAMxNjgDMTkyBm9yaWdpbglhc25sb29rdXAKem9uZW1hc3RlcgNuZXQAABAAAcApAAIAAQACowAADANuczIDbmljAmZyAMApAAIAAQACowAADgNuc3AHZG5zbm9kZcA0wCkAAgABAAKjAAAGA25zdcBlwCkAAgABAAKjAAAGA25zYcBlwGEAAQABAAKjAAAEwjrGIMBhABwAAQACowAAECoBA/EwMgAAAAAAAAAAAFPAewABAAEAAqMAAAS5KoliwHsAHAABAAKjAAAQKgED8AQAAAAAAAAAAAAAMsCNAAEAAQACowAABMI6wCDAjQAcAAEAAqMAABAqAQPxADIAAAAAAAAAAABTAAApEAAAAAAAAAA=","timestamp":1689779440.67497}}}} +m.gtld-servers.net 2001:0501:b1f9:0000:0000:0000:0000:0030 {"KoOHMqlriAzfyyS3tJUVhQ":null,"ioaSLvyfzM2idj7aWcQm4g":null,"oyAxWnDqjJc3r3vkZARqkw":null,"Hx/wBzZ7dxT0btOz2sXTow":null,"sXDcACKhm0MFS8wh6cIIDQ":null} d.gtld-servers.net 192.31.80.30 {} +h.gtld-servers.net 192.54.112.30 {} +i.root-servers.net 192.36.148.17 {} +i.root-servers.net 2001:07fe:0000:0000:0000:0000:0000:0053 {} +av4.nstld.com 2001:0500:0127:0000:0000:0000:0000:0030 {"Hx/wBzZ7dxT0btOz2sXTow":null,"KoOHMqlriAzfyyS3tJUVhQ":null,"oyAxWnDqjJc3r3vkZARqkw":null} +av4.nstld.com 192.82.134.30 {"yk3rcZr2wIk8FHE/pkf2kw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.82.134.30","querytime":12,"data":"houEAAABAAEABAABAWMMZ3RsZC1zZXJ2ZXJzA25ldAAAAQABwAwAAQABAAFRgAAEwBpcHsAOAAIAAQABUYAADwNhdjQFbnN0bGQDY29tAMAOAAIAAQABUYAABgNhdjLARMAOAAIAAQABUYAABgNhdjPARMAOAAIAAQABUYAABgNhdjHARAAAKRAAAAAAAAAA","timestamp":1689779440.51302}}},"Hx/wBzZ7dxT0btOz2sXTow":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"querytime":14,"data":"JO+EAAABAAEABAAIA2F2NAVuc3RsZANjb20AABwAAcAMABwAAQAAASwAECABBQABJwAAAAAAAAAAADDAEAACAAEAAVGAAALADMAQAAIAAQABUYAABgNhdjLAEMAQAAIAAQABUYAABgNhdjPAEMAQAAIAAQABUYAABgNhdjHAEMAMAAEAAQAAASwABMBShh7AVQABAAEAAAEsAATAKrIewFUAHAABAAABLAAQIAEFAAElAAAAAAAAAAAAMMBnAAEAAQAAASwABMBShR7AZwAcAAEAAAEsABAgAQUAASYAAAAAAAAAAAAwwHkAAQABAAABLAAEwCqxHsB5ABwAAQAAASwAECABBQABJAAAAAAAAAAAADAAACkQAAAAAAAAAA==","timestamp":1689779440.49684,"answerfrom":"192.82.134.30"}}},"KoOHMqlriAzfyyS3tJUVhQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.82.134.30","data":"UoeEAAABAAEABAAIA2F2NAVuc3RsZANjb20AAAEAAcAMAAEAAQAAASwABMBShh7AEAACAAEAAVGAAALADMAQAAIAAQABUYAABgNhdjLAEMAQAAIAAQABUYAABgNhdjPAEMAQAAIAAQABUYAABgNhdjHAEMAMABwAAQAAASwAECABBQABJwAAAAAAAAAAADDASQABAAEAAAEsAATAKrIewEkAHAABAAABLAAQIAEFAAElAAAAAAAAAAAAMMBbAAEAAQAAASwABMBShR7AWwAcAAEAAAEsABAgAQUAASYAAAAAAAAAAAAwwG0AAQABAAABLAAEwCqxHsBtABwAAQAAASwAECABBQABJAAAAAAAAAAAADAAACkQAAAAAAAAAA==","querytime":13,"timestamp":1689779440.44882}}},"oyAxWnDqjJc3r3vkZARqkw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"192.82.134.30","data":"g7iEAAABAAEABAABAWMMZ3RsZC1zZXJ2ZXJzA25ldAAAHAABwAwAHAABAAFRgAAQIAEFA4PrAAAAAAAAAAAAMMAOAAIAAQABUYAADwNhdjQFbnN0bGQDY29tAMAOAAIAAQABUYAABgNhdjLAUMAOAAIAAQABUYAABgNhdjPAUMAOAAIAAQABUYAABgNhdjHAUAAAKRAAAAAAAAAA","querytime":14,"timestamp":1689779440.55613}}}} +l.root-servers.net 199.7.83.42 {} +l.root-servers.net 2001:0500:009f:0000:0000:0000:0000:0042 {} +av3.nstld.com 192.82.133.30 {} +av3.nstld.com 2001:0500:0126:0000:0000:0000:0000:0030 {} +j.root-servers.net 192.58.128.30 {} +j.root-servers.net 2001:0503:0c27:0000:0000:0000:0002:0030 {} +b.gtld-servers.net 192.33.14.30 {} +e.gtld-servers.net 192.12.94.30 {} +g.root-servers.net 192.112.36.4 {} +g.root-servers.net 2001:0500:0012:0000:0000:0000:0000:0d0d {} +f.root-servers.net 192.5.5.241 {} +f.root-servers.net 2001:0500:002f:0000:0000:0000:0000:000f {} +av1.nstld.com 192.42.177.30 {} +av1.nstld.com 2001:0500:0124:0000:0000:0000:0000:0030 {} +av2.nstld.com 2001:0500:0125:0000:0000:0000:0000:0030 {} +av2.nstld.com 192.42.178.30 {} +g.ext.nic.fr 2001:0678:004c:0000:0000:0000:0000:0001 {"f39y8o9yMy+2CJ3Tild/Hw":null,"SwbApgSh9mA6B3tXP/GkUg":null} +g.ext.nic.fr 194.0.36.1 {"f39y8o9yMy+2CJ3Tild/Hw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"+DmAAAABAAAABQAKA25zMgNuaWMCZnIAABwAAcAQAAIAAQAADhAABgNuczPAEMAQAAIAAQAADhAABgNuczHAEMAQAAIAAQAADhAAAsAMwBAAAgABAAAOEAAKA25zMQNleHTAEMAQAAIAAQAADhAABgNuczbAXsAMABwAAQAADhAAECABBmAwBQABAAAAAAABAALADAABAAEAAA4QAATAXQAEwHAAAQABAAAOEAAEgjsfHcAoAAEAAQAADhAABMCGADHAOgABAAEAAA4QAATAhgQBwFoAAQABAAAOEAAEwTPQDcBwABwAAQAADhAAECABBiAAAAD/AAAAAAAAAC/AKAAcAAEAAA4QABAgAQZgMAYAAQAAAAAAAQABwDoAHAABAAAOEAAQIAEGfCIYAAIAAAAAAAQAAQAAKRAAAAAAAAAA","querytime":5,"timestamp":1689779440.08875,"answerfrom":"194.0.36.1"}}},"SwbApgSh9mA6B3tXP/GkUg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1689779440.04804,"querytime":5,"data":"CuyAAAABAAAABQAKA25zMgNuaWMCZnIAAAEAAcAQAAIAAQAADhAABgNuczPAEMAQAAIAAQAADhAABgNuczHAEMAQAAIAAQAADhAACgNuczEDZXh0wBDAEAACAAEAAA4QAALADMAQAAIAAQAADhAABgNuczbAUMAMAAEAAQAADhAABMBdAATAcAABAAEAAA4QAASCOx8dwCgAAQABAAAOEAAEwIYAMcA6AAEAAQAADhAABMCGBAHATAABAAEAAA4QAATBM9ANwAwAHAABAAAOEAAQIAEGYDAFAAEAAAAAAAEAAsBwABwAAQAADhAAECABBiAAAAD/AAAAAAAAAC/AKAAcAAEAAA4QABAgAQZgMAYAAQAAAAAAAQABwDoAHAABAAAOEAAQIAEGfCIYAAIAAAAAAAQAAQAAKRAAAAAAAAAA","answerfrom":"194.0.36.1"}}}} +f.ext.nic.fr 194.146.106.46 {} +f.ext.nic.fr 2001:067c:1010:0011:0000:0000:0000:0053 {} +c.gtld-servers.net 2001:0503:83eb:0000:0000:0000:0000:0030 {} +c.gtld-servers.net 192.26.92.30 {"9/xxo9P3GPiuofuKjPAr9Q":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1689779440.57301,"data":"GgWAAAABAAAABAAHATABMwEwATABMgEwATABMAEwATABMAEwATABMAEwATABMAEwATABMAFlATMBYQFiATMBMAE1ATABMQEwATABMgdvcmlnaW42CWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwF4AAgABAAKjAAAMA25zMgNuaWMCZnIAwF4AAgABAAKjAAAOA25zcAdkbnNub2RlwGnAXgACAAEAAqMAAAYDbnN1wJrAXgACAAEAAqMAAAYDbnNhwJrAlgABAAEAAqMAAATCOsYgwJYAHAABAAKjAAAQKgED8TAyAAAAAAAAAAAAU8CwAAEAAQACowAABLkqiWLAsAAcAAEAAqMAABAqAQPwBAAAAAAAAAAAAAAywMIAAQABAAKjAAAEwjrAIMDCABwAAQACowAAECoBA/EAMgAAAAAAAAAAAFMAACkQAAAAAAAAAA==","querytime":22,"answerfrom":"192.26.92.30"}}}} +i.gtld-servers.net 192.43.172.30 {} +h.root-servers.net 2001:0500:0001:0000:0000:0000:0000:0053 {} +h.root-servers.net 198.97.190.53 {} +ns3.nic.fr 2001:0660:3006:0001:0000:0000:0001:0001 {} +ns3.nic.fr 192.134.0.49 {} +b.root-servers.net 2001:0500:0200:0000:0000:0000:0000:000b {} +b.root-servers.net 199.9.14.201 {} +j.gtld-servers.net 192.48.79.30 {} +l.gtld-servers.net 192.41.162.30 {} +a.gtld-servers.net 192.5.6.30 {} +nsu.dnsnode.net 185.42.137.98 {"sXDcACKhm0MFS8wh6cIIDQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"185.42.137.98","data":"/lSEAAABAAEABAABDWFzbmxvb2t1cC1uczIKem9uZW1hc3RlcgNuZXQAABwAAcAMABwAAQAADhAAECABBnwSTHMSAAAAAAAAAHDAGgACAAEAAA4QAAwDbnMyA25pYwJmcgDAGgACAAEAAA4QAA4DbnNhB2Ruc25vZGXAJcAaAAIAAQAADhAABgNuc3DAcsAaAAIAAQAADhAABgNuc3XAcgAAKRAAAAAAAAAA","querytime":34,"timestamp":1689779440.2185}}},"ioaSLvyfzM2idj7aWcQm4g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1689779440.15697,"querytime":33,"data":"FjmEAAABAAEABAABDWFzbmxvb2t1cC1uczIKem9uZW1hc3RlcgNuZXQAAAEAAcAMAAEAAQAADhAABC2bYEbAGgACAAEAAA4QAAwDbnMyA25pYwJmcgDAGgACAAEAAA4QAA4DbnNhB2Ruc25vZGXAJcAaAAIAAQAADhAABgNuc3DAZsAaAAIAAQAADhAABgNuc3XAZgAAKRAAAAAAAAAA","answerfrom":"185.42.137.98"}}}} +nsu.dnsnode.net 2a01:03f0:0400:0000:0000:0000:0000:0032 {"sXDcACKhm0MFS8wh6cIIDQ":null,"ioaSLvyfzM2idj7aWcQm4g":null} +k.root-servers.net 193.0.14.129 {} +k.root-servers.net 2001:07fd:0000:0000:0000:0000:0000:0001 {} +m.root-servers.net 202.12.27.33 {"GkYZ8zZvr859U6n0RWIQnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1689779440.66542,"querytime":7,"data":"izGAAAABAAAADQAOATEBMAMxNjgDMTkyBm9yaWdpbglhc25sb29rdXAKem9uZW1hc3RlcgNuZXQAABAAAcA0AAIAAQACowAAEQFqDGd0bGQtc2VydmVyc8A0wDQAAgABAAKjAAAEAWbAS8A0AAIAAQACowAABAFhwEvANAACAAEAAqMAAAQBZMBLwDQAAgABAAKjAAAEAWzAS8A0AAIAAQACowAABAFjwEvANAACAAEAAqMAAAQBZcBLwDQAAgABAAKjAAAEAWfAS8A0AAIAAQACowAABAFpwEvANAACAAEAAqMAAAQBYsBLwDQAAgABAAKjAAAEAWjAS8A0AAIAAQACowAABAFrwEvANAACAAEAAqMAAAQBbcBLwRYAAQABAAKjAAAEwDdTHsCWAAEAAQACowAABMApoh7BBgABAAEAAqMAAATANLIewEkAAQABAAKjAAAEwDBPHsDWAAEAAQACowAABMArrB7A9gABAAEAAqMAAATANnAewMYAAQABAAKjAAAEwCpdHsBmAAEAAQACowAABMAjMx7AtgABAAEAAqMAAATADF4ewIYAAQABAAKjAAAEwB9QHsCmAAEAAQACowAABMAaXB7A5gABAAEAAqMAAATAIQ4ewHYAAQABAAKjAAAEwAUGHgAAKQTQAAAAAAAA","answerfrom":"202.12.27.33"}}},"9/xxo9P3GPiuofuKjPAr9Q":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1689779440.37906,"data":"P/uAAAABAAAADQALATABMwEwATABMgEwATABMAEwATABMAEwATABMAEwATABMAEwATABMAFlATMBYQFiATMBMAE1ATABMQEwATABMgdvcmlnaW42CWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwGkAAgABAAKjAAARAWQMZ3RsZC1zZXJ2ZXJzwGnAaQACAAEAAqMAAAQBa8CAwGkAAgABAAKjAAAEAWHAgMBpAAIAAQACowAABAFnwIDAaQACAAEAAqMAAAQBZcCAwGkAAgABAAKjAAAEAWPAgMBpAAIAAQACowAABAFiwIDAaQACAAEAAqMAAAQBZsCAwGkAAgABAAKjAAAEAWzAgMBpAAIAAQACowAABAFowIDAaQACAAEAAqMAAAQBasCAwGkAAgABAAKjAAAEAW3AgMBpAAIAAQACowAABAFpwIDBOwABAAEAAqMAAATAN1MewQsAAQABAAKjAAAEwCmiHsCbAAEAAQACowAABMA0sh7BKwABAAEAAqMAAATAME8ewUsAAQABAAKjAAAEwCusHsEbAAEAAQACowAABMA2cB7AuwABAAEAAqMAAATAKl0ewPsAAQABAAKjAAAEwCMzHsDLAAEAAQACowAABMAMXh7AfgABAAEAAqMAAATAH1AeAAApBNAAAAAAAAA=","querytime":7,"answerfrom":"202.12.27.33"}}},"sXDcACKhm0MFS8wh6cIIDQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"202.12.27.33","querytime":6,"data":"uFWAAAABAAAADQAODWFzbmxvb2t1cC1uczIKem9uZW1hc3RlcgNuZXQAABwAAcAlAAIAAQACowAAEQFiDGd0bGQtc2VydmVyc8AlwCUAAgABAAKjAAAEAW3APMAlAAIAAQACowAABAFlwDzAJQACAAEAAqMAAAQBYcA8wCUAAgABAAKjAAAEAWrAPMAlAAIAAQACowAABAFpwDzAJQACAAEAAqMAAAQBY8A8wCUAAgABAAKjAAAEAWTAPMAlAAIAAQACowAABAFowDzAJQACAAEAAqMAAAQBZsA8wCUAAgABAAKjAAAEAWfAPMAlAAIAAQACowAABAFrwDzAJQACAAEAAqMAAAQBbMA8wFcAAQABAAKjAAAEwDdTHsEHAAEAAQACowAABMApoh7A9wABAAEAAqMAAATANLIewIcAAQABAAKjAAAEwDBPHsCXAAEAAQACowAABMArrB7AxwABAAEAAqMAAATANnAewOcAAQABAAKjAAAEwCpdHsDXAAEAAQACowAABMAjMx7AZwABAAEAAqMAAATADF4ewLcAAQABAAKjAAAEwB9QHsCnAAEAAQACowAABMAaXB7AOgABAAEAAqMAAATAIQ4ewHcAAQABAAKjAAAEwAUGHgAAKQTQAAAAAAAA","timestamp":1689779440.19181}}},"yk3rcZr2wIk8FHE/pkf2kw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1689779440.39132,"data":"RwSAAAABAAAADQAPAWMMZ3RsZC1zZXJ2ZXJzA25ldAAAAQABwBsAAgABAAKjAAAEAWfADsAbAAIAAQACowAABAFowA7AGwACAAEAAqMAAAQBasAOwBsAAgABAAKjAAAEAWzADsAbAAIAAQACowAABAFrwA7AGwACAAEAAqMAAAQBYsAOwBsAAgABAAKjAAAEAWHADsAbAAIAAQACowAABAFmwA7AGwACAAEAAqMAAAQBZMAOwBsAAgABAAKjAAAEAWnADsAbAAIAAQACowAABAFlwA7AGwACAAEAAqMAAALADMAbAAIAAQACowAABAFtwA7ADAABAAEAAqMAAATAGlwewO4AAQABAAKjAAAEwDdTHsBgAAEAAQACowAABMApoh7AcAABAAEAAqMAAATANLIewFAAAQABAAKjAAAEwDBPHsDAAAEAAQACowAABMArrB7AQAABAAEAAqMAAATANnAewDAAAQABAAKjAAAEwCpdHsCgAAEAAQACowAABMAjMx7A0AABAAEAAqMAAATADF4ewLAAAQABAAKjAAAEwB9QHsCAAAEAAQACowAABMAhDh7AkAABAAEAAqMAAATABQYewAwAHAABAAKjAAAQIAEFA4PrAAAAAAAAAAAAMAAAKQTQAAAAAAAA","querytime":7,"answerfrom":"202.12.27.33"}}},"oyAxWnDqjJc3r3vkZARqkw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"202.12.27.33","timestamp":1689779440.52816,"data":"GKCAAAABAAAADQAPAWMMZ3RsZC1zZXJ2ZXJzA25ldAAAHAABwBsAAgABAAKjAAAEAWzADsAbAAIAAQACowAABAFhwA7AGwACAAEAAqMAAALADMAbAAIAAQACowAABAFowA7AGwACAAEAAqMAAAQBYsAOwBsAAgABAAKjAAAEAWXADsAbAAIAAQACowAABAFkwA7AGwACAAEAAqMAAAQBZsAOwBsAAgABAAKjAAAEAW3ADsAbAAIAAQACowAABAFnwA7AGwACAAEAAqMAAAQBasAOwBsAAgABAAKjAAAEAWvADsAbAAIAAQACowAABAFpwA7ADAAcAAEAAqMAABAgAQUDg+sAAAAAAAAAAAAwwAwAAQABAAKjAAAEwBpcHsCuAAEAAQACowAABMA3Ux7AMAABAAEAAqMAAATAKaIewN4AAQABAAKjAAAEwDSyHsDOAAEAAQACowAABMAwTx7A7gABAAEAAqMAAATAK6wewF4AAQABAAKjAAAEwDZwHsC+AAEAAQACowAABMAqXR7AngABAAEAAqMAAATAIzMewH4AAQABAAKjAAAEwAxeHsCOAAEAAQACowAABMAfUB7AbgABAAEAAqMAAATAIQ4ewEAAAQABAAKjAAAEwAUGHgAAKQTQAAAAAAAA","querytime":6}}},"ioaSLvyfzM2idj7aWcQm4g":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"202.12.27.33","timestamp":1689779440.12806,"querytime":6,"data":"54KAAAABAAAADQAODWFzbmxvb2t1cC1uczIKem9uZW1hc3RlcgNuZXQAAAEAAcAlAAIAAQACowAAEQFkDGd0bGQtc2VydmVyc8AlwCUAAgABAAKjAAAEAWHAPMAlAAIAAQACowAABAFrwDzAJQACAAEAAqMAAAQBYsA8wCUAAgABAAKjAAAEAW3APMAlAAIAAQACowAABAFswDzAJQACAAEAAqMAAAQBZ8A8wCUAAgABAAKjAAAEAWrAPMAlAAIAAQACowAABAFpwDzAJQACAAEAAqMAAAQBZsA8wCUAAgABAAKjAAAEAWXAPMAlAAIAAQACowAABAFowDzAJQACAAEAAqMAAAQBY8A8wIcAAQABAAKjAAAEwDdTHsCXAAEAAQACowAABMApoh7AZwABAAEAAqMAAATANLIewLcAAQABAAKjAAAEwDBPHsDHAAEAAQACowAABMArrB7A9wABAAEAAqMAAATANnAewKcAAQABAAKjAAAEwCpdHsDXAAEAAQACowAABMAjMx7A5wABAAEAAqMAAATADF4ewDoAAQABAAKjAAAEwB9QHsEHAAEAAQACowAABMAaXB7AdwABAAEAAqMAAATAIQ4ewFcAAQABAAKjAAAEwAUGHgAAKQTQAAAAAAAA"}}},"f39y8o9yMy+2CJ3Tild/Hw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"202.12.27.33","querytime":7,"data":"Rl+AAAABAAAABAAJA25zMgNuaWMCZnIAABwAAcAUAAIAAQACowAACAFlA2V4dMAQwBQAAgABAAKjAAAEAWfAKsAUAAIAAQACowAABAFkwBDAFAACAAEAAqMAAAQBZsAqwDwAAQABAAKjAAAEwgAkAcBcAAEAAQACowAABMKSai7AKAABAAEAAqMAAATBsJAWwEwAAQABAAKjAAAEwgAJAcA8ABwAAQACowAAECABBngATAAAAAAAAAAAAAHAXAAcAAEAAqMAABAgAQZ8EBAAEQAAAAAAAABTwCgAHAABAAKjAAAQKgANeAAAAQIBkwF2AUQAIsBMABwAAQACowAAECABBngADAAAAAAAAAAAAAEAACkE0AAAAAAAAA==","timestamp":1689779440.07941}}},"M+X8v3VuYu/obcS9NzRAnA":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"202.12.27.33","timestamp":1689779440.01037,"querytime":8,"data":"CY+AAAABAAAADQAOATgBOAE4ATgGb3JpZ2luCWFzbmxvb2t1cAp6b25lbWFzdGVyA25ldAAAEAABwDAAAgABAAKjAAARAWQMZ3RsZC1zZXJ2ZXJzwDDAMAACAAEAAqMAAAQBZcBHwDAAAgABAAKjAAAEAWHAR8AwAAIAAQACowAABAFrwEfAMAACAAEAAqMAAAQBYsBHwDAAAgABAAKjAAAEAW3AR8AwAAIAAQACowAABAFswEfAMAACAAEAAqMAAAQBY8BHwDAAAgABAAKjAAAEAWjAR8AwAAIAAQACowAABAFmwEfAMAACAAEAAqMAAAQBacBHwDAAAgABAAKjAAAEAWrAR8AwAAIAAQACowAABAFnwEfAogABAAEAAqMAAATAN1MewLIAAQABAAKjAAAEwCmiHsCCAAEAAQACowAABMA0sh7BAgABAAEAAqMAAATAME8ewPIAAQABAAKjAAAEwCusHsDSAAEAAQACowAABMA2cB7BEgABAAEAAqMAAATAKl0ewOIAAQABAAKjAAAEwCMzHsBiAAEAAQACowAABMAMXh7ARQABAAEAAqMAAATAH1AewMIAAQABAAKjAAAEwBpcHsCSAAEAAQACowAABMAhDh7AcgABAAEAAqMAAATABQYeAAApBNAAAAAAAAA="}}},"vlHtIPwxJvH03j2ezw1DQw":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"data":"3ZOAAAABAAAADQAOAjQ2AjM2AzIyNgI5MQZvcmlnaW4JYXNubG9va3VwCnpvbmVtYXN0ZXIDbmV0AAAQAAHANQACAAEAAqMAABEBZwxndGxkLXNlcnZlcnPANcA1AAIAAQACowAABAFiwEzANQACAAEAAqMAAAQBZcBMwDUAAgABAAKjAAAEAWrATMA1AAIAAQACowAABAFrwEzANQACAAEAAqMAAAQBZMBMwDUAAgABAAKjAAAEAWPATMA1AAIAAQACowAABAFowEzANQACAAEAAqMAAAQBZsBMwDUAAgABAAKjAAAEAWnATMA1AAIAAQACowAABAFhwEzANQACAAEAAqMAAAQBbMBMwDUAAgABAAKjAAAEAW3ATMEXAAEAAQACowAABMA3Ux7BBwABAAEAAqMAAATAKaIewJcAAQABAAKjAAAEwDSyHsCHAAEAAQACowAABMAwTx7A5wABAAEAAqMAAATAK6wewMcAAQABAAKjAAAEwDZwHsBKAAEAAQACowAABMAqXR7A1wABAAEAAqMAAATAIzMewHcAAQABAAKjAAAEwAxeHsCnAAEAAQACowAABMAfUB7AtwABAAEAAqMAAATAGlwewGcAAQABAAKjAAAEwCEOHsD3AAEAAQACowAABMAFBh4AACkE0AAAAAAAAA==","querytime":6,"timestamp":1689779440.29426,"answerfrom":"202.12.27.33"}}},"KoOHMqlriAzfyyS3tJUVhQ":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"202.12.27.33","data":"DV+AAAABAAAADQAPA2F2NAVuc3RsZANjb20AAAEAAcAWAAIAAQACowAAFAFjDGd0bGQtc2VydmVycwNuZXQAwBYAAgABAAKjAAAEAWXALcAWAAIAAQACowAABAFrwC3AFgACAAEAAqMAAAQBYcAtwBYAAgABAAKjAAAEAWjALcAWAAIAAQACowAABAFtwC3AFgACAAEAAqMAAAQBZsAtwBYAAgABAAKjAAAEAWTALcAWAAIAAQACowAABAFiwC3AFgACAAEAAqMAAAQBZ8AtwBYAAgABAAKjAAAEAWnALcAWAAIAAQACowAABAFqwC3AFgACAAEAAqMAAAQBbMAtwIsAAQABAAKjAAAEwDdTHsD7AAEAAQACowAABMApoh7AWwABAAEAAqMAAATANLIewOsAAQABAAKjAAAEwDBPHsDbAAEAAQACowAABMArrB7AewABAAEAAqMAAATANnAewMsAAQABAAKjAAAEwCpdHsCbAAEAAQACowAABMAjMx7ASwABAAEAAqMAAATADF4ewKsAAQABAAKjAAAEwB9QHsArAAEAAQACowAABMAaXB7AuwABAAEAAqMAAATAIQ4ewGsAAQABAAKjAAAEwAUGHsCLABwAAQACowAAECABBQGx+QAAAAAAAAAAADAAACkE0AAAAAAAAA==","querytime":6,"timestamp":1689779440.41931}}},"SwbApgSh9mA6B3tXP/GkUg":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"answerfrom":"202.12.27.33","timestamp":1689779440.03968,"data":"db6AAAABAAAABAAJA25zMgNuaWMCZnIAAAEAAcAUAAIAAQACowAABAFkwBDAFAACAAEAAqMAAAgBZgNleHTAEMAUAAIAAQACowAABAFlwDrAFAACAAEAAqMAAAQBZ8A6wFwAAQABAAKjAAAEwgAkAcA4AAEAAQACowAABMKSai7ATAABAAEAAqMAAATBsJAWwCgAAQABAAKjAAAEwgAJAcBcABwAAQACowAAECABBngATAAAAAAAAAAAAAHAOAAcAAEAAqMAABAgAQZ8EBAAEQAAAAAAAABTwEwAHAABAAKjAAAQKgANeAAAAQIBkwF2AUQAIsAoABwAAQACowAAECABBngADAAAAAAAAAAAAAEAACkE0AAAAAAAAA==","querytime":6}}},"Hx/wBzZ7dxT0btOz2sXTow":{"Zonemaster::Engine::Packet":{"Zonemaster::LDNS::Packet":{"timestamp":1689779440.464,"querytime":10,"data":"LVaAAAABAAAADQAPA2F2NAVuc3RsZANjb20AABwAAcAWAAIAAQACowAAFAFkDGd0bGQtc2VydmVycwNuZXQAwBYAAgABAAKjAAAEAWPALcAWAAIAAQACowAABAFtwC3AFgACAAEAAqMAAAQBacAtwBYAAgABAAKjAAAEAWzALcAWAAIAAQACowAABAFrwC3AFgACAAEAAqMAAAQBZsAtwBYAAgABAAKjAAAEAWHALcAWAAIAAQACowAABAFowC3AFgACAAEAAqMAAAQBZ8AtwBYAAgABAAKjAAAEAWXALcAWAAIAAQACowAABAFiwC3AFgACAAEAAqMAAAQBasAtwFsAAQABAAKjAAAEwDdTHsB7AAEAAQACowAABMApoh7AiwABAAEAAqMAAATANLIewPsAAQABAAKjAAAEwDBPHsBrAAEAAQACowAABMArrB7AuwABAAEAAqMAAATANnAewMsAAQABAAKjAAAEwCpdHsCbAAEAAQACowAABMAjMx7A2wABAAEAAqMAAATADF4ewCsAAQABAAKjAAAEwB9QHsBLAAEAAQACowAABMAaXB7A6wABAAEAAqMAAATAIQ4ewKsAAQABAAKjAAAEwAUGHsBbABwAAQACowAAECABBQGx+QAAAAAAAAAAADAAACkE0AAAAAAAAA==","answerfrom":"202.12.27.33"}}}} +m.root-servers.net 2001:0dc3:0000:0000:0000:0000:0000:0035 {"9/xxo9P3GPiuofuKjPAr9Q":null,"GkYZ8zZvr859U6n0RWIQnA":null,"vlHtIPwxJvH03j2ezw1DQw":null,"M+X8v3VuYu/obcS9NzRAnA":null,"ioaSLvyfzM2idj7aWcQm4g":null,"oyAxWnDqjJc3r3vkZARqkw":null,"f39y8o9yMy+2CJ3Tild/Hw":null,"sXDcACKhm0MFS8wh6cIIDQ":null,"yk3rcZr2wIk8FHE/pkf2kw":null,"SwbApgSh9mA6B3tXP/GkUg":null,"KoOHMqlriAzfyyS3tJUVhQ":null,"Hx/wBzZ7dxT0btOz2sXTow":null} +d.root-servers.net 2001:0500:002d:0000:0000:0000:0000:000d {} +d.root-servers.net 199.7.91.13 {} diff --git a/t/asn.t b/t/asn.t index cc0e28127..45a66e519 100644 --- a/t/asn.t +++ b/t/asn.t @@ -10,7 +10,8 @@ if ( not $ENV{ZONEMASTER_RECORD} ) { Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 ); } -Zonemaster::Engine::Profile->effective->set(q{asnroots}, [ "asnlookup.zonemaster.net", "asnlookup.iis.se", "asn.cymru.com" ]); +Zonemaster::Engine::Profile->effective->set(q{asn_db.style}, "cymru" ); +Zonemaster::Engine::Profile->effective->set(q{asn_db.sources}, { cymru => [ "asnlookup.zonemaster.net", "asn.cymru.com" ] }); my ( $asn1, $prefix1 ) = Zonemaster::Engine::ASNLookup->get_with_prefix( '8.8.8.8' ); is $asn1->[0], 15169, '8.8.8.8 is in AS15169'; @@ -25,7 +26,7 @@ is( scalar( @asn3 ), 1, 'Only one result' ); ok $asn3[0] >= 390000, '2001:503:ba3e::2:30 is in AS' . $asn3[0]; my ( $asn4, $prefix4 ) = Zonemaster::Engine::ASNLookup->get_with_prefix( '192.168.0.1' ); -ok( scalar @{$asn4} == 0, 'RFC1918 address is in no AS' ); +ok( scalar @{$asn4} == 0, '192.168.0.1 (RFC1918 address) is in no AS' ); Zonemaster::Engine::Profile->effective->set(q{asn_db.sources}, { cymru => [ "asnlookup.dufberg.se" ] }); diff --git a/t/profiles.t b/t/profiles.t index 8ac84b355..3d15fb07e 100644 --- a/t/profiles.t +++ b/t/profiles.t @@ -34,8 +34,12 @@ net: ipv4: true ipv6: false no_network: true -asnroots: - - example.com +asn_db: + style: cymru + sources: + cymru: + - asn1.example.com + - asn2.example.com logfilter: Zone: TAG: @@ -71,9 +75,12 @@ Readonly my $EXAMPLE_PROFILE_1 => q( "ipv6": false }, "no_network": true, - "asnroots": [ - "example.com" - ], + "asn_db" : { + "style" : "cymru", + "sources" : { + "cymru" : [ "asn1.example.com", "asn2.example.com" ] + } + }, "logfilter": { "Zone": { "TAG": [ @@ -120,9 +127,12 @@ Readonly my $EXAMPLE_PROFILE_2 => q( "ipv6": true }, "no_network": false, - "asnroots": [ - "asn1.example.com", "asn2.example.com" - ], + "asn_db" : { + "style" : "ripe", + "sources" : { + "ripe" : [ "asn3.example.com", "asn4.example.com" ] + } + }, "logfilter": { "Nameserver": { "OTHER_TAG": [ @@ -177,7 +187,8 @@ subtest 'new() returns a profile with all properties unset' => sub { is $profile->get( 'net.ipv4' ), undef, 'net.ipv4 is unset'; is $profile->get( 'net.ipv6' ), undef, 'net.ipv6 is unset'; is $profile->get( 'no_network' ), undef, 'no_network is unset'; - is $profile->get( 'asnroots' ), undef, 'asnroots is unset'; + is $profile->get( 'asn_db.style' ), undef, 'asn_db.style is unset'; + is $profile->get( 'asn_db.sources' ), undef, 'asn_db.sources is unset'; is $profile->get( 'logfilter' ), undef, 'logfilter is unset'; is $profile->get( 'test_levels' ), undef, 'test_levels is unset'; is $profile->get( 'test_cases' ), undef, 'test_cases is unset'; @@ -236,7 +247,8 @@ subtest 'from_json("{}") returns a profile with all properties unset' => sub { is $profile->get( 'resolver.source' ), undef, 'resolver.source is unset'; is $profile->get( 'resolver.source4' ), undef, 'resolver.source4 is unset'; is $profile->get( 'resolver.source6' ), undef, 'resolver.source6 is unset'; - is $profile->get( 'asnroots' ), undef, 'asnroots is unset'; + is $profile->get( 'asn_db.style' ), undef, 'asn_db.style is unset'; + is $profile->get( 'asn_db.sources' ), undef, 'asn_db.sources is unset'; is $profile->get( 'logfilter' ), undef, 'logfilter is unset'; is $profile->get( 'test_levels' ), undef, 'test_levels is unset'; is $profile->get( 'test_cases' ), undef, 'test_cases is unset'; @@ -258,7 +270,8 @@ subtest 'from_json() parses values from a string' => sub { is $profile->get( 'resolver.source' ), '192.0.2.53', 'resolver.source was parsed from JSON'; is $profile->get( 'resolver.source4' ), '192.0.2.53', 'resolver.source4 was parsed from JSON'; is $profile->get( 'resolver.source6' ), '2001:db8::42', 'resolver.source6 was parsed from JSON'; - eq_or_diff $profile->get( 'asnroots' ), ['example.com'], 'asnroots was parsed from JSON'; + eq_or_diff $profile->get( 'asn_db.style' ), 'cymru', 'asn_db.style was parsed from JSON'; + eq_or_diff $profile->get( 'asn_db.sources' ), { cymru => ["asn1.example.com", "asn2.example.com"] }, 'asn_db.sources was parsed from JSON'; eq_or_diff $profile->get( 'logfilter' ), { Zone => { TAG => [ { when => { bananas => 0 }, set => 'WARNING' } ] } }, 'logfilter was parsed from JSON'; eq_or_diff $profile->get( 'test_levels' ), { Zone => { TAG => 'INFO' } }, 'test_levels was parsed from JSON'; @@ -301,7 +314,8 @@ subtest 'from_json() dies on illegal values' => sub { dies_ok { Zonemaster::Engine::Profile->from_json( '{"resolver":{"defaults":{"retrans":0}}}' ); } "checks lower bound of resolver.defaults.retrans"; dies_ok { Zonemaster::Engine::Profile->from_json( '{"resolver":{"defaults":{"retrans":256}}}' ); } "checks upper bound of resolver.defaults.retrans"; dies_ok { Zonemaster::Engine::Profile->from_json( '{"resolver":{"defaults":{"retrans":1.5}}}' ); } "checks type of resolver.defaults.retrans"; - dies_ok { Zonemaster::Engine::Profile->from_json( '{"asnroots":["noreply@example.com"]}' ); } "checks type of asnroots"; + dies_ok { Zonemaster::Engine::Profile->from_json( '{"asn_db":{"style":["noreply@example"]}' ); } "checks type of asndb.style"; + dies_ok { Zonemaster::Engine::Profile->from_json( '{"asn_db":{"sources":["noreply@example"]}' ); } "checks type of asndb.sources"; dies_ok { Zonemaster::Engine::Profile->from_json( '{"logfilter":[]}' ); } "checks type of logfilter"; dies_ok { Zonemaster::Engine::Profile->from_json( '{"test_levels":[]}' ); } "checks type of test_levels"; dies_ok { Zonemaster::Engine::Profile->from_json( '{"test_cases":{}}' ); } "checks type of test_cases"; @@ -389,17 +403,17 @@ subtest 'get() returns 0 for false' => sub { subtest 'get() returns deep copies of properties with complex types' => sub { my $profile = Zonemaster::Engine::Profile->new; - $profile->set( 'asnroots', ['asn1.example.com'] ); + $profile->set( 'asn_db.sources', {} ); $profile->set( 'logfilter', {} ); $profile->set( 'test_levels', {} ); $profile->set( 'test_cases', [] ); - push @{ $profile->get( 'asnroots' ) }, 'asn2.example.com'; + $profile->get( 'asn_db.sources' )->{cymru} = ['asn1.example.com', 'asn2.example.com']; push @{ $profile->get( 'test_cases' ) }, 'Zone01'; $profile->get( 'logfilter' )->{Zone} = {}; $profile->get( 'test_levels' )->{Zone}{TAG} = 'INFO'; - eq_or_diff $profile->get( 'asnroots' ), ['asn1.example.com'], 'get(asnroots) returns a deep copy'; + eq_or_diff $profile->get( 'asn_db.sources' ), {}, 'get(asn_db.sources) returns a deep copy'; eq_or_diff $profile->get( 'logfilter' ), {}, 'get(logfilter) returns a deep copy'; eq_or_diff $profile->get( 'test_levels' ), {}, 'get(test_levels) returns a deep copy'; eq_or_diff $profile->get( 'test_cases' ), [], 'get(test_cases) returns a deep copy'; @@ -407,7 +421,8 @@ subtest 'get() returns deep copies of properties with complex types' => sub { subtest 'get() dies if the given property name is invalid' => sub { my $profile = Zonemaster::Engine::Profile->new; - $profile->set( 'asnroots', [ 'asn1.example.com', 'asn2.example.com' ] ); + $profile->set( 'asn_db.style', 'cymru' ); + $profile->set( 'asn_db.sources', { cymru => ['asn1.example.com', 'asn2.example.com'] } ); $profile->set( 'logfilter', { Zone => {} } ); $profile->set( 'test_levels', { Zone => { TAG => 'INFO' } } ); $profile->set( 'test_cases', ['Zone01'] ); @@ -416,7 +431,7 @@ subtest 'get() dies if the given property name is invalid' => sub { throws_ok { $profile->get( 'net.foobar' ) } qr/^.*Unknown property .*/, 'net.foobar'; throws_ok { $profile->get( 'resolver.defaults' ) } qr/^.*Unknown property .*/, 'resolver.defaults'; throws_ok { $profile->get( 'resolver' ) } qr/^.*Unknown property .*/, 'resolver'; - throws_ok { $profile->get( 'asnroots.1' ) } qr/^.*Unknown property .*/, 'asnroots.1'; + throws_ok { $profile->get( 'asn_db.fake' ) } qr/^.*Unknown property .*/, 'asn_db.fake'; throws_ok { $profile->get( 'logfilter.Zone' ) } qr/^.*Unknown property .*/, 'logfilter.Zone'; throws_ok { $profile->get( 'test_levels.Zone' ) } qr/^.*Unknown property .*/, 'test_levels.Zone'; throws_ok { $profile->get( 'test_cases.Zone01' ) } qr/^.*Unknown property .*/, 'test_cases.Zone01'; @@ -438,7 +453,8 @@ subtest 'set() inserts values for unset properties' => sub { $profile->set( 'resolver.source', '192.0.2.53' ); $profile->set( 'resolver.source4', '192.0.2.53' ); $profile->set( 'resolver.source6', '2001:db8::42' ); - $profile->set( 'asnroots', ['example.com'] ); + $profile->set( 'asn_db.style', 'cymru' ); + $profile->set( 'asn_db.sources', { cymru => ['asn1.example.com', 'asn2.example.com'] } ); $profile->set( 'logfilter', { Zone => { TAG => [ { when => { bananas => 0 }, set => 'WARNING' } ] } } ); $profile->set( 'test_levels', { Zone => { TAG => 'INFO' } } ); $profile->set( 'test_cases', ['Zone01'] ); @@ -456,7 +472,8 @@ subtest 'set() inserts values for unset properties' => sub { is $profile->get( 'resolver.source' ), '192.0.2.53', 'resolver.source can be given a value when unset'; is $profile->get( 'resolver.source4' ), '192.0.2.53', 'resolver.source4 can be given a value when unset'; is $profile->get( 'resolver.source6' ), '2001:db8::42', 'resolver.source6 can be given a value when unset'; - eq_or_diff $profile->get( 'asnroots' ), ['example.com'], 'anroots can be given a value when unset'; + eq_or_diff $profile->get( 'asn_db.style' ), 'cymru', 'asn_db.style can be given a value when unset'; + eq_or_diff $profile->get( 'asn_db.sources' ), { cymru => ['asn1.example.com', 'asn2.example.com'] }, 'asn_db.sources can be given a value when unset'; eq_or_diff $profile->get( 'logfilter' ), { Zone => { TAG => [ { when => { bananas => 0 }, set => 'WARNING' } ] } }, 'logfilter can be given a value when unset'; eq_or_diff $profile->get( 'test_levels' ), { Zone => { TAG => 'INFO' } }, @@ -480,7 +497,8 @@ subtest 'set() updates values for set properties' => sub { $profile->set( 'resolver.source', '198.51.100.53' ); $profile->set( 'resolver.source4', '198.51.100.53' ); $profile->set( 'resolver.source6', '2001:db8::cafe' ); - $profile->set( 'asnroots', [ 'asn1.example.com', 'asn2.example.com' ] ); + $profile->set( 'asn_db.style', 'ripe' ); + $profile->set( 'asn_db.sources', { ripe => ['asn3.example.com', 'asn4.example.com'] } ); $profile->set( 'logfilter', { Nameserver => { OTHER_TAG => [ { when => { apples => 1 }, set => 'INFO' } ] } } ); $profile->set( 'test_levels', { Nameserver => { OTHER_TAG => 'ERROR' } } ); $profile->set( 'test_cases', ['Zone02'] ); @@ -497,7 +515,8 @@ subtest 'set() updates values for set properties' => sub { is $profile->get( 'resolver.source' ), '198.51.100.53', 'resolver.source was updated'; is $profile->get( 'resolver.source4' ), '198.51.100.53', 'resolver.source4 was updated'; is $profile->get( 'resolver.source6' ), '2001:db8::cafe', 'resolver.source6 was updated'; - eq_or_diff $profile->get( 'asnroots' ), [ 'asn1.example.com', 'asn2.example.com' ], 'asnroots was updated'; + eq_or_diff $profile->get( 'asn_db.style' ), 'ripe', 'asn_db.style was updated'; + eq_or_diff $profile->get( 'asn_db.sources' ), { ripe => ['asn3.example.com', 'asn4.example.com'] }, 'asn_db.sources was updated'; eq_or_diff $profile->get( 'logfilter' ), { Nameserver => { OTHER_TAG => [ { when => { apples => 1 }, set => 'INFO' } ] } }, 'logfilter was updated'; eq_or_diff $profile->get( 'test_levels' ), { Nameserver => { OTHER_TAG => 'ERROR' } }, 'test_levels was updated'; @@ -520,7 +539,8 @@ subtest 'set() dies on attempts to unset properties' => sub { throws_ok { $profile->set( 'resolver.source', undef ); } qr/^.* can not be undef/, 'dies on attempt to unset resolver.source'; throws_ok { $profile->set( 'resolver.source4', undef ); } qr/^.* can not be undef/, 'dies on attempt to unset resolver.source4'; throws_ok { $profile->set( 'resolver.source6', undef ); } qr/^.* can not be undef/, 'dies on attempt to unset resolver.source6'; - throws_ok { $profile->set( 'asnroots', undef ); } qr/^.* can not be undef/, 'dies on attempt to unset asnroots'; + throws_ok { $profile->set( 'asn_db.style', undef ); } qr/^.* can not be undef/, 'dies on attempt to unset asn_db.style'; + throws_ok { $profile->set( 'asn_db.sources', undef ); } qr/^.* can not be undef/, 'dies on attempt to unset asn_db.sources'; throws_ok { $profile->set( 'logfilter', undef ); } qr/^.* can not be undef/, 'dies on attempt to unset logfilter'; throws_ok { $profile->set( 'test_levels', undef ); } qr/^.* can not be undef/, 'dies on attempt to unset test_levels'; throws_ok { $profile->set( 'test_cases', undef ); } qr/^.* can not be undef/, 'dies on attempt to unset test_cases'; @@ -528,7 +548,8 @@ subtest 'set() dies on attempts to unset properties' => sub { subtest 'set() dies if the given property name is invalid' => sub { my $profile = Zonemaster::Engine::Profile->new; - $profile->set( 'asnroots', [ 'asn1.example.com', 'asn2.example.com' ] ); + $profile->set( 'asn_db.style', 'cymru' ); + $profile->set( 'asn_db.sources', { cymru => ['asn1.example.com', 'asn2.example.com'] } ); $profile->set( 'logfilter', { Zone => {} } ); $profile->set( 'test_levels', { Zone => {} } ); $profile->set( 'test_cases', ['Zone01'] ); @@ -537,7 +558,7 @@ subtest 'set() dies if the given property name is invalid' => sub { throws_ok { $profile->set( 'net.foobar', 1 ) } qr/^.*Unknown property .*/, 'dies on attempt to set a value for net.foobar'; throws_ok { $profile->set( 'resolver.defaults', 1 ) } qr/^.*Unknown property .*/, 'dies on attempt to set a value for resolver.defaults'; throws_ok { $profile->set( 'resolver', 1 ) } qr/^.*Unknown property .*/, 'dies on attempt to set a value for resolver'; - throws_ok { $profile->set( 'asnroots.1', 1 ) } qr/^.*Unknown property .*/, 'dies on attempt to set a value for asnroots.1'; + throws_ok { $profile->set( 'asn_db.fake', 1 ) } qr/^.*Unknown property .*/, 'dies on attempt to set a value for asn_db.fake'; throws_ok { $profile->set( 'logfilter.Zone', 1 ) } qr/^.*Unknown property .*/, 'dies on attempt to set a value for logfilter.Zone'; throws_ok { $profile->set( 'test_levels.Zone', 1 ) } qr/^.*Unknown property .*/, 'dies on attempt to set a value for test_levels.Zone'; throws_ok { $profile->set( 'test_cases.Zone01', 1 ) } qr/^.*Unknown property .*/, 'dies on attempt to set a value for test_cases.Zone01'; @@ -555,7 +576,8 @@ subtest 'set() dies on illegal value' => sub { dies_ok { $profile->set( 'resolver.source', ['192.0.2.53'] ); } 'checks type of resolver.source'; dies_ok { $profile->set( 'resolver.source4', ['192.0.2.53'] ); } 'checks type of resolver.source4'; dies_ok { $profile->set( 'resolver.source6', ['2001:db8::42'] ); } 'checks type of resolver.source6'; - dies_ok { $profile->set( 'asnroots', ['noreply@example.com'] ); } 'checks type of asnroots'; + dies_ok { $profile->set( 'asn_db.style', ['noreply@example.com'] ); } 'checks type of asn_db.style'; + dies_ok { $profile->set( 'asn_db.sources', ['noreply@example.com'] ); } 'checks type of asn_db.sources'; dies_ok { $profile->set( 'logfilter', [] ); } 'checks type of logfilter'; dies_ok { $profile->set( 'test_levels', [] ); } 'checks type of test_levels'; dies_ok { $profile->set( 'test_cases', {} ); } 'checks type of test_cases'; @@ -628,7 +650,8 @@ subtest 'merge() with a profile with all properties unset' => sub { is $profile1->get( 'resolver.source' ), '192.0.2.53', 'keeps value of resolver.source'; is $profile1->get( 'resolver.source4' ), '192.0.2.53', 'keeps value of resolver.source4'; is $profile1->get( 'resolver.source6' ), '2001:db8::42', 'keeps value of resolver.source6'; - eq_or_diff $profile1->get( 'asnroots' ), ['example.com'], 'keeps value of asnroots'; + eq_or_diff $profile1->get( 'asn_db.style' ), 'cymru', 'keeps value of asn_db.style'; + eq_or_diff $profile1->get( 'asn_db.sources' ), { cymru => ['asn1.example.com', 'asn2.example.com'] }, 'keeps value of asn_db.sources'; eq_or_diff $profile1->get( 'logfilter' ), { Zone => { TAG => [ { when => { bananas => 0 }, set => 'WARNING' } ] } }, 'keeps value of logfilter'; eq_or_diff $profile1->get( 'test_levels' ), { Zone => { TAG => 'INFO' } }, 'test_levels'; @@ -654,7 +677,8 @@ subtest 'merge() with a profile with all properties set' => sub { is $profile1->get( 'resolver.source' ), '198.51.100.53', 'updates resolver.source'; is $profile1->get( 'resolver.source4' ), '198.51.100.53', 'updates resolver.source4'; is $profile1->get( 'resolver.source6' ), '2001:db8::cafe', 'updates resolver.source6'; - eq_or_diff $profile1->get( 'asnroots' ), [ 'asn1.example.com', 'asn2.example.com' ], 'updates asnroots'; + eq_or_diff $profile1->get( 'asn_db.style' ), 'ripe', 'updates asn_db.style'; + eq_or_diff $profile1->get( 'asn_db.sources' ), { ripe => ['asn3.example.com', 'asn4.example.com'] }, 'updates asn_db.sources'; eq_or_diff $profile1->get( 'logfilter' ), { Nameserver => { OTHER_TAG => [ { when => { apples => 1 }, set => 'INFO' } ] } }, 'updates logfilter'; eq_or_diff $profile1->get( 'test_levels' ), { Nameserver => { OTHER_TAG => 'ERROR' } }, 'updates test_levels'; @@ -680,7 +704,8 @@ subtest 'merge() does not update the other profile' => sub { is $profile2->get( 'net.ipv4' ), undef, 'net.ipv4 was untouched in other'; is $profile2->get( 'net.ipv6' ), undef, 'net.ipv6 was untouched in other'; is $profile2->get( 'no_network' ), undef, 'no_network was untouched in other'; - is $profile2->get( 'asnroots' ), undef, 'asnroots was untouched in other'; + is $profile2->get( 'asn_db.style' ), undef, 'asn_db.style was untouched in other'; + is $profile2->get( 'asn_db.sources' ), undef, 'asn_db.sources was untouched in other'; is $profile2->get( 'logfilter' ), undef, 'logfilter was untouched in other'; is $profile2->get( 'test_levels' ), undef, 'test_levels was untouched in other'; is $profile2->get( 'test_cases' ), undef, 'test_cases was untouched in other'; @@ -832,13 +857,22 @@ subtest 'to_json() serializes each property' => sub { eq_or_diff decode_json( $json ), decode_json( qq({"resolver":{"source6":""}}) ); }; - subtest 'asnroots' => sub { + subtest 'asn_db.style' => sub { + my $profile = Zonemaster::Engine::Profile->new; + $profile->set( 'asn_db.style', 'cymru' ); + + my $json = $profile->to_json; + + eq_or_diff decode_json( $json ), decode_json( '{"asn_db":{"style": "cymru"}}' ); + }; + + subtest 'asn_db.sources' => sub { my $profile = Zonemaster::Engine::Profile->new; - $profile->set( 'asnroots', ['example.com'] ); + $profile->set( 'asn_db.sources', { cymru => ['asn1.example.com','asn2.example.com'] } ); my $json = $profile->to_json; - eq_or_diff decode_json( $json ), decode_json( '{"asnroots":["example.com"]}' ); + eq_or_diff decode_json( $json ), decode_json( '{"asn_db":{"sources": {"cymru": ["asn1.example.com","asn2.example.com"]}}} ' ); }; subtest 'test_cases' => sub {