User Tools

Site Tools


provenance:design:dns

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
provenance:design:dns [2026/08/27 23:09] – Refresh artefacts and add self-review round three (DDR box lead, the unfetched footnote source, the pinned code-block example). Authored by Claude. karel.kubicek.claudeprovenance:design:dns [2026/08/27 23:21] (current) – Add review pass 5 (generic). Purge the retracted pre-fix run, which had survived in four places in this log after being fixed on the page — the section now states no verdict counts of its own and records instead what three runs showed: identical 46 and no karel.kubicek.claude
Line 250: Line 250:
 ECS  (EDNS Client Subnet)                       1/510      3/768    11/1437     3/1955     2/1185        20 ECS  (EDNS Client Subnet)                       1/510      3/768    11/1437     3/1955     2/1185        20
 DNSCurve / DNSCrypt                             0/510      1/768     8/1437     2/1955     1/1185        12 DNSCurve / DNSCrypt                             0/510      1/768     8/1437     2/1955     1/1185        12
 +DoC  (DNS over CoAP)                            0/510      0/768     0/1437     0/1955     0/1185         0
 +   (bare CoAP, for contrast)                    0/510      2/768     4/1437     7/1955     7/1185        20
  
 Same sweeps restricted to DNSPOP (the papers that are actually about DNS): Same sweeps restricted to DNSPOP (the papers that are actually about DNS):
Line 261: Line 263:
 ECS  (EDNS Client Subnet)                        1/16       2/39       9/76       3/74       1/39        16 ECS  (EDNS Client Subnet)                        1/16       2/39       9/76       3/74       1/39        16
 DNSCurve / DNSCrypt                              0/16       1/39       8/76       1/74       1/39        11 DNSCurve / DNSCrypt                              0/16       1/39       8/76       1/74       1/39        11
 +DoC  (DNS over CoAP)                             0/16       0/39       0/76       0/74       0/39         0
 +   (bare CoAP, for contrast)                     0/16       0/39       0/76       1/74       0/39         1
  
 --- H. WHAT A DNS PAPER SAYS ABOUT ITS OWN METHOD --- --- H. WHAT A DNS PAPER SAYS ABOUT ITS OWN METHOD ---
Line 303: Line 307:
   ethics.notifiedAffectedParties DNS  147/241   61.0%   corpus  2354/5118   46.0%   ethics.notifiedAffectedParties DNS  147/241   61.0%   corpus  2354/5118   46.0%
   ethics.regulatorContact        DNS  132/241   54.8%   corpus  2129/5118   41.6%   ethics.regulatorContact        DNS  132/241   54.8%   corpus  2129/5118   41.6%
 +
 +ethics.robotsTxt over the crawled population: 53 / 1120 = 4.7%
  
 amplification/reflection full-text probe over DNSPOP: 58 / 244 amplification/reflection full-text probe over DNSPOP: 58 / 244
Line 331: Line 337:
   2026/WWW/unveiling-the-resilience-of-llm-enhanced-search-engines-against-black-hat-seo-ma   2026/WWW/unveiling-the-resilience-of-llm-enhanced-search-engines-against-black-hat-seo-ma
   2026/WWW/starlink-in-the-wild-multi-perspective-measurements-via-dns   2026/WWW/starlink-in-the-wild-multi-perspective-measurements-via-dns
 +
 +--- G2. RECORD TYPES AND ADDRESS FAMILY (denominator: DNSPOP) ---
 +  AAAA / IPv6 record                       65 / 244  26.6%
 +  CNAME record                             75 / 244  30.7%
 +  SVCB or HTTPS resource record             8 / 244  3.3%
 +  NS / delegation                          97 / 244  39.8%
 +  PTR / reverse                            61 / 244  25.0%
 +  TXT record                               24 / 244  9.8%
 +  TC bit / truncation / fallback to TCP    22 / 244  9.0%
  
 --- I. MEASURED RESULTS IN THE POPULATION (detection[].prevalence) --- --- I. MEASURED RESULTS IN THE POPULATION (detection[].prevalence) ---
Line 344: Line 359:
   - **A candidate sweep loose enough to catch the real instruments catches everything.** It has to match ''hnsd'', ''ldns'', ''resolvectl'', ''miekg/dns'' and ''gdnsd'', and any regex that loose also matches ''DeepSpeech'' (via %%/ech\b/%%), ''ImageBind'' and ''LanguageBind'' (%%/bind\b/%%), ''TransD'' (%%/nsd\b/%%), ''ATLAS.ti'' and ''MongoDB Atlas'' (%%/atlas/%%), every part-of-speech tagger, and ''Ghost.py'' / ''CyberGhost VPN'' (%%/host\b/%%). Those get named ''offtopic:'' families so the discard is a number, not a silence.   - **A candidate sweep loose enough to catch the real instruments catches everything.** It has to match ''hnsd'', ''ldns'', ''resolvectl'', ''miekg/dns'' and ''gdnsd'', and any regex that loose also matches ''DeepSpeech'' (via %%/ech\b/%%), ''ImageBind'' and ''LanguageBind'' (%%/bind\b/%%), ''TransD'' (%%/nsd\b/%%), ''ATLAS.ti'' and ''MongoDB Atlas'' (%%/atlas/%%), every part-of-speech tagger, and ''Ghost.py'' / ''CyberGhost VPN'' (%%/host\b/%%). Those get named ''offtopic:'' families so the discard is a number, not a silence.
   - **One brand, several products.** ''OpenDNS'' is a public resolver **and** a website categorisation service, and the corpus uses it both ways. ''NextDNS'' is a resolver and a published blocklist. ''DomainTools'' sells passive DNS and a WHOIS archive. Keyed exceptions run first.   - **One brand, several products.** ''OpenDNS'' is a public resolver **and** a website categorisation service, and the corpus uses it both ways. ''NextDNS'' is a resolver and a published blocklist. ''DomainTools'' sells passive DNS and a WHOIS archive. Keyed exceptions run first.
-  - **A name that cannot be resolved from the name.** Rapid7 Open Data is four datasets under one brand (FDNS, RDNS, SSL certificates, TCP/UDP liveness) and half the corpus tuples say only ''Rapid7'' or ''Rapid7 Sonar''. The Rapid7 family therefore carries a **guard** regex tested against name + the extractor's purpose sentence, requiring %%/dns/i%%. All ten Rapid7 tuples were read by hand and the guard decides all ten the way the reading did:+  - **A name that cannot be resolved from the name.** Rapid7 Open Data is four datasets under one brand (FDNS, RDNS, SSL certificates, TCP/UDP liveness) and half the corpus tuples say only ''Rapid7'' or ''Rapid7 Sonar''. The Rapid7 family therefore carries a **guard** regex tested against name + the extractor's purpose sentence, requiring %%/dns/i%%. The candidate regex matches **13 tuples under 11 distinct spellings**; all 13 were read by hand and the guard decides all 13 the way the reading did:
  
 ^ Tuple ^ Purpose ^ Guard verdict ^ ^ Tuple ^ Purpose ^ Guard verdict ^
Line 353: Line 368:
 | Rapid7 (CCS 2016) | "Internet-wide HTTPS and reverse-DNS scan datasets" | included | | Rapid7 (CCS 2016) | "Internet-wide HTTPS and reverse-DNS scan datasets" | included |
 | Rapid7 (IMC 2022, iGDB) | "Provide reverse-DNS mappings from IP addresses to hostnames" | included | | Rapid7 (IMC 2022, iGDB) | "Provide reverse-DNS mappings from IP addresses to hostnames" | included |
-| Rapid7's passive DNS (NDSS 2019NDSS 2021) | "Identify enterprise cloud-hosting IP addresses" / "Resolve domains and discover organization-controlled domains" | included |+| Rapid7's passive DNS (NDSS 2019 **and** NDSS 2021, two tuples) | "Identify enterprise cloud-hosting IP addresses" / "Resolve domains and discover organization-controlled domains" | included |
 | Rapid7 Forward DNS (IMC 2020) | "Collect reverse-DNS and zone-file domains for VPN identification" | included | | Rapid7 Forward DNS (IMC 2020) | "Collect reverse-DNS and zone-file domains for VPN identification" | included |
-| Rapid7 Sonar FDNS / RDNS (PoPETs 2021) | "Validated historical CNAME detection completeness" / "Checked historical tracker IP ownership" | included |+| Forward DNS dataset (IMC 2016, //Entropy/IP//) | "Collected actively queried DNS addresses" | included | 
 +| Rapid7 Sonar FDNS / RDNS (PoPETs 2021, two tuples) | "Validated historical CNAME detection completeness" / "Checked historical tracker IP ownership" | included |
 | Rapid7 sonar.udp (CCS 2022) | "Select open DNS resolvers for comparison" | included | | Rapid7 sonar.udp (CCS 2022) | "Select open DNS resolvers for comparison" | included |
 +| Rapid7 (IMC 2022, //iGDB//) | "Provide reverse-DNS mappings from IP addresses to hostnames" | included |
  
 **One keyed (name, category) exclusion** that no name regex can make: ''DIG'' with ''category == "program-analysis"'' (IEEE S&P 2024, //Everything is Good for Something//) is a likely-invariant inference engine, purpose //"Likely-invariant inference engine"//, not ''dig(1)''. **One keyed (name, category) exclusion** that no name regex can make: ''DIG'' with ''category == "program-analysis"'' (IEEE S&P 2024, //Everything is Good for Something//) is a likely-invariant inference engine, purpose //"Likely-invariant inference engine"//, not ''dig(1)''.
Line 480: Line 497:
  
 --- FIGURES ON THE PAGE THAT ARE NOT FROM A CITED PAPER --- --- FIGURES ON THE PAGE THAT ARE NOT FROM A CITED PAPER ---
-  5,859 / 1,120 / 1,622 / 930 / 5,118 +  populationvenueyearstudy-shape and web-slice counts 
-      <- corpus contracts; report_dns.mjs section asserts them +      <- report_dns.mjs sections A-D 
-  108 / 202 / 66 / 244 / 136 / 14 / 82 / 1,218 / 5,855 +  composite venue shares stated in prose 
-      <report_dns.mjs section A +      <- report_dns.mjs section 
-  venue and year tables +  instrument family countsspelling counts, per-family year detail 
-      <- report_dns.mjs sections and C +      <- report_dns.mjs sections and E2 
-  186 / 40 / 76.2% / 16.4% / 33.6% / 5.1% +  fold residuecandidate-tuple countfold self-test count 
-      <- report_dns.mjs sections A and D +      <- report_dns.mjs section F and `node scripts/dns_fold.mjs`
-  instrument family counts (65/62/60/35/29/3/1/156/77/38/24) +
-      <- report_dns.mjs section E +
-  tool spelling counts and the 35/35 home-grown figure +
-      <- report_dns.mjs section +
-  976 candidate tuples2 unmapped84 self-tests +
-      <- report_dns.mjs section Fdns_fold.mjs+
   encrypted-DNS per-window probe counts   encrypted-DNS per-window probe counts
       <- report_dns.mjs section G       <- report_dns.mjs section G
-  124/103/12450.8%/42.2%/50.8%120/46/40/35/3, 49.2%+  reporting-gapvantage-bucketethics and amplification figures
       <- report_dns.mjs section H       <- report_dns.mjs section H
-  ethics 186/147/132/72 of 241 +  LLM probe counts, case-sensitive and case-insensitive 
-      <- report_dns.mjs section H +      <- report_dns.mjs section H2 
-  16 LLM papers, 0/0/3/5/8 +  the 7 lab-rig papers 
-      <- report_dns.mjs probe rerun; the four roles are hand-read +      <- the LAB_RIG hand map in report_dns.mjs, which the report cross-checks 
-  4.7% robots.txt of 1,120+  robots.txt reporting rate for the crawled population
       <- data/extract/OVERVIEW.md, "Where the field goes quiet"       <- data/extract/OVERVIEW.md, "Where the field goes quiet"
-  7 lab-rig papers +  every resolver-run figure: verdict tallies, both summary denominators, TTLs 
-      <- LAB_RIG hand map in report_dns.mjs +      <- out/dns/resolver_run.txt and resolver_run.json, from pages/resolver_disagreement.py 
-  28 75 / 25 100 / 46 / 1 / 37.3% / 61.3% / 1.3% +  the Tranco list id 
-      <- pages/resolver_disagreement.py run, out/dns/resolver_run.txt +      <- tranco-list.eu, fetched 2026-08-27; recorded in the provenance page 
-  Tranco list id 46W9X +  RFC numbers, dates, statuses and obsoleted-by 
-      <- tranco-list.eu, fetched 2026-08-27 +      <- external_checks_dns.sh, RFC block 
-  RFC numbers, dates, statuses, RFC 8499 obsoleted by 9499 +  tool versions, release and push dates, archived state, git tags 
-      <- rfc-editor.org JSON index via external_checks_dns.sh +      <- external_checks_dns.sh, GitHub/PyPI/Go-proxy blocks 
-  ZDNS v2.1.1 2026-05-28; zmap push 2026-08-24; massdns v1.1.0 2024-03-09 push 2026-04-15 +  vendor state: Farsight resolution, dnsdb.info and Rapid7 redirect targets, dataset dates 
-      <- GitHub API via external_checks_dns.sh +      <- external_checks_dns.sh, Farsight and Rapid7 blocks 
-  dnspython 2.8.0 2025-09-07; DNSViz v0.11.1 2025-04-21; dnscrypt-proxy 2.1.18 2026-07-18; miekg/dns push 2026-08-19 +  Firefox trr prefs and the DoH provider records 
-      <- GitHub API and PyPI via external_checks_dns.sh +      <- external_checks_dns.sh, Firefox blocks 
-  farsightsecurity.com does not resolve; dnsdb.info 104.244.14.71 -> domaintools.com/platform +  the APNIC DDR figures and the ANRW Crossref record 
-      <- external_checks_dns.sh +      <- external_checks_dns.sh, APNIC and ANRW blocks 
-  Rapid7 sonar.fdns_v2 2026-08-23, sonar.rdns_v2 2026-08-26 + 
-      <- opendata.rapid7.com parsed by external_checks_dns.sh +This block names artefacts, not values. Run the named artefact for the number.
-  network.trr.mode value 0; 5 DoH provider records; Cloudflare autoDefault +
-      <- StaticPrefList.yaml and Mozilla Remote Settings via external_checks_dns.sh+
 </code> </code>
  
Line 550: Line 559:
  
 == run date (UTC) == run date (UTC)
-2026-08-27T23:07:52Z+2026-08-27T23:18:41Z
  
 == RFCs the page names: status, obsoleted-by, updated-by == RFCs the page names: status, obsoleted-by, updated-by
Line 611: Line 620:
 DNS-OARC/dnsperf           archived=True  pushed=2026-02-04 stars=478 DNS-OARC/dnsperf           archived=True  pushed=2026-02-04 stars=478
    latest release v2.14.0 on 2024-01-18    latest release v2.14.0 on 2024-01-18
-DNSCrypt/dnscrypt-proxy    archived=False pushed=2026-08-27 stars=13604+DNSCrypt/dnscrypt-proxy    archived=False pushed=2026-08-27 stars=13605
    latest release 2.1.18 on 2026-07-18    latest release 2.1.18 on 2026-07-18
  
Line 631: Line 640:
   ok   321k DDR-enabled open resolvers   ok   321k DDR-enabled open resolvers
   ok   80.8% of DDR-enabled resolvers designating dns.google   ok   80.8% of DDR-enabled resolvers designating dns.google
 +  ok   Cloudflare came second at 12.4%
   ok   97.4% of DDR-enabled resolvers   ok   97.4% of DDR-enabled resolvers
  
Line 742: Line 752:
   * **Source-address check on the reply.** It accepts a datagram only from the address it queried, and rejects a transaction-ID mismatch. This does not defend against an on-path forger — nothing at this layer does — but it stops a stray answer being recorded as that resolver's.   * **Source-address check on the reply.** It accepts a datagram only from the address it queried, and rejects a transaction-ID mismatch. This does not defend against an on-path forger — nothing at this layer does — but it stops a stray answer being recorded as that resolver's.
   * **''no-A-record'' is a separate verdict from ''insufficient''.** The first draft merged them and reported "25% insufficient", which hid the actual finding: those 25 names have no A record at the apex, which is a property of the zone and the most common way a list-driven crawl loses rows silently.   * **''no-A-record'' is a separate verdict from ''insufficient''.** The first draft merged them and reported "25% insufficient", which hid the actual finding: those 25 names have no A record at the apex, which is a property of the zone and the most common way a list-driven crawl loses rows silently.
-  * **Two summaries, and the script says which to quote.** Summary A over all names mixes "resolvers disagree(28/100) with "there was nothing to disagree about" (25/100). Summary B over the 75 comparable names gives 37.3%. Quoting 28% would understate the disagreement by hiding it behind the no-answer rate.+  * **Two summaries, and the script says which to quote.** Summary A over all names mixes "resolvers did not all agree" with "there was nothing to disagree about" (25 of 100). Summary B is over the 75 comparable names. Quoting the summary-A share would understate the disagreement by hiding it behind the no-answer rate. The values are in the run output below and are deliberately not restated here: the first version of this bullet restated the **pre-fix** classifier's numbers, and they survived the fix that retracted them.
  
 ==== The run behind the page's numbers ==== ==== The run behind the page's numbers ====
  
-Tranco top 100, list ID ''46W9X'', fetched from ''tranco-list.eu'' on 2026-08-27. Three public resolvers over Do53/UDP from a single European vantage point. Two consecutive runs against the same list gave **identical** verdict counts (46 identical / 1 same-/24 / 28 disjoint / 25 no-A-record), which is reassuring but is not a stability claim — it is two runs, minutes apart, from one place.+Tranco top 100, list ID ''46W9X'', fetched from ''tranco-list.eu'' on 2026-08-27. Three public resolvers over Do53/UDP from a single European vantage point.
  
-The %%<code>%% block on the page is generated by ''scripts/build_dns_codeblock.mjs'' from ''out/dns/resolver_run.txt'', with a mechanical abridgement rule (two header lines, the ''google.com'' stanza with address lists cut after two entries, both summary blocks). It is regenerated rather than pasted, because the first draft pasted an **earlier** run's TTLs under a **later** run's timestamp — the exact failure the builder now prevents.+**Three runs, and what moved between them.** The list was run three times over about ninety minutes: twice under the original (buggy) classifier, then again after the pairwise fix, then again after the script gained TC-bit handling. ''identical'' came back **46** in every run and ''no-A-record'' **25** in every run, so ''not identical'' was **29** in every run. The split of those 29 moved — 28 disjoint and 1 same-/24 under the buggy all-at-once intersection, then 21 partial / 8 disjoint, then 19 partial / 10 disjoint — as CDN mappings churned under the measurement. That is why the page quotes **not identical** as its headline and treats the partial-versus-disjoint split as illustrative rather than as a result. It is also why this section states no verdict counts of its own: they belong in the run output below, which is regenerated from the script. 
 + 
 +The %%<code>%% block on the page is generated by ''scripts/build_dns_codeblock.mjs'' from ''out/dns/resolver_run.txt'', with a mechanical abridgement rule (two header lines, the **first ''disjoint'' stanza** with address lists cut after two entries, both summary blocks). It is regenerated rather than pasted, because the first draft pasted an **earlier** run's TTLs under a **later** run's timestamp — the exact failure the builder now prevents.
  
 Full run output: Full run output:
Line 754: Line 766:
 <code> <code>
 # resolvers: Google (8.8.8.8), Cloudflare (1.1.1.1), Quad9 (9.9.9.9) # resolvers: Google (8.8.8.8), Cloudflare (1.1.1.1), Quad9 (9.9.9.9)
-# names: 100   run at 2026-08-27T22:56:27Z+# names: 100   run at 2026-08-27T23:17:26Z
  
 google.com   -> partial google.com   -> partial
-    Google       NOERROR     10.ms  ttl=242    172.217.208.100, 172.217.208.101, 172.217.208.102, 172.217.208.113, 172.217.208.138, 172.217.208.139  (2nd query TTL 47: served from cache) +    Google       NOERROR     13.ms  ttl=126    172.217.208.100, 172.217.208.101, 172.217.208.102, 172.217.208.113, 172.217.208.138, 172.217.208.139 
-    Cloudflare   NOERROR      9.ms  ttl=299    172.217.208.100, 172.217.208.101, 172.217.208.102, 172.217.208.113, 172.217.208.138, 172.217.208.139  (2nd query TTL 185: served from cache) +    Cloudflare   NOERROR      9.ms  ttl=287    172.217.208.100, 172.217.208.101, 172.217.208.102, 172.217.208.113, 172.217.208.138, 172.217.208.139  (2nd query TTL 278: served from cache) 
-    Quad9        NOERROR     14.ms  ttl=108    142.251.127.100, 142.251.127.101, 142.251.127.102, 142.251.127.113, 142.251.127.138, 142.251.127.139  (2nd query TTL 107: served from cache)+    Quad9        NOERROR     14.ms  ttl=278    192.178.183.100, 192.178.183.101, 192.178.183.102, 192.178.183.113, 192.178.183.138, 192.178.183.139  (2nd query TTL 185: served from cache)
  
 cloudflare.com   -> identical cloudflare.com   -> identical
-    Google       NOERROR     17.ms  ttl=300    104.16.132.229, 104.16.133.229  (2nd query TTL 300: unchanged) +    Google       NOERROR     12.ms  ttl=300    104.16.132.229, 104.16.133.229  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR      9.ms  ttl=245    104.16.132.229, 104.16.133.229  (2nd query TTL 159: served from cache) +    Cloudflare   NOERROR      8.ms  ttl=37     104.16.132.229, 104.16.133.229 
-    Quad9        NOERROR     15.ms  ttl=263    104.16.132.229, 104.16.133.229  (2nd query TTL 247: served from cache)+    Quad9        NOERROR     16.ms  ttl=141    104.16.132.229, 104.16.133.229  (2nd query TTL 137: served from cache)
  
-gstatic.com   -> disjoint +gstatic.com   -> partial 
-    Google       NOERROR     36.ms  ttl=300    172.217.208.120, 172.217.208.94  (2nd query TTL 300: unchanged) +    Google       NOERROR     25.ms  ttl=300    172.217.208.120, 172.217.208.94  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR     22.ms  ttl=90     74.125.29.120, 74.125.29.94  (2nd query TTL 22: served from cache) +    Cloudflare   NOERROR      9.ms  ttl=200    172.217.208.120, 172.217.208.94  (2nd query TTL 169: served from cache) 
-    Quad9        NOERROR    122.ms  ttl=160    142.250.154.120, 142.250.154.94+    Quad9        NOERROR     14.ms  ttl=149    142.251.14.120, 142.251.14.94  (2nd query TTL 141: served from cache)
  
 facebook.com   -> partial facebook.com   -> partial
-    Google       NOERROR     37.ms  ttl=60     157.240.17.35  (2nd query TTL 60: unchanged) +    Google       NOERROR     13.ms  ttl=60     157.240.17.35  (2nd query TTL 60: unchanged) 
-    Cloudflare   NOERROR     10.ms  ttl=5      157.240.17.35  (2nd query TTL 5unchanged+    Cloudflare   NOERROR     10.ms  ttl=38     157.240.17.35  (2nd query TTL 23served from cache
-    Quad9        NOERROR     13.9 ms  ttl=10     157.240.0.35+    Quad9        NOERROR     14.9 ms  ttl=21     157.240.253.35
  
 microsoft.com   -> partial microsoft.com   -> partial
-    Google       NOERROR      9.ms  ttl=2128   150.171.110.51  (2nd query TTL 2128unchanged+    Google       NOERROR     13.ms  ttl=505    150.171.110.56  (2nd query TTL 475served from cache
-    Cloudflare   NOERROR     10.ms  ttl=2439   150.171.110.51  (2nd query TTL 780: served from cache) +    Cloudflare   NOERROR     10.ms  ttl=2455   150.171.110.56  (2nd query TTL 1180: served from cache) 
-    Quad9        NOERROR     13.ms  ttl=1460   150.171.109.101+    Quad9        NOERROR     15.ms  ttl=201    150.171.109.101
  
-googleapis.com   -> partial +googleapis.com   -> disjoint 
-    Google       NOERROR     15.ms  ttl=300    74.125.29.103, 74.125.29.104, 74.125.29.105, 74.125.29.106, 74.125.29.147, 74.125.29.99  (2nd query TTL 282: served from cache) +    Google       NOERROR     39.ms  ttl=300    74.125.29.103, 74.125.29.104, 74.125.29.105, 74.125.29.106, 74.125.29.147, 74.125.29.99  (2nd query TTL 164: served from cache) 
-    Cloudflare   NOERROR      8.ms  ttl=185    74.125.29.103, 74.125.29.104, 74.125.29.105, 74.125.29.106, 74.125.29.147, 74.125.29.99  (2nd query TTL 152: served from cache) +    Cloudflare   NOERROR     10.ms  ttl=172    172.217.208.103, 172.217.208.104, 172.217.208.105, 172.217.208.106, 172.217.208.147, 172.217.208.99 
-    Quad9        NOERROR     13.ms  ttl=278    142.251.13.103, 142.251.13.104, 142.251.13.105, 142.251.13.106, 142.251.13.147, 142.251.13.99+    Quad9        NOERROR     14.ms  ttl=165    192.178.183.103, 192.178.183.104, 192.178.183.105, 192.178.183.106, 192.178.183.147, 192.178.183.99
  
 amazonaws.com   -> identical amazonaws.com   -> identical
-    Google       NOERROR      9.ms  ttl=613    15.197.250.250, 166.117.149.112  (2nd query TTL 176: served from cache) +    Google       NOERROR     10.ms  ttl=802    15.197.250.250, 166.117.149.112  (2nd query TTL 246: served from cache) 
-    Cloudflare   NOERROR      9.ms  ttl=173    15.197.250.250, 166.117.149.112  (2nd query TTL 163: served from cache) +    Cloudflare   NOERROR      9.ms  ttl=747    15.197.250.250, 166.117.149.112  (2nd query TTL 709: served from cache) 
-    Quad9        NOERROR     13.ms  ttl=686    15.197.250.250, 166.117.149.112  (2nd query TTL 43: served from cache)+    Quad9        NOERROR     13.ms  ttl=171    15.197.250.250, 166.117.149.112  (2nd query TTL 169: served from cache)
  
-youtube.com   -> partial +youtube.com   -> disjoint 
-    Google       NOERROR     18.ms  ttl=300    172.217.208.136, 172.217.208.190, 172.217.208.91, 172.217.208.93  (2nd query TTL 300: unchanged) +    Google       NOERROR     20.ms  ttl=300    172.217.208.136, 172.217.208.190, 172.217.208.91, 172.217.208.93  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR     10.ms  ttl=39     172.217.208.136, 172.217.208.190, 172.217.208.91, 172.217.208.93 +    Cloudflare   NOERROR      8.ms  ttl=111    192.178.170.136, 192.178.170.190, 192.178.170.91, 192.178.170.93 
-    Quad9        NOERROR     14.ms  ttl=5      192.178.183.136, 192.178.183.190, 192.178.183.91, 192.178.183.93  (2nd query TTL 5: unchanged)+    Quad9        NOERROR     15.ms  ttl=154    142.251.13.136, 142.251.13.190, 142.251.13.91, 142.251.13.93  (2nd query TTL 154: unchanged)
  
 apple.com   -> identical apple.com   -> identical
-    Google       NOERROR     10.ms  ttl=220    17.253.144.10  (2nd query TTL 219served from cache+    Google       NOERROR     10.ms  ttl=760    17.253.144.10  (2nd query TTL 760unchanged
-    Cloudflare   NOERROR      9.ms  ttl=133    17.253.144.10 +    Cloudflare   NOERROR      8.ms  ttl=617    17.253.144.10 
-    Quad9        NOERROR     13.ms  ttl=805    17.253.144.10  (2nd query TTL 777: served from cache)+    Quad9        NOERROR     14.ms  ttl=216    17.253.144.10
  
 gtld-servers.net   -> no-A-record gtld-servers.net   -> no-A-record
-    Google       NOERROR     39.ms  ttl=-      (no A record) +    Google       NOERROR     22.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR    379.ms  ttl=-      (no A record) +    Cloudflare   NOERROR     59.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     21.ms  ttl=-      (no A record)+    Quad9        NOERROR     20.ms  ttl=-      (no A record)
  
 akamai.net   -> no-A-record akamai.net   -> no-A-record
-    Google       NOERROR     12.ms  ttl=-      (no A record) +    Google       NOERROR     17.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) +    Cloudflare   NOERROR      9.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     15.8 ms  ttl=-      (no A record)+    Quad9        NOERROR     14.8 ms  ttl=-      (no A record)
  
 instagram.com   -> partial instagram.com   -> partial
-    Google       NOERROR     14.ms  ttl=60     157.240.17.174  (2nd query TTL 60: unchanged) +    Google       NOERROR     14.ms  ttl=60     157.240.17.174  (2nd query TTL 60: unchanged) 
-    Cloudflare   NOERROR     10.ms  ttl=38     157.240.17.174  (2nd query TTL 38: unchanged) +    Cloudflare   NOERROR     10.ms  ttl=4      157.240.17.174 
-    Quad9        NOERROR     14.ms  ttl=25     157.240.253.174  (2nd query TTL 17served from cache)+    Quad9        NOERROR     15.ms  ttl=33     157.240.253.174  (2nd query TTL 33unchanged)
  
 mail.ru   -> identical mail.ru   -> identical
-    Google       NOERROR     56.ms  ttl=53     185.180.201.1, 89.221.239.1, 90.156.232.4  (2nd query TTL 5: served from cache) +    Google       NOERROR     62.ms  ttl=60     185.180.201.1, 89.221.239.1, 90.156.232.4  (2nd query TTL 53: served from cache) 
-    Cloudflare   NOERROR      9.ms  ttl=42     185.180.201.1, 89.221.239.1, 90.156.232.4 +    Cloudflare   NOERROR     10.ms  ttl=13     185.180.201.1, 89.221.239.1, 90.156.232.4 
-    Quad9        NOERROR     15.ms  ttl=5      185.180.201.1, 89.221.239.1, 90.156.232.4+    Quad9        NOERROR     13.ms  ttl=11     185.180.201.1, 89.221.239.1, 90.156.232.4
  
 ezviz7.com   -> no-A-record ezviz7.com   -> no-A-record
-    Google       NOERROR    261.ms  ttl=-      (no A record) +    Google       NOERROR    340.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) +    Cloudflare   NOERROR     11.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     14.ms  ttl=-      (no A record)+    Quad9        NOERROR    243.ms  ttl=-      (no A record)
  
 fbcdn.net   -> partial fbcdn.net   -> partial
-    Google       NOERROR     14.ms  ttl=60     157.240.17.35  (2nd query TTL 60: unchanged) +    Google       NOERROR     14.ms  ttl=60     157.240.17.35  (2nd query TTL 60: unchanged) 
-    Cloudflare   NOERROR      9.ms  ttl=39     157.240.17.35  (2nd query TTL 38served from cache+    Cloudflare   NOERROR      9.ms  ttl=42     157.240.17.35  (2nd query TTL 42unchanged
-    Quad9        NOERROR     14.ms  ttl=19     157.240.253.35+    Quad9        NOERROR     14.ms  ttl=32     157.240.0.35  (2nd query TTL 30: served from cache)
  
 twitter.com   -> partial twitter.com   -> partial
-    Google       NOERROR     10.ms  ttl=40     162.159.140.229 +    Google       NOERROR     11.ms  ttl=249    172.66.0.227  (2nd query TTL 120: served from cache) 
-    Cloudflare   NOERROR      8.ms  ttl=5      172.66.0.227 +    Cloudflare   NOERROR      9.ms  ttl=263    162.159.140.229  (2nd query TTL 203: served from cache) 
-    Quad9        NOERROR     15.ms  ttl=38     162.159.140.229  (2nd query TTL 38: unchanged)+    Quad9        NOERROR     13.ms  ttl=236    162.159.140.229
  
 dzen.ru   -> identical dzen.ru   -> identical
-    Google       NOERROR      9.ms  ttl=492    95.163.218.220  (2nd query TTL 492: unchanged) +    Google       NOERROR      9.ms  ttl=450    95.163.218.220 
-    Cloudflare   NOERROR      8.ms  ttl=347    95.163.218.220  (2nd query TTL 347: unchanged) +    Cloudflare   NOERROR      9.ms  ttl=29     95.163.218.220  (2nd query TTL 29: unchanged) 
-    Quad9        NOERROR     15.ms  ttl=183    95.163.218.220  (2nd query TTL 157: served from cache)+    Quad9        NOERROR     16.ms  ttl=308    95.163.218.220  (2nd query TTL 24: served from cache)
  
 linkedin.com   -> identical linkedin.com   -> identical
-    Google       NOERROR     13.ms  ttl=300    130.211.32.14  (2nd query TTL 54served from cache+    Google       NOERROR     14.ms  ttl=300    130.211.32.14  (2nd query TTL 300unchanged
-    Cloudflare   NOERROR      9.ms  ttl=58     130.211.32.14 +    Cloudflare   NOERROR      9.ms  ttl=237    130.211.32.14 
-    Quad9        NOERROR     50.ms  ttl=69     130.211.32.14+    Quad9        NOERROR     15.ms  ttl=139    130.211.32.14
  
 domaincontrol.com   -> identical domaincontrol.com   -> identical
-    Google       NOERROR     21.ms  ttl=600    127.0.0.1  (2nd query TTL 600: unchanged) +    Google       NOERROR     25.ms  ttl=600    127.0.0.1  (2nd query TTL 600: unchanged) 
-    Cloudflare   NOERROR     17.ms  ttl=600    127.0.0.1  (2nd query TTL 600: unchanged) +    Cloudflare   NOERROR     18.ms  ttl=600    127.0.0.1  (2nd query TTL 600: unchanged) 
-    Quad9        NOERROR     16.ms  ttl=600    127.0.0.1  (2nd query TTL 600: unchanged)+    Quad9        NOERROR     17.ms  ttl=600    127.0.0.1  (2nd query TTL 600: unchanged)
  
 googlevideo.com   -> disjoint googlevideo.com   -> disjoint
-    Google       NOERROR     19.ms  ttl=300    74.125.29.103, 74.125.29.104, 74.125.29.105, 74.125.29.106, 74.125.29.147, 74.125.29.99  (2nd query TTL 300: unchanged) +    Google       NOERROR     17.ms  ttl=300    74.125.29.103, 74.125.29.104, 74.125.29.105, 74.125.29.106, 74.125.29.147, 74.125.29.99  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR      9.9 ms  ttl=144    172.217.208.103, 172.217.208.104, 172.217.208.105, 172.217.208.106, 172.217.208.147, 172.217.208.99  (2nd query TTL 101served from cache+    Cloudflare   NOERROR      9.9 ms  ttl=121    172.217.208.103, 172.217.208.104, 172.217.208.105, 172.217.208.106, 172.217.208.147, 172.217.208.99  (2nd query TTL 121unchanged
-    Quad9        NOERROR     15.ms  ttl=150    142.251.20.103, 142.251.20.104, 142.251.20.105, 142.251.20.106, 142.251.20.147, 142.251.20.99  (2nd query TTL 35: served from cache)+    Quad9        NOERROR     14.ms  ttl=152    142.251.14.103, 142.251.14.104, 142.251.14.105, 142.251.14.106, 142.251.14.147, 142.251.14.99
  
 office.com   -> identical office.com   -> identical
-    Google       NOERROR     13.ms  ttl=10     13.107.6.156  (2nd query TTL 10: unchanged) +    Google       NOERROR     11.ms  ttl=2      13.107.6.156 
-    Cloudflare   NOERROR      8.ms  ttl=     13.107.6.156  (2nd query TTL 3: unchanged) +    Cloudflare   NOERROR     10.ms  ttl=     13.107.6.156 
-    Quad9        NOERROR     13.ms  ttl=     13.107.6.156+    Quad9        NOERROR     15.ms  ttl=     13.107.6.156  (2nd query TTL 5: served from cache)
  
 googletagmanager.com   -> disjoint googletagmanager.com   -> disjoint
-    Google       NOERROR     24.ms  ttl=300    172.217.208.97  (2nd query TTL 300: unchanged) +    Google       NOERROR     24.ms  ttl=300    172.217.208.97  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR      8.7 ms  ttl=132    192.178.170.97  (2nd query TTL 131served from cache+    Cloudflare   NOERROR     10.7 ms  ttl=271    74.125.29.97  (2nd query TTL 271unchanged
-    Quad9        NOERROR     15.ms  ttl=127    192.178.183.97+    Quad9        NOERROR     15.ms  ttl=23     192.178.183.97
  
 hicloudcam.com   -> no-A-record hicloudcam.com   -> no-A-record
-    Google       NOERROR    274.ms  ttl=-      (no A record) +    Google       NOERROR    319.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR    272.8 ms  ttl=-      (no A record) +    Cloudflare   NOERROR    520.8 ms  ttl=-      (no A record) 
-    Quad9        NOERROR     14.ms  ttl=-      (no A record)+    Quad9        NOERROR    240.ms  ttl=-      (no A record)
  
 live.com   -> identical live.com   -> identical
-    Google       NOERROR      9.ms  ttl=1363   204.79.197.212  (2nd query TTL 683: served from cache) +    Google       NOERROR     13.ms  ttl=104    204.79.197.212 
-    Cloudflare   NOERROR      9.ms  ttl=321    204.79.197.212 +    Cloudflare   NOERROR      9.ms  ttl=2662   204.79.197.212  (2nd query TTL 2662: unchanged) 
-    Quad9        NOERROR     15.ms  ttl=752    204.79.197.212+    Quad9        NOERROR     14.ms  ttl=2914   204.79.197.212  (2nd query TTL 2914: unchanged)
  
 akamaiedge.net   -> no-A-record akamaiedge.net   -> no-A-record
-    Google       NOERROR     11.ms  ttl=-      (no A record) +    Google       NOERROR     10.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) +    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     16.ms  ttl=-      (no A record)+    Quad9        NOERROR     15.ms  ttl=-      (no A record)
  
 amazon.com   -> identical amazon.com   -> identical
-    Google       NOERROR     10.ms  ttl=603    98.82.161.185, 98.87.170.71, 98.87.170.74  (2nd query TTL 370: served from cache) +    Google       NOERROR     10.ms  ttl=158    98.82.161.185, 98.87.170.71, 98.87.170.74 
-    Cloudflare   NOERROR     10.ms  ttl=372    98.82.161.185, 98.87.170.71, 98.87.170.74 +    Cloudflare   NOERROR      9.ms  ttl=504    98.82.161.185, 98.87.170.71, 98.87.170.74  (2nd query TTL 492: served from cache) 
-    Quad9        NOERROR     13.ms  ttl=57     98.82.161.185, 98.87.170.71, 98.87.170.74  (2nd query TTL 43: served from cache)+    Quad9        NOERROR     16.ms  ttl=759    98.82.161.185, 98.87.170.71, 98.87.170.74  (2nd query TTL 506: served from cache)
  
 akadns.net   -> no-A-record akadns.net   -> no-A-record
-    Google       NOERROR     10.1 ms  ttl=-      (no A record) +    Google       NOERROR     20.1 ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     11.ms  ttl=-      (no A record) +    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     15.ms  ttl=-      (no A record)+    Quad9        NOERROR     15.ms  ttl=-      (no A record)
  
 azure.com   -> identical azure.com   -> identical
-    Google       NOERROR      9.ms  ttl=2750   20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171 +    Google       NOERROR      9.ms  ttl=1261   20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171 
-    Cloudflare   NOERROR      7.ms  ttl=584    20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171 +    Cloudflare   NOERROR      9.ms  ttl=2975   20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 2955: served from cache) 
-    Quad9        NOERROR     13.ms  ttl=358    20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 358: unchanged)+    Quad9        NOERROR     13.ms  ttl=2722   20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 2722: unchanged)
  
 bing.com   -> identical bing.com   -> identical
-    Google       NOERROR      9.ms  ttl=2051   150.171.27.10, 150.171.28.10  (2nd query TTL 2051unchanged+    Google       NOERROR     10.ms  ttl=3542   150.171.27.10, 150.171.28.10  (2nd query TTL 691served from cache
-    Cloudflare   NOERROR      8.ms  ttl=566    150.171.27.10, 150.171.28.10  (2nd query TTL 527: served from cache) +    Cloudflare   NOERROR     10.ms  ttl=2911   150.171.27.10, 150.171.28.10  (2nd query TTL 2719: served from cache) 
-    Quad9        NOERROR     14.ms  ttl=1042   150.171.27.10, 150.171.28.10  (2nd query TTL 258: served from cache)+    Quad9        NOERROR     14.ms  ttl=533    150.171.27.10, 150.171.28.10
  
 github.com   -> partial github.com   -> partial
-    Google       NOERROR     27.ms  ttl=60     140.82.121. (2nd query TTL 60: unchanged) +    Google       NOERROR     18.ms  ttl=60     140.82.121. (2nd query TTL 60: unchanged) 
-    Cloudflare   NOERROR     10.ms  ttl=29     140.82.121.3 +    Cloudflare   NOERROR      9.ms  ttl=1      140.82.121.4 
-    Quad9        NOERROR     13.ms  ttl=6      140.82.121.4  (2nd query TTL 3: served from cache)+    Quad9        NOERROR     14.ms  ttl=51     140.82.121.4  (2nd query TTL 23: served from cache)
  
 wikipedia.org   -> partial wikipedia.org   -> partial
-    Google       NOERROR     10.ms  ttl=166    185.15.58.224  (2nd query TTL 55: served from cache) +    Google       NOERROR     11.ms  ttl=167    185.15.58.224 
-    Cloudflare   NOERROR      9.ms  ttl=82     185.15.58.224 +    Cloudflare   NOERROR     10.ms  ttl=57     185.15.58.224 
-    Quad9        NOERROR     14.ms  ttl=116    185.15.59.224  (2nd query TTL 109: served from cache)+    Quad9        NOERROR     17.ms  ttl=63     185.15.59.224  (2nd query TTL 49: served from cache)
  
 whatsapp.net   -> partial whatsapp.net   -> partial
-    Google       NOERROR     14.ms  ttl=60     157.240.17.60  (2nd query TTL 60: unchanged) +    Google       NOERROR     14.ms  ttl=60     157.240.17.60  (2nd query TTL 60: unchanged) 
-    Cloudflare   NOERROR     10.ms  ttl=26     157.240.17.60 +    Cloudflare   NOERROR     10.ms  ttl=40     157.240.17.60  (2nd query TTL 40: unchanged) 
-    Quad9        NOERROR     15.ms  ttl=31     157.240.0.60  (2nd query TTL 29served from cache)+    Quad9        NOERROR     15.ms  ttl=27     157.240.0.60  (2nd query TTL 27unchanged)
  
 apple-dns.net   -> no-A-record apple-dns.net   -> no-A-record
-    Google       NOERROR     11.ms  ttl=-      (no A record) +    Google       NOERROR     10.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     32.ms  ttl=-      (no A record) +    Cloudflare   NOERROR      9.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     72.ms  ttl=-      (no A record)+    Quad9        NOERROR     14.ms  ttl=-      (no A record)
  
 fastly.net   -> identical fastly.net   -> identical
-    Google       NOERROR     10.ms  ttl=460    151.101.1.6, 151.101.129.6, 151.101.193.6, 151.101.65.6 +    Google       NOERROR     11.ms  ttl=2039   151.101.1.6, 151.101.129.6, 151.101.193.6, 151.101.65.6  (2nd query TTL 633: served from cache) 
-    Cloudflare   NOERROR      9.ms  ttl=1152   151.101.1.6, 151.101.129.6, 151.101.193.6, 151.101.65.6  (2nd query TTL 1152unchanged+    Cloudflare   NOERROR     10.ms  ttl=3494   151.101.1.6, 151.101.129.6, 151.101.193.6, 151.101.65.6  (2nd query TTL 1394served from cache
-    Quad9        NOERROR     14.ms  ttl=570    151.101.1.6, 151.101.129.6, 151.101.193.6, 151.101.65.6  (2nd query TTL 570: unchanged)+    Quad9        NOERROR     16.ms  ttl=1732   151.101.1.6, 151.101.129.6, 151.101.193.6, 151.101.65.6
  
 googleusercontent.com   -> disjoint googleusercontent.com   -> disjoint
-    Google       NOERROR     39.9 ms  ttl=300    192.178.170.132  (2nd query TTL 300: unchanged) +    Google       NOERROR     38.9 ms  ttl=300    192.178.170.132  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR     15.2 ms  ttl=122    172.217.208.132 +    Cloudflare   NOERROR     11.2 ms  ttl=108    74.125.29.132 
-    Quad9        NOERROR     13.ms  ttl=215    142.251.20.132  (2nd query TTL 93: served from cache)+    Quad9        NOERROR     14.ms  ttl=300    142.251.20.132  (2nd query TTL 178: served from cache)
  
-appsflyersdk.com   -> partial +appsflyersdk.com   -> disjoint 
-    Google       NOERROR     13.ms  ttl=60     3.165.190.101, 3.165.190.35, 3.165.190.39, 3.165.190.48  (2nd query TTL 60: unchanged) +    Google       NOERROR     17.ms  ttl=60     3.165.190.101, 3.165.190.35, 3.165.190.39, 3.165.190.48  (2nd query TTL 60: unchanged) 
-    Cloudflare   NOERROR     11.ms  ttl=60     3.165.190.1013.165.190.353.165.190.393.165.190.48  (2nd query TTL 60: unchanged) +    Cloudflare   NOERROR     11.ms  ttl=60     108.139.243.111108.139.243.112108.139.243.114108.139.243. (2nd query TTL 60: unchanged) 
-    Quad9        NOERROR     20.ms  ttl=60     13.226.244.111, 13.226.244.60, 13.226.244.76, 13.226.244.9  (2nd query TTL 60: unchanged)+    Quad9        NOERROR     18.ms  ttl=60     13.226.244.111, 13.226.244.60, 13.226.244.76, 13.226.244.9  (2nd query TTL 60: unchanged)
  
 doubleclick.net   -> partial doubleclick.net   -> partial
-    Google       NOERROR     37.ms  ttl=300    74.125.29.100, 74.125.29.101, 74.125.29.102, 74.125.29.113, 74.125.29.138, 74.125.29.139  (2nd query TTL 298served from cache+    Google       NOERROR     16.ms  ttl=300    74.125.29.100, 74.125.29.101, 74.125.29.102, 74.125.29.113, 74.125.29.138, 74.125.29.139  (2nd query TTL 300unchanged
-    Cloudflare   NOERROR      9.ms  ttl=59     74.125.29.100, 74.125.29.101, 74.125.29.102, 74.125.29.113, 74.125.29.138, 74.125.29.139  (2nd query TTL 59: unchanged) +    Cloudflare   NOERROR      9.ms  ttl=268    74.125.29.100, 74.125.29.101, 74.125.29.102, 74.125.29.113, 74.125.29.138, 74.125.29.139  (2nd query TTL 268: unchanged) 
-    Quad9        NOERROR     15.ms  ttl=123    142.251.14.100, 142.251.14.101, 142.251.14.102, 142.251.14.113, 142.251.14.138, 142.251.14.139  (2nd query TTL 59served from cache)+    Quad9        NOERROR     14.ms  ttl=90     192.178.183.100, 192.178.183.101, 192.178.183.102, 192.178.183.113, 192.178.183.138, 192.178.183.139  (2nd query TTL 90unchanged)
  
 aaplimg.com   -> no-A-record aaplimg.com   -> no-A-record
-    Google       NOERROR     12.ms  ttl=-      (no A record) +    Google       NOERROR     13.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) +    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     14.ms  ttl=-      (no A record)+    Quad9        NOERROR     15.ms  ttl=-      (no A record)
  
 microsoftonline.com   -> no-A-record microsoftonline.com   -> no-A-record
-    Google       NOERROR     11.ms  ttl=-      (no A record) +    Google       NOERROR     12.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     10.9 ms  ttl=-      (no A record) +    Cloudflare   NOERROR      9.9 ms  ttl=-      (no A record) 
-    Quad9        NOERROR     13.ms  ttl=-      (no A record)+    Quad9        NOERROR     14.ms  ttl=-      (no A record)
  
 netflix.com   -> partial netflix.com   -> partial
-    Google       NOERROR     12.ms  ttl=60     18.200.8.190, 54.155.246.232, 54.73.148.110  (2nd query TTL 60: unchanged) +    Google       NOERROR     16.ms  ttl=60     52.214.181.141, 54.170.196.176, 54.246.79. (2nd query TTL 60: unchanged) 
-    Cloudflare   NOERROR      9.ms  ttl=45     18.200.8.190, 54.155.246.232, 54.73.148.110 +    Cloudflare   NOERROR     11.ms  ttl=58     18.200.8.190, 54.155.246.232, 54.73.148.110  (2nd query TTL 8: served from cache) 
-    Quad9        NOERROR     13.ms  ttl=12     3.251.50.149, 54.155.178.5, 54.74.73.31  (2nd query TTL 9: served from cache)+    Quad9        NOERROR     15.ms  ttl=44     18.200.8.190, 54.155.246.232, 54.73.148.110  (2nd query TTL 37: served from cache)
  
 office.net   -> no-A-record office.net   -> no-A-record
-    Google       NOERROR     11.ms  ttl=-      (no A record) +    Google       NOERROR     11.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) +    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     15.ms  ttl=-      (no A record)+    Quad9        NOERROR     15.ms  ttl=-      (no A record)
  
 trafficmanager.net   -> no-A-record trafficmanager.net   -> no-A-record
-    Google       NOERROR     12.ms  ttl=-      (no A record) +    Google       NOERROR     12.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR      9.ms  ttl=-      (no A record) +    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     16.ms  ttl=-      (no A record)+    Quad9        NOERROR     14.ms  ttl=-      (no A record)
  
 gandi.net   -> identical gandi.net   -> identical
-    Google       NOERROR     36.ms  ttl=600    217.70.185.65  (2nd query TTL 600: unchanged) +    Google       NOERROR     36.ms  ttl=600    217.70.185.65  (2nd query TTL 600: unchanged) 
-    Cloudflare   NOERROR     22.5 ms  ttl=600    217.70.185.65  (2nd query TTL 600: unchanged) +    Cloudflare   NOERROR     23.5 ms  ttl=600    217.70.185.65  (2nd query TTL 600: unchanged) 
-    Quad9        NOERROR     33.ms  ttl=600    217.70.185.65  (2nd query TTL 600unchanged)+    Quad9        NOERROR     40.ms  ttl=600    217.70.185.65  (2nd query TTL 217served from cache)
  
 sharepoint.com   -> identical sharepoint.com   -> identical
-    Google       NOERROR     11.ms  ttl=1692   13.107.136.10, 13.107.138.10 +    Google       NOERROR     10.ms  ttl=1250   13.107.136.10, 13.107.138.10  (2nd query TTL 1087: served from cache) 
-    Cloudflare   NOERROR      9.ms  ttl=3368   13.107.136.10, 13.107.138.10  (2nd query TTL 3367served from cache+    Cloudflare   NOERROR     10.ms  ttl=2067   13.107.136.10, 13.107.138.10  (2nd query TTL 2067unchanged
-    Quad9        NOERROR     15.ms  ttl=3279   13.107.136.10, 13.107.138.10  (2nd query TTL 1068: served from cache)+    Quad9        NOERROR     15.ms  ttl=2089   13.107.136.10, 13.107.138.10  (2nd query TTL 2020: served from cache)
  
 digicert.com   -> identical digicert.com   -> identical
-    Google       NOERROR     10.ms  ttl=37     45.60.121.229, 45.60.131.229 +    Google       NOERROR     12.ms  ttl=233    45.60.121.229, 45.60.131.229  (2nd query TTL 110: served from cache) 
-    Cloudflare   NOERROR      8.ms  ttl=124    45.60.121.229, 45.60.131.229  (2nd query TTL 123served from cache+    Cloudflare   NOERROR      8.ms  ttl=36     45.60.121.229, 45.60.131.229  (2nd query TTL 36unchanged
-    Quad9        NOERROR     14.3 ms  ttl=41     45.60.121.229, 45.60.131.229  (2nd query TTL 37: served from cache)+    Quad9        NOERROR     14.3 ms  ttl=38     45.60.121.229, 45.60.131.229
  
 youtu.be   -> partial youtu.be   -> partial
-    Google       NOERROR     41.7 ms  ttl=300    74.125.29.136, 74.125.29.190, 74.125.29.91, 74.125.29.93  (2nd query TTL 300: unchanged) +    Google       NOERROR     24.7 ms  ttl=300    74.125.29.136, 74.125.29.190, 74.125.29.91, 74.125.29.93  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR     10.ms  ttl=203    74.125.29.136, 74.125.29.190, 74.125.29.91, 74.125.29.93  (2nd query TTL 185: served from cache) +    Cloudflare   NOERROR     10.ms  ttl=66     74.125.29.136, 74.125.29.190, 74.125.29.91, 74.125.29.93  (2nd query TTL 47: served from cache) 
-    Quad9        NOERROR     14.ms  ttl=183    142.251.14.136, 142.251.14.190, 142.251.14.91, 142.251.14.93  (2nd query TTL 9: served from cache)+    Quad9        NOERROR     14.ms  ttl=98     142.250.154.136, 142.250.154.190, 142.250.154.91, 142.250.154.93
  
 wordpress.org   -> identical wordpress.org   -> identical
-    Google       NOERROR     10.ms  ttl=80     66.6.42.252  (2nd query TTL 80: unchanged) +    Google       NOERROR     10.ms  ttl=73     66.6.42.252  (2nd query TTL 73: unchanged) 
-    Cloudflare   NOERROR      9.ms  ttl=310    66.6.42.252 +    Cloudflare   NOERROR      9.ms  ttl=328    66.6.42.252  (2nd query TTL 134: served from cache) 
-    Quad9        NOERROR     13.ms  ttl=61     66.6.42.252  (2nd query TTL 14: served from cache)+    Quad9        NOERROR     15.ms  ttl=52     66.6.42.252
  
 skype.com   -> identical skype.com   -> identical
-    Google       NOERROR     10.ms  ttl=1974   20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 851: served from cache) +    Google       NOERROR     10.ms  ttl=183    20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171 
-    Cloudflare   NOERROR     10.ms  ttl=545    20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 545: unchanged) +    Cloudflare   NOERROR      9.ms  ttl=26     20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171 
-    Quad9        NOERROR     15.ms  ttl=3405   20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 3399: served from cache)+    Quad9        NOERROR     14.ms  ttl=1825   20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171
  
 cloud.microsoft   -> identical cloud.microsoft   -> identical
-    Google       NOERROR     11.9 ms  ttl=156    20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171 +    Google       NOERROR      9.1 ms  ttl=97     20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 97: unchanged) 
-    Cloudflare   NOERROR      9.ms  ttl=171    20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 171: unchanged) +    Cloudflare   NOERROR     10.ms  ttl=155    20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171 
-    Quad9        NOERROR     16.ms  ttl=62     20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171+    Quad9        NOERROR     13.ms  ttl=157    20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171
  
 goo.gl   -> disjoint goo.gl   -> disjoint
-    Google       NOERROR     38.ms  ttl=300    74.125.29.100, 74.125.29.101, 74.125.29.102, 74.125.29.113, 74.125.29.138, 74.125.29.139  (2nd query TTL 300: unchanged) +    Google       NOERROR     25.ms  ttl=300    74.125.29.100, 74.125.29.101, 74.125.29.102, 74.125.29.113, 74.125.29.138, 74.125.29.139  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR     11.ms  ttl=55     172.217.208.100, 172.217.208.101, 172.217.208.102, 172.217.208.113, 172.217.208.138, 172.217.208.139 +    Cloudflare   NOERROR      8.ms  ttl=280    172.217.208.100, 172.217.208.101, 172.217.208.102, 172.217.208.113, 172.217.208.138, 172.217.208.139  (2nd query TTL 280: unchanged) 
-    Quad9        NOERROR     25.ms  ttl=300    142.250.154.100, 142.250.154.101, 142.250.154.102, 142.250.154.113, 142.250.154.138, 142.250.154.139  (2nd query TTL 59served from cache)+    Quad9        NOERROR     15.ms  ttl=29     142.251.13.100, 142.251.13.101, 142.251.13.102, 142.251.13.113, 142.251.13.138, 142.251.13.139  (2nd query TTL 29unchanged)
  
 cloudfront.net   -> no-A-record cloudfront.net   -> no-A-record
-    Google       NOERROR     10.ms  ttl=-      (no A record) +    Google       NOERROR     12.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     19.ms  ttl=-      (no A record) +    Cloudflare   NOERROR     11.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     14.ms  ttl=-      (no A record)+    Quad9        NOERROR     17.ms  ttl=-      (no A record)
  
 googledomains.com   -> identical googledomains.com   -> identical
-    Google       NOERROR     25.ms  ttl=300    216.239.32.29  (2nd query TTL 300: unchanged) +    Google       NOERROR     32.ms  ttl=300    216.239.32.29  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR     17.ms  ttl=300    216.239.32.29  (2nd query TTL 300unchanged+    Cloudflare   NOERROR     23.ms  ttl=300    216.239.32.29  (2nd query TTL 60served from cache
-    Quad9        NOERROR     22.7 ms  ttl=300    216.239.32.29  (2nd query TTL 300: unchanged)+    Quad9        NOERROR     26.7 ms  ttl=300    216.239.32.29  (2nd query TTL 300: unchanged)
  
 x.com   -> partial x.com   -> partial
-    Google       NOERROR      9.ms  ttl=134    172.66.0.227 +    Google       NOERROR      9.ms  ttl=75     172.66.0.227  (2nd query TTL 74: served from cache) 
-    Cloudflare   NOERROR     11.ms  ttl=210    172.66.0.227  (2nd query TTL 47: served from cache) +    Cloudflare   NOERROR      9.ms  ttl=104    162.159.140.229  (2nd query TTL 103: served from cache) 
-    Quad9        NOERROR     14.ms  ttl=44     162.159.140.229  (2nd query TTL 44unchanged)+    Quad9        NOERROR     15.ms  ttl=143    162.159.140.229  (2nd query TTL 89served from cache)
  
 tiktok.com   -> disjoint tiktok.com   -> disjoint
-    Google       NOERROR     17.ms  ttl=20     2.21.22.17, 2.21.22.56  (2nd query TTL 20: unchanged) +    Google       NOERROR     23.ms  ttl=20     2.21.22.17, 2.21.22.56  (2nd query TTL 20: unchanged) 
-    Cloudflare   NOERROR      9.ms  ttl=7      104.109.250.146, 104.109.250.172  (2nd query TTL 3served from cache+    Cloudflare   NOERROR     10.ms  ttl=13     104.109.250.146, 104.109.250.172  (2nd query TTL 13unchanged
-    Quad9        NOERROR     14.ms  ttl=16     2.16.1.1472.16.1.1702.16.1.219, 2.16.1.225  (2nd query TTL 16: unchanged)+    Quad9        NOERROR     14.ms  ttl=1      23.36.162.19923.36.162.20723.36.162.209, 23.36.162.213, 23.36.162.214, 23.36.162.215, 23.36.162.219, 23.36.162.221  (2nd query TTL 1: unchanged)
  
 pinterest.com   -> identical pinterest.com   -> identical
-    Google       NOERROR     11.ms  ttl=592    151.101.0.84, 151.101.128.84, 151.101.192.84, 151.101.64.84  (2nd query TTL 457served from cache+    Google       NOERROR     12.ms  ttl=316    151.101.0.84, 151.101.128.84, 151.101.192.84, 151.101.64.84  (2nd query TTL 316unchanged
-    Cloudflare   NOERROR      9.ms  ttl=211    151.101.0.84, 151.101.128.84, 151.101.192.84, 151.101.64.84 +    Cloudflare   NOERROR     10.ms  ttl=308    151.101.0.84, 151.101.128.84, 151.101.192.84, 151.101.64.84 
-    Quad9        NOERROR     13.ms  ttl=339    151.101.0.84, 151.101.128.84, 151.101.192.84, 151.101.64.84  (2nd query TTL 297: served from cache)+    Quad9        NOERROR     14.ms  ttl=169    151.101.0.84, 151.101.128.84, 151.101.192.84, 151.101.64.84
  
 icloud.com   -> identical icloud.com   -> identical
-    Google       NOERROR     10.ms  ttl=110    17.253.144.10  (2nd query TTL 104: served from cache) +    Google       NOERROR      9.ms  ttl=45     17.253.144.10 
-    Cloudflare   NOERROR      9.ms  ttl=406    17.253.144.10  (2nd query TTL 406unchanged+    Cloudflare   NOERROR      9.ms  ttl=493    17.253.144.10  (2nd query TTL 415served from cache
-    Quad9        NOERROR     16.ms  ttl=83     17.253.144.10+    Quad9        NOERROR     14.ms  ttl=278    17.253.144.10  (2nd query TTL 94: served from cache)
  
 whatsapp.com   -> partial whatsapp.com   -> partial
-    Google       NOERROR     13.ms  ttl=60     157.240.17.60  (2nd query TTL 60: unchanged) +    Google       NOERROR     11.ms  ttl=36     157.240.17.60 
-    Cloudflare   NOERROR     10.ms  ttl=56     157.240.17.60  (2nd query TTL 52: served from cache) +    Cloudflare   NOERROR     10.ms  ttl=16     157.240.17.60 
-    Quad9        NOERROR     14.ms  ttl=19     157.240.0.60  (2nd query TTL 11: served from cache)+    Quad9        NOERROR     17.ms  ttl=21     157.240.0.60  (2nd query TTL 4: served from cache)
  
 roblox.com   -> identical roblox.com   -> identical
-    Google       NOERROR      9.ms  ttl=11     128.116.44.3  (2nd query TTL 5: served from cache) +    Google       NOERROR     20.ms  ttl=31     128.116.5.3  (2nd query TTL 20: served from cache) 
-    Cloudflare   NOERROR     10.ms  ttl=23     128.116.44.3 +    Cloudflare   NOERROR     11.ms  ttl=20     128.116.5.3 
-    Quad9        NOERROR     14.ms  ttl=49     128.116.44.3  (2nd query TTL 14: served from cache)+    Quad9        NOERROR     15.ms  ttl=45     128.116.5.3  (2nd query TTL 41: served from cache)
  
 yahoo.com   -> identical yahoo.com   -> identical
-    Google       NOERROR     10.ms  ttl=583    74.6.143.25, 74.6.143.26, 74.6.231.20, 74.6.231.21, 98.137.11.163, 98.137.11.164 +    Google       NOERROR     10.ms  ttl=400    74.6.143.25, 74.6.143.26, 74.6.231.20, 74.6.231.21, 98.137.11.163, 98.137.11.164  (2nd query TTL 105: served from cache) 
-    Cloudflare   NOERROR     10.ms  ttl=42     74.6.143.25, 74.6.143.26, 74.6.231.20, 74.6.231.21, 98.137.11.163, 98.137.11.164  (2nd query TTL 42: unchanged) +    Cloudflare   NOERROR      9.ms  ttl=587    74.6.143.25, 74.6.143.26, 74.6.231.20, 74.6.231.21, 98.137.11.163, 98.137.11.164  (2nd query TTL 587: unchanged) 
-    Quad9        NOERROR     14.ms  ttl=739    74.6.143.25, 74.6.143.26, 74.6.231.20, 74.6.231.21, 98.137.11.163, 98.137.11.164+    Quad9        NOERROR     16.ms  ttl=724    74.6.143.25, 74.6.143.26, 74.6.231.20, 74.6.231.21, 98.137.11.163, 98.137.11.164  (2nd query TTL 200: served from cache)
  
 windowsupdate.com   -> no-A-record windowsupdate.com   -> no-A-record
-    Google       NOERROR      9.ms  ttl=-      (no A record) +    Google       NOERROR     11.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR      9.ms  ttl=-      (no A record)+    Cloudflare   NOERROR     11.ms  ttl=-      (no A record)
     Quad9        NOERROR     14.7 ms  ttl=-      (no A record)     Quad9        NOERROR     14.7 ms  ttl=-      (no A record)
  
 cloudflare.net   -> identical cloudflare.net   -> identical
-    Google       NOERROR     19.ms  ttl=300    104.16.208.90, 104.17.156.85  (2nd query TTL 300: unchanged) +    Google       NOERROR     16.ms  ttl=300    104.16.208.90, 104.17.156.85  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR     10.ms  ttl=122    104.16.208.90, 104.17.156.85 +    Cloudflare   NOERROR     11.ms  ttl=91     104.16.208.90, 104.17.156.85 
-    Quad9        NOERROR     14.ms  ttl=51     104.16.208.90, 104.17.156.85+    Quad9        NOERROR     15.ms  ttl=38     104.16.208.90, 104.17.156.85
  
 gvt1.com   -> no-A-record gvt1.com   -> no-A-record
-    Google       NOERROR     25.ms  ttl=-      (no A record) +    Google       NOERROR     42.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR      9.ms  ttl=-      (no A record) +    Cloudflare   NOERROR     11.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     13.ms  ttl=-      (no A record)+    Quad9        NOERROR     15.ms  ttl=-      (no A record)
  
 googlesyndication.com   -> partial googlesyndication.com   -> partial
-    Google       NOERROR     16.6 ms  ttl=300    172.217.208.103, 172.217.208.104, 172.217.208.105, 172.217.208.106, 172.217.208.147, 172.217.208.99  (2nd query TTL 300: unchanged) +    Google       NOERROR     25.6 ms  ttl=300    172.217.208.103, 172.217.208.104, 172.217.208.105, 172.217.208.106, 172.217.208.147, 172.217.208.99  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR     18.ms  ttl=300    172.217.208.103, 172.217.208.104, 172.217.208.105, 172.217.208.106, 172.217.208.147, 172.217.208.99  (2nd query TTL 11served from cache+    Cloudflare   NOERROR     19.ms  ttl=300    172.217.208.103, 172.217.208.104, 172.217.208.105, 172.217.208.106, 172.217.208.147, 172.217.208.99  (2nd query TTL 300unchanged
-    Quad9        NOERROR     15.5 ms  ttl=184    142.250.154.103, 142.250.154.104, 142.250.154.105, 142.250.154.106, 142.250.154.147, 142.250.154.99  (2nd query TTL 184: unchanged)+    Quad9        NOERROR     25.5 ms  ttl=300    142.251.110.103, 142.251.110.104, 142.251.110.105, 142.251.110.106, 142.251.110.147, 142.251.110.99  (2nd query TTL 300: unchanged)
  
 msn.com   -> identical msn.com   -> identical
-    Google       NOERROR     11.ms  ttl=2205   204.79.197.219  (2nd query TTL 1276: served from cache) +    Google       NOERROR     12.ms  ttl=1507   204.79.197.219  (2nd query TTL 523: served from cache) 
-    Cloudflare   NOERROR     15.ms  ttl=3600   204.79.197.219  (2nd query TTL 2297: served from cache) +    Cloudflare   NOERROR     11.ms  ttl=2504   204.79.197.219  (2nd query TTL 687: served from cache) 
-    Quad9        NOERROR     15.ms  ttl=1061   204.79.197.219  (2nd query TTL 2served from cache)+    Quad9        NOERROR     15.ms  ttl=717    204.79.197.219  (2nd query TTL 717unchanged)
  
 spotify.com   -> identical spotify.com   -> identical
-    Google       NOERROR     11.ms  ttl=190    35.186.224.24  (2nd query TTL 190unchanged+    Google       NOERROR     10.ms  ttl=131    35.186.224.24  (2nd query TTL 130served from cache
-    Cloudflare   NOERROR      9.ms  ttl=85     35.186.224.24  (2nd query TTL 79: served from cache) +    Cloudflare   NOERROR      9.ms  ttl=87     35.186.224.24 
-    Quad9        NOERROR     14.ms  ttl=246    35.186.224.24  (2nd query TTL 1: served from cache)+    Quad9        NOERROR     15.ms  ttl=171    35.186.224.24  (2nd query TTL 162: served from cache)
  
 windows.net   -> identical windows.net   -> identical
-    Google       NOERROR     11.ms  ttl=372    20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171 +    Google       NOERROR     12.ms  ttl=48     20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 48: unchanged) 
-    Cloudflare   NOERROR      9.ms  ttl=3291   20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 997served from cache+    Cloudflare   NOERROR      9.ms  ttl=2033   20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 2033unchanged
-    Quad9        NOERROR     14.ms  ttl=1680   20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 1678served from cache)+    Quad9        NOERROR     15.ms  ttl=632    20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 632unchanged)
  
 ntp.org   -> identical ntp.org   -> identical
-    Google       NOERROR     10.ms  ttl=2418   204.93.207.22, 209.148.110.246  (2nd query TTL 840: served from cache) +    Google       NOERROR     10.ms  ttl=1158   204.93.207.22, 209.148.110.246 
-    Cloudflare   NOERROR      9.ms  ttl=1117   204.93.207.22, 209.148.110.246  (2nd query TTL 319served from cache+    Cloudflare   NOERROR     11.ms  ttl=3461   204.93.207.22, 209.148.110.246  (2nd query TTL 3461unchanged
-    Quad9        NOERROR     15.ms  ttl=2202   204.93.207.22, 209.148.110.246  (2nd query TTL 1666: served from cache)+    Quad9        NOERROR     15.ms  ttl=2375   204.93.207.22, 209.148.110.246
  
 adobe.com   -> disjoint adobe.com   -> disjoint
-    Google       NOERROR     20.ms  ttl=20     92.123.27.153, 92.123.27.160  (2nd query TTL 20: unchanged) +    Google       NOERROR     17.ms  ttl=20     92.123.27.153, 92.123.27.168, 92.123.27.169  (2nd query TTL 20: unchanged) 
-    Cloudflare   NOERROR     10.ms  ttl=12     23.7.245.131, 23.7.245.197 +    Cloudflare   NOERROR     11.ms  ttl=3      23.36.163.27, 23.50.131.121  (2nd query TTL 2: served from cache) 
-    Quad9        NOERROR     15.ms  ttl=20     2.19.126.138, 2.19.126.158  (2nd query TTL 3: served from cache)+    Quad9        NOERROR     15.ms  ttl=11     2.19.126.138, 2.19.126.158  (2nd query TTL 6: served from cache)
  
 myfritz.net   -> identical myfritz.net   -> identical
-    Google       NOERROR     10.ms  ttl=7680   212.42.244.100+    Google       NOERROR     10.ms  ttl=5152   212.42.244.100
     Cloudflare   NOERROR     26.1 ms  ttl=86400  212.42.244.100  (2nd query TTL 86400: unchanged)     Cloudflare   NOERROR     26.1 ms  ttl=86400  212.42.244.100  (2nd query TTL 86400: unchanged)
-    Quad9        NOERROR     16.ms  ttl=34585  212.42.244.100+    Quad9        NOERROR     15.ms  ttl=40413  212.42.244.100  (2nd query TTL 31027: served from cache)
  
 pv-cdn.net   -> no-A-record pv-cdn.net   -> no-A-record
-    Google       NOERROR     10.ms  ttl=-      (no A record) +    Google       NOERROR     12.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR      9.ms  ttl=-      (no A record) +    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     14.ms  ttl=-      (no A record)+    Quad9        NOERROR     14.ms  ttl=-      (no A record)
  
 wa.me   -> partial wa.me   -> partial
-    Google       NOERROR     15.ms  ttl=60     157.240.17.60  (2nd query TTL 60: unchanged) +    Google       NOERROR     20.ms  ttl=60     157.240.17.60  (2nd query TTL 60: unchanged) 
-    Cloudflare   NOERROR     11.ms  ttl=39     157.240.17.60  (2nd query TTL 23served from cache+    Cloudflare   NOERROR      9.ms  ttl=49     157.240.17.60  (2nd query TTL 49unchanged
-    Quad9        NOERROR     15.ms  ttl=45     157.240.253.60  (2nd query TTL 13: served from cache)+    Quad9        NOERROR     14.ms  ttl=21     157.240.0.60
  
 cdninstagram.com   -> no-A-record cdninstagram.com   -> no-A-record
-    Google       NOERROR     14.ms  ttl=-      (no A record) +    Google       NOERROR     13.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) +    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     14.ms  ttl=-      (no A record)+    Quad9        NOERROR     13.ms  ttl=-      (no A record)
  
 nginx.org   -> partial nginx.org   -> partial
-    Google       NOERROR     11.ms  ttl=18     52.58.199.22  (2nd query TTL 18: unchanged) +    Google       NOERROR     10.ms  ttl=9      3.125.197.172  (2nd query TTL 9: unchanged) 
-    Cloudflare   NOERROR     10.ms  ttl=60     52.58.199.22  (2nd query TTL 23: served from cache) +    Cloudflare   NOERROR      9.ms  ttl=19     52.58.199.22 
-    Quad9        NOERROR     14.ms  ttl=10     3.125.197.172  (2nd query TTL 10: unchanged)+    Quad9        NOERROR     16.ms  ttl=18     3.125.197.172
  
 akam.net   -> no-A-record akam.net   -> no-A-record
-    Google       NOERROR     28.6 ms  ttl=-      (no A record) +    Google       NOERROR     47.6 ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     11.7 ms  ttl=-      (no A record) +    Cloudflare   NOERROR     10.7 ms  ttl=-      (no A record) 
-    Quad9        NOERROR     17.ms  ttl=-      (no A record)+    Quad9        NOERROR     17.ms  ttl=-      (no A record)
  
 tiktokcdn.com   -> no-A-record tiktokcdn.com   -> no-A-record
-    Google       NOERROR     11.9 ms  ttl=-      (no A record) +    Google       NOERROR      9.7 ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) +    Cloudflare   NOERROR      9.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     15.ms  ttl=-      (no A record)+    Quad9        NOERROR     14.ms  ttl=-      (no A record)
  
 chatgpt.com   -> identical chatgpt.com   -> identical
-    Google       NOERROR     26.ms  ttl=300    104.18.32.47, 172.64.155.209  (2nd query TTL 300: unchanged) +    Google       NOERROR     28.ms  ttl=300    104.18.32.47, 172.64.155.209  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR     10.ms  ttl=6      104.18.32.47, 172.64.155.209 +    Cloudflare   NOERROR      9.ms  ttl=254    104.18.32.47, 172.64.155.209  (2nd query TTL 253: served from cache) 
-    Quad9        NOERROR     15.ms  ttl=260    104.18.32.47, 172.64.155.209  (2nd query TTL 23served from cache)+    Quad9        NOERROR     14.ms  ttl=135    104.18.32.47, 172.64.155.209  (2nd query TTL 135unchanged)
  
 zoom.us   -> identical zoom.us   -> identical
-    Google       NOERROR     13.ms  ttl=60     170.114.52.2  (2nd query TTL 60: unchanged) +    Google       NOERROR     13.ms  ttl=60     170.114.52.2  (2nd query TTL 60: unchanged) 
-    Cloudflare   NOERROR     11.ms  ttl=46     170.114.52.2  (2nd query TTL 46: unchanged) +    Cloudflare   NOERROR     10.ms  ttl=20     170.114.52.2 
-    Quad9        NOERROR     14.ms  ttl=44     170.114.52.2  (2nd query TTL 44: unchanged)+    Quad9        NOERROR     14.ms  ttl=22     170.114.52.2
  
 tiktokv.com   -> disjoint tiktokv.com   -> disjoint
-    Google       NOERROR      9.ms  ttl=     104.126.37.128, 104.126.37.129, 104.126.37.139, 104.126.37.145, 104.126.37.153, 104.126.37.160, 104.126.37.161, 104.126.37.168, 104.126.37.185 +    Google       NOERROR     10.ms  ttl=     104.126.37.128, 104.126.37.129, 104.126.37.131, 104.126.37.153, 104.126.37.155, 104.126.37.161, 104.126.37.179, 104.126.37.184, 104.126.37.186  (2nd query TTL 7: served from cache) 
-    Cloudflare   NOERROR     10.ms  ttl=13     2.21.22.27, 2.21.22.32, 2.21.22.40, 2.21.22.41, 2.21.22.56, 2.21.22.57, 2.21.22.58, 23.10.249.56, 23.10.249.82  (2nd query TTL 2: served from cache) +    Cloudflare   NOERROR      9.ms  ttl=8      2.21.22.27, 2.21.22.34, 2.21.22.40, 2.21.22.41, 2.21.22.56, 2.21.22.58, 2.21.22.8, 23.10.249.81, 23.10.249.82  (2nd query TTL 3: served from cache) 
-    Quad9        NOERROR     14.ms  ttl=12     2.18.64.11, 2.18.64.12, 2.18.64.16, 2.18.64.192.18.64.222.18.64.282.18.64.322.18.64.332.18.64. (2nd query TTL 9: served from cache)+    Quad9        NOERROR     15.ms  ttl=12     2.20.142.129, 2.20.142.136, 2.20.142.144, 2.20.142.16092.122.215.292.122.215.5992.122.215.7292.122.215.7392.122.215.93  (2nd query TTL 11: served from cache)
  
 vimeo.com   -> identical vimeo.com   -> identical
-    Google       NOERROR      9.ms  ttl=168    162.159.128.61, 162.159.138.60 +    Google       NOERROR     11.ms  ttl=397    162.159.128.61, 162.159.138.60  (2nd query TTL 397: unchanged) 
-    Cloudflare   NOERROR      9.ms  ttl=348    162.159.128.61, 162.159.138.60  (2nd query TTL 312served from cache+    Cloudflare   NOERROR     10.ms  ttl=799    162.159.128.61, 162.159.138.60  (2nd query TTL 799unchanged
-    Quad9        NOERROR     14.ms  ttl=882    162.159.128.61, 162.159.138.60  (2nd query TTL 177: served from cache)+    Quad9        NOERROR     15.ms  ttl=523    162.159.128.61, 162.159.138.60  (2nd query TTL 153: served from cache)
  
 edgekey.net   -> no-A-record edgekey.net   -> no-A-record
-    Google       NOERROR     12.ms  ttl=-      (no A record) +    Google       NOERROR     11.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     11.ms  ttl=-      (no A record) +    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     16.ms  ttl=-      (no A record)+    Quad9        NOERROR     15.ms  ttl=-      (no A record)
  
 baidu.com   -> identical baidu.com   -> identical
-    Google       NOERROR     12.ms  ttl=352    110.242.74.102, 111.63.65.103, 111.63.65.247, 124.237.177.164  (2nd query TTL 83served from cache+    Google       NOERROR     10.ms  ttl=502    110.242.74.102, 111.63.65.103, 111.63.65.247, 124.237.177.164  (2nd query TTL 502unchanged
-    Cloudflare   NOERROR     10.ms  ttl=55     110.242.74.102, 111.63.65.103, 111.63.65.247, 124.237.177.164  (2nd query TTL 55: unchanged) +    Cloudflare   NOERROR     10.ms  ttl=264    110.242.74.102, 111.63.65.103, 111.63.65.247, 124.237.177.164 
-    Quad9        NOERROR     15.ms  ttl=419    110.242.74.102, 111.63.65.103, 111.63.65.247, 124.237.177.164  (2nd query TTL 203served from cache)+    Quad9        NOERROR     15.ms  ttl=268    110.242.74.102, 111.63.65.103, 111.63.65.247, 124.237.177.164  (2nd query TTL 268unchanged)
  
 cloudflare-dns.com   -> identical cloudflare-dns.com   -> identical
-    Google       NOERROR     16.ms  ttl=300    104.16.248.249, 104.16.249.249  (2nd query TTL 300: unchanged) +    Google       NOERROR     17.ms  ttl=300    104.16.248.249, 104.16.249.249  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR     11.ms  ttl=86     104.16.248.249, 104.16.249.249 +    Cloudflare   NOERROR      9.ms  ttl=84     104.16.248.249, 104.16.249.249 
-    Quad9        NOERROR     14.ms  ttl=156    104.16.248.249, 104.16.249.249+    Quad9        NOERROR     14.ms  ttl=51     104.16.248.249, 104.16.249.249
  
 gvt2.com   -> no-A-record gvt2.com   -> no-A-record
-    Google       NOERROR     19.ms  ttl=-      (no A record) +    Google       NOERROR     18.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR      9.ms  ttl=-      (no A record) +    Cloudflare   NOERROR     17.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     15.ms  ttl=-      (no A record)+    Quad9        NOERROR     15.ms  ttl=-      (no A record)
  
 yandex.net   -> identical yandex.net   -> identical
-    Google       NOERROR     11.ms  ttl=433    213.180.204.242  (2nd query TTL 365served from cache+    Google       NOERROR     11.ms  ttl=54     213.180.204.242  (2nd query TTL 54unchanged
-    Cloudflare   NOERROR     57.ms  ttl=600    213.180.204.242  (2nd query TTL 368served from cache+    Cloudflare   NOERROR     10.ms  ttl=547    213.180.204.242  (2nd query TTL 547unchanged
-    Quad9        NOERROR     55.ms  ttl=600    213.180.204.242  (2nd query TTL 503served from cache)+    Quad9        NOERROR     15.ms  ttl=6      213.180.204.242  (2nd query TTL 6unchanged)
  
 windows.com   -> identical windows.com   -> identical
-    Google       NOERROR     10.ms  ttl=364    20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171 +    Google       NOERROR     10.ms  ttl=2705   20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 623: served from cache) 
-    Cloudflare   NOERROR     13.ms  ttl=2688   20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 77: served from cache) +    Cloudflare   NOERROR     10.ms  ttl=2600   20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 2420: served from cache) 
-    Quad9        NOERROR     16.ms  ttl=719    20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171+    Quad9        NOERROR     15.ms  ttl=2531   20.112.250.133, 20.231.239.246, 20.236.44.162, 20.70.246.20, 20.76.201.171  (2nd query TTL 107: served from cache)
  
 root-servers.net   -> no-A-record root-servers.net   -> no-A-record
-    Google       NOERROR     17.ms  ttl=-      (no A record) +    Google       NOERROR     18.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) +    Cloudflare   NOERROR     10.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     18.6 ms  ttl=-      (no A record)+    Quad9        NOERROR     15.6 ms  ttl=-      (no A record)
  
 openai.com   -> identical openai.com   -> identical
-    Google       NOERROR     13.ms  ttl=60     104.18.33.45, 172.64.154.211  (2nd query TTL 60: unchanged) +    Google       NOERROR     10.ms  ttl=1      104.18.33.45, 172.64.154.211  (2nd query TTL 1: unchanged) 
-    Cloudflare   NOERROR     17.ms  ttl=60     104.18.33.45, 172.64.154.211  (2nd query TTL 60unchanged+    Cloudflare   NOERROR      8.ms  ttl=60     104.18.33.45, 172.64.154.211  (2nd query TTL 26served from cache
-    Quad9        NOERROR     15.ms  ttl=23     104.18.33.45, 172.64.154.211+    Quad9        NOERROR     14.ms  ttl=5      104.18.33.45, 172.64.154.211  (2nd query TTL 5: unchanged)
  
 gwfb.net   -> no-A-record gwfb.net   -> no-A-record
-    Google       NOERROR    277.ms  ttl=-      (no A record) +    Google       NOERROR    402.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR    505.ms  ttl=-      (no A record) +    Cloudflare   NOERROR    762.ms  ttl=-      (no A record) 
-    Quad9        NOERROR    215.ms  ttl=-      (no A record)+    Quad9        NOERROR    261.ms  ttl=-      (no A record)
  
 ytimg.com   -> no-A-record ytimg.com   -> no-A-record
-    Google       NOERROR     28.ms  ttl=-      (no A record) +    Google       NOERROR     29.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR     24.8 ms  ttl=-      (no A record) +    Cloudflare   NOERROR      9.8 ms  ttl=-      (no A record) 
-    Quad9        NOERROR     14.ms  ttl=-      (no A record)+    Quad9        NOERROR     14.ms  ttl=-      (no A record)
  
 workers.dev   -> identical workers.dev   -> identical
-    Google       NOERROR     15.ms  ttl=300    104.18.12.15, 104.18.13.15  (2nd query TTL 300: unchanged) +    Google       NOERROR     13.ms  ttl=300    104.18.12.15, 104.18.13.15  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR     11.ms  ttl=300    104.18.12.15, 104.18.13.15  (2nd query TTL 300unchanged+    Cloudflare   NOERROR     13.ms  ttl=300    104.18.12.15, 104.18.13.15  (2nd query TTL 257served from cache
-    Quad9        NOERROR     22.ms  ttl=300    104.18.12.15, 104.18.13.15  (2nd query TTL 300unchanged)+    Quad9        NOERROR     18.ms  ttl=300    104.18.12.15, 104.18.13.15  (2nd query TTL 160served from cache)
  
 qq.com   -> identical qq.com   -> identical
-    Google       NOERROR     10.ms  ttl=47     113.108.81.189, 123.150.76.218, 203.205.254.157 +    Google       NOERROR    229.ms  ttl=600    113.108.81.189, 123.150.76.218, 203.205.254.157  (2nd query TTL 597: served from cache) 
-    Cloudflare   NOERROR     10.ms  ttl=579    113.108.81.189, 123.150.76.218, 203.205.254.157  (2nd query TTL 357served from cache+    Cloudflare   NOERROR      9.ms  ttl=299    113.108.81.189, 123.150.76.218, 203.205.254.157  (2nd query TTL 299unchanged
-    Quad9        NOERROR     17.ms  ttl=274    113.108.81.189, 123.150.76.218, 203.205.254.157  (2nd query TTL 206: served from cache)+    Quad9        NOERROR     15.ms  ttl=199    113.108.81.189, 123.150.76.218, 203.205.254.157  (2nd query TTL 147: served from cache)
  
 opera.com   -> identical opera.com   -> identical
-    Google       NOERROR     34.ms  ttl=600    185.26.182.103, 185.26.182.104  (2nd query TTL 154served from cache+    Google       NOERROR     22.ms  ttl=600    185.26.182.103, 185.26.182.104  (2nd query TTL 600unchanged
-    Cloudflare   NOERROR     25.ms  ttl=600    185.26.182.103, 185.26.182.104  (2nd query TTL 128served from cache+    Cloudflare   NOERROR     22.ms  ttl=600    185.26.182.103, 185.26.182.104  (2nd query TTL 600unchanged
-    Quad9        NOERROR     16.0 ms  ttl=182    185.26.182.103, 185.26.182.104+    Quad9        NOERROR     14.0 ms  ttl=9      185.26.182.103, 185.26.182.104
  
 samsung.com   -> identical samsung.com   -> identical
-    Google       NOERROR     11.ms  ttl=133    211.45.27.231  (2nd query TTL 133: unchanged) +    Google       NOERROR      9.ms  ttl=155    211.45.27.231 
-    Cloudflare   NOERROR      9.ms  ttl=110    211.45.27.231 +    Cloudflare   NOERROR      9.ms  ttl=176    211.45.27.231 
-    Quad9        NOERROR     15.ms  ttl=259    211.45.27.231  (2nd query TTL 89: served from cache)+    Quad9        NOERROR     13.ms  ttl=125    211.45.27.231
  
 blogspot.com   -> partial blogspot.com   -> partial
-    Google       NOERROR     19.ms  ttl=300    74.125.29.191  (2nd query TTL 300: unchanged) +    Google       NOERROR     24.ms  ttl=300    74.125.29.191  (2nd query TTL 300: unchanged) 
-    Cloudflare   NOERROR     10.ms  ttl=221    74.125.29.191  (2nd query TTL 221: unchanged) +    Cloudflare   NOERROR     16.ms  ttl=300    74.125.29.191  (2nd query TTL 300: unchanged) 
-    Quad9        NOERROR     14.ms  ttl=52     142.251.110.191+    Quad9        NOERROR     14.ms  ttl=28     142.251.20.191
  
 mozilla.org   -> identical mozilla.org   -> identical
-    Google       NOERROR     11.ms  ttl=218    35.190.14.201  (2nd query TTL 218: unchanged) +    Google       NOERROR     10.ms  ttl=57     35.190.14.201  (2nd query TTL 57: unchanged) 
-    Cloudflare   NOERROR      9.ms  ttl=420    35.190.14.201 +    Cloudflare   NOERROR      9.ms  ttl=318    35.190.14.201  (2nd query TTL 17: served from cache) 
-    Quad9        NOERROR     14.ms  ttl=221    35.190.14.201+    Quad9        NOERROR     14.ms  ttl=582    35.190.14.201  (2nd query TTL 582: unchanged)
  
 nginx.com   -> identical nginx.com   -> identical
-    Google       NOERROR     11.ms  ttl=218    159.60.134.0  (2nd query TTL 165served from cache+    Google       NOERROR     11.ms  ttl=123    159.60.134.0  (2nd query TTL 123unchanged
-    Cloudflare   NOERROR     11.ms  ttl=353    159.60.134.0  (2nd query TTL 353: unchanged) +    Cloudflare   NOERROR     10.ms  ttl=299    159.60.134.0 
-    Quad9        NOERROR     14.ms  ttl=158    159.60.134.0+    Quad9        NOERROR     16.ms  ttl=101    159.60.134.0
  
 wordpress.com   -> identical wordpress.com   -> identical
-    Google       NOERROR     12.ms  ttl=163    192.0.78.17, 192.0.78.9  (2nd query TTL 131: served from cache) +    Google       NOERROR      9.ms  ttl=95     192.0.78.17, 192.0.78.9 
-    Cloudflare   NOERROR      9.ms  ttl=103    192.0.78.17, 192.0.78.9  (2nd query TTL 83: served from cache) +    Cloudflare   NOERROR     10.ms  ttl=51     192.0.78.17, 192.0.78.9 
-    Quad9        NOERROR     14.4 ms  ttl=50     192.0.78.17, 192.0.78.9+    Quad9        NOERROR     16.4 ms  ttl=209    192.0.78.17, 192.0.78.9  (2nd query TTL 12: served from cache)
  
 edgesuite.net   -> no-A-record edgesuite.net   -> no-A-record
-    Google       NOERROR     12.ms  ttl=-      (no A record)+    Google       NOERROR     13.ms  ttl=-      (no A record)
     Cloudflare   NOERROR     10.5 ms  ttl=-      (no A record)     Cloudflare   NOERROR     10.5 ms  ttl=-      (no A record)
-    Quad9        NOERROR     16.ms  ttl=-      (no A record)+    Quad9        NOERROR     15.ms  ttl=-      (no A record)
  
 workbox.dk   -> no-A-record workbox.dk   -> no-A-record
-    Google       NOERROR     55.ms  ttl=-      (no A record) +    Google       NOERROR     11.ms  ttl=-      (no A record) 
-    Cloudflare   NOERROR    133.ms  ttl=-      (no A record) +    Cloudflare   NOERROR    133.ms  ttl=-      (no A record) 
-    Quad9        NOERROR     20.ms  ttl=-      (no A record)+    Quad9        NOERROR     23.ms  ttl=-      (no A record)
  
 yandex.ru   -> identical yandex.ru   -> identical
-    Google       NOERROR     10.ms  ttl=426    5.255.255.77, 77.88.44.55, 77.88.55.88  (2nd query TTL 420served from cache+    Google       NOERROR     11.ms  ttl=360    5.255.255.77, 77.88.44.55, 77.88.55.88  (2nd query TTL 360unchanged
-    Cloudflare   NOERROR     11.ms  ttl=570    5.255.255.77, 77.88.44.55, 77.88.55.88 +    Cloudflare   NOERROR     10.ms  ttl=521    5.255.255.77, 77.88.44.55, 77.88.55.88  (2nd query TTL 285: served from cache) 
-    Quad9        NOERROR     16.ms  ttl=134    5.255.255.77, 77.88.44.55, 77.88.55.88+    Quad9        NOERROR     15.ms  ttl=227    5.255.255.77, 77.88.44.55, 77.88.55.88  (2nd query TTL 95: served from cache)
  
 summary A: all 100 names summary A: all 100 names
   identical        46   46.0%   identical        46   46.0%
-  partial          21   21.0% +  partial          19   19.0% 
-  disjoint             8.0%+  disjoint         10   10.0%
   no-A-record      25   25.0%   no-A-record      25   25.0%
  
 summary B: the 75 names where at least two resolvers returned an address summary B: the 75 names where at least two resolvers returned an address
   identical        46   61.3%   identical        46   61.3%
-  partial          21   28.0+  partial          19   25.3
-  disjoint            10.7%+  disjoint         10   13.3%
   NOT identical    29   38.7%   <- the headline: at least one resolver disagreed with another   NOT identical    29   38.7%   <- the headline: at least one resolver disagreed with another
  
Line 1294: Line 1306:
 </code> </code>
  
-The 28 names with disjoint answers:+The names with fully disjoint answers, in the run below:
  
 <code> <code>
-names +10 names 
-gstatic.com, googlevideo.com, googletagmanager.comgoogleusercontent.com +googleapis.com, youtube.com, googlevideo.com, googletagmanager.com 
-goo.gl, tiktok.com, adobe.comtiktokv.com+googleusercontent.com, appsflyersdk.com, goo.gl, tiktok.com, adobe.com 
 +tiktokv.com
 </code> </code>
  
Line 1333: Line 1346:
 ===== Review log ===== ===== Review log =====
  
-Four review passes. Each reviewer was told explicitly that the author's context+Five review passes plus three rounds of self-review. Each reviewer was told explicitly that the author's context
 may not be exhaustive, and each was handed the page text, the report script and may not be exhaustive, and each was handed the page text, the report script and
 its unedited output, the fold, the quote checker and the external checks. its unedited output, the fold, the quote checker and the external checks.
Line 1375: Line 1388:
  
 ^ Finding ^ Verdict ^ ^ Finding ^ Verdict ^
-| **The published script's ''verdict()'' was wrong, and the page's headline number with it.** It intersected **all** answering resolvers' address sets at once, so with three resolvers, two agreeing exactly and a third differing produced an empty three-way intersection and fell through to ''disjoint'' — contradicting the definition the script prints in its own output and the page repeats. On the committed 100-name run, **17 of the 28** names labelled disjoint had two of three resolvers returning byte-identical addresses. | **Accepted; the most serious finding of the run.** Reproduced independently from the committed JSON before changing anything. ''verdict()'' is now pairwise, with a ''partial'' verdict between ''identical'' and ''disjoint'' and a ''one-answered'' verdict for the case where exactly one resolver returns an address; ''%%--self-test%%'' checks ten cases including ''facebook.com'' and ''wikipedia.org'' from the run that caught it. The measurement was re-run: **identical 46, partial 21, disjoint 8, no-A-record 25**, and the page's headline is now **29 of 75 (38.7%) not identical**, with 8 fully disjoint — replacing the published 28/37.3%. The page now says in the open that the first version was wrong and what it got wrong. |+| **The published script's ''verdict()'' was wrong, and the page's headline number with it.** It intersected **all** answering resolvers' address sets at once, so with three resolvers, two agreeing exactly and a third differing produced an empty three-way intersection and fell through to ''disjoint'' — contradicting the definition the script prints in its own output and the page repeats. On the committed 100-name run, **17 of the 28** names labelled disjoint had two of three resolvers returning byte-identical addresses. | **Accepted; the most serious finding of the run.** Reproduced independently from the committed JSON before changing anything. ''verdict()'' is now pairwise, with a ''partial'' verdict between ''identical'' and ''disjoint'' and a ''one-answered'' verdict for the case where exactly one resolver returns an address; ''%%--self-test%%'' checks ten cases including ''facebook.com'' and ''wikipedia.org'' from the run that caught it. The measurement was re-runthe page's headline is now **not identical, 29 of 75 (38.7%)**, replacing the published 28 / 37.3%. Per-verdict counts are deliberately not restated here — they are in the run output on this page, and see pass 5 for why the split between ''partial'' and ''disjoint'' is not a stable quantity. The page now says in the open that the first version was wrong and what it got wrong. |
 | **"All 7 uses [of fpdns] are pre-2024" is false** — 1 in 2018, 3 in 2023, **3 in 2024**. | Accepted. Reproduced. The row now gives the year breakdown and says what the recent uses are for. The report prints per-year and per-spelling detail for every family the page describes in prose, so this class of sentence is checkable. | | **"All 7 uses [of fpdns] are pre-2024" is false** — 1 in 2018, 3 in 2023, **3 in 2024**. | Accepted. Reproduced. The row now gives the year breakdown and says what the recent uses are for. The report prints per-year and per-spelling detail for every family the page describes in prose, so this class of sentence is checkable. |
 | **''bhaskar2022_many'' does not use RIPE Atlas.** The page said two papers were built on it and named this one; its tools are BreadCrumb, Censys, MaxMind and Go, and its vantage record says //"we send DNS packets from an external measurement vantage point"//. | Accepted, reproduced from the paper's own record. Replaced with four papers that do use it ({[randall2021_home]}, {[moura2019_cache]}, {[aldalky2019_look]}, {[randall2020_trufflehunter]}), and the page now says explicitly that Bhaskar and Pearce do **not** — which is the point, since controlling their own source address is what their result depends on. | | **''bhaskar2022_many'' does not use RIPE Atlas.** The page said two papers were built on it and named this one; its tools are BreadCrumb, Censys, MaxMind and Go, and its vantage record says //"we send DNS packets from an external measurement vantage point"//. | Accepted, reproduced from the paper's own record. Replaced with four papers that do use it ({[randall2021_home]}, {[moura2019_cache]}, {[aldalky2019_look]}, {[randall2020_trufflehunter]}), and the page now says explicitly that Bhaskar and Pearce do **not** — which is the point, since controlling their own source address is what their result depends on. |
Line 1407: Line 1420:
 | The box's footnote credited "the authors' own public write-up" without that write-up having been fetched. | Fixed by fetching it. The APNIC post (Nosyk, 2 September 2025, with Duda and Korczyński) is a better source than the ACM-403 paper and gives quotable figures: //"over 321k DDR-enabled open resolvers"//, Google at 80.8%, top five at 97.4%. Five needles from it are now checked by ''external_checks_dns.sh''. The box also makes the venue point that follows: DDR work in 2025–2026 is in PoPETs, at ANRW and on an operator blog, and this corpus contains **one** of the three. | | The box's footnote credited "the authors' own public write-up" without that write-up having been fetched. | Fixed by fetching it. The APNIC post (Nosyk, 2 September 2025, with Duda and Korczyński) is a better source than the ACM-403 paper and gives quotable figures: //"over 321k DDR-enabled open resolvers"//, Google at 80.8%, top five at 97.4%. Five needles from it are now checked by ''external_checks_dns.sh''. The box also makes the venue point that follows: DDR work in 2025–2026 is in PoPETs, at ANRW and on an operator blog, and this corpus contains **one** of the three. |
 | The code-block builder pinned its example to ''google.com''; on the re-run ''google.com'' came back ''partial'' and the block would have illustrated the wrong verdict under a "disjoint" heading. | Fixed before it shipped: the builder now selects the first stanza whose verdict is ''disjoint'', and the page states that rule. | | The code-block builder pinned its example to ''google.com''; on the re-run ''google.com'' came back ''partial'' and the block would have illustrated the wrong verdict under a "disjoint" heading. | Fixed before it shipped: the builder now selects the first stanza whose verdict is ''disjoint'', and the page states that rule. |
 +
 +==== Pass 4 — figures re-check, after the fixes (sonnet, re-run of pass 2) ====
 +
 +The pass-2 reviewer was re-run against the corrected page and scripts, as the workflow requires for any reviewer whose findings were acted on.
 +
 +^ Finding ^ Verdict ^
 +| **The ''NON_PAPER_FIGURES'' ledger in ''verify_dns_figures.mjs'' was stale in three places, left behind by the very fixes it was checking** — it still said "84 self-tests" (now 85), "35/35 home-grown" (now 34/34), and "28 / 75 / … / 37.3%" for the resolver run, which are the **pre-fix, retracted** verdict numbers. No check broke, because the correct values were independently present via the report; but a ledger whose entire purpose is "which artefact backs this figure" was pointing a future auditor at withdrawn ones. | **Accepted, and fixed at the root rather than patched.** The block now lists **where** each non-corpus figure comes from and never restates its value: a pointer cannot go stale, a copy always will. Two figures then failed the whole-page guard because their values were no longer duplicated anywhere — which is the guard doing its job. The ''robots.txt'' rate is now **derived by ''report_dns.mjs''** instead of being lifted from ''OVERVIEW.md'' (a file the guard does not read), and the ''dnsdb.info'' A record was **removed from the page**: it rotated from ''104.244.14.71'' to ''104.244.14.64'' between two runs an hour apart, which is a poor thing to pin on a page about resolver-dependent answers. |
 +| **The Rapid7 guard's audit table claimed "all ten tuples were read" when the candidate regex matches 13 tuples under 11 spellings.** The missing row is IMC 2016 //Entropy/IP//, tool name ''"Forward DNS dataset"''. It is classified correctly and the family count (8 papers) is right — but the table was not exhaustive while saying it was. | **Accepted.** Reproduced against the raw extraction: 13 tuples, 11 spellings. The provenance table now has all 13 rows, marks the two rows that cover two tuples each, and the count is corrected in the fold comment, the report comment and the prose. This is the review layer catching an **overstatement of the page's own rigour**, which is exactly what the provenance page is most at risk of. |
 +| ''verdict()'' fix confirmed correct and complete: 10/10 self-tests, and an independent re-implementation of the documented definitions reclassified all 100 names in the committed JSON with **zero mismatches** (46 / 21 / 8 / 25, 29 of 75 = 38.7%). ''one-answered'' and ''insufficient'' are reachable and simply do not occur in this run. | No change. |
 +| Total-deadline fix confirmed: ''deadline'' is set once and ''remaining'' recomputed per iteration; a live query to a blackholed TEST-NET-1 address returned at **2.009 s** against a 2.0 s timeout with a useful error string. | No change. |
 +| Population confirmed unmoved by all four fold edits: A=108, B=202, A∩B=66, **DNSPOP=244**. Every page figure matches a fresh script run; ''%%<file>%%'' and ''%%<code>%%'' blocks round-trip byte-for-byte; the code block's example is confirmed the first ''disjoint'' stanza in the current run. | No change. |
 +| The ''frozen2'' snapshots no longer match the live page, because self-review round three was applied after they were taken. | Noted, not a defect: ''frozen2'' is by definition the snapshot the reviewers read, and this log records what changed after it. Flagged here so nobody later cites ''frozen2'' as canonical. |
 +
 +==== Pass 5 — generic, no checklist (fable) ====
 +
 +Read the ''frozen2'' snapshots. As on every other page on this site, the generic pass found the worst remaining defect and it was of the predicted kind: a claim that is true nowhere a focused pass would look, and false where two sections meet.
 +
 +^ Finding ^ Verdict ^
 +| **The "What to report" section claimed the extraction measures "which resolver", and the provenance page says in bold that it cannot.** The page said the schema "has a field for only the first two" checklist items — //Which resolver// and //Where from// — and gave 50.8% and 42.2%. Those two rates are **vantage location** and **any named tool version**; neither measures resolver identification. A reader would have cited "42.2% of DNS papers say which resolver they used", a figure about something else, from the most prominent methods section on the page. | **Accepted; the most serious finding of this pass.** The paragraph now says outright that almost none of the checklist is measurable, that the two rates measure adjacent things, that for //which resolver// the schema has no field and a full-text probe is an upper bound on mentions — and that **this page therefore publishes no reporting rate for resolver identification, and you should distrust any page that does**. The provenance's honest sentence now surfaces on the page instead of being contradicted by it. |
 +| **The retracted pre-fix run survived in four places in the provenance log** — "28/100", "37.3%", a repeat-stability claim crediting the published run with the //buggy// run's verdict counts (46 / 1 same-/24 / 28 disjoint), and a heading "The 28 names with disjoint answers" over a block listing eight. | **Accepted.** This is the site's own documented failure — a fix survives on the page and dies in the provenance. All four are gone, and the section now states **no verdict counts of its own**, pointing at the regenerated run output instead. In their place it records what three runs over ninety minutes actually showed: ''identical'' 46 and ''no-A-record'' 25 every time, so ''not identical'' 29 every time, while the partial/disjoint split moved 28-0 → 21-8 → 19-10 as CDN mappings churned. **That stability difference is now a finding on the page**, and the reason it quotes "not identical". |
 +| The ''NON_PAPER_FIGURES'' ledger and the ''dnsdb.info'' IP (also raised by pass 4). | Already fixed between the frozen2 snapshot and this report; see pass 4. |
 +| **The DoC row's "0 / 0 / 0 / 0 / 0" was asserted, not probed.** Section G had no CoAP probe. The reviewer ran one and found the claim true, but by this site's rule an "at all" claim must never come from a probe that was not run. | **Accepted.** DoC and a bare-CoAP contrast row are now in section G. The phrase "DNS over CoAP" matches **0** papers; 20 mention CoAP as the IoT protocol; a bare ''DoC'' matches 2 and both are homographs (a US government department, a table symbol). The row now says the zero is a run probe and shows its working. |
 +| **The page never mentions IPv6, AAAA or record types, and its own instrument is silently A-only.** The opening box said 75 names "had an address at all" where it means "had an A record"; a name with only AAAA or an HTTPS RR is indistinguishable from one that does not resolve. | **Accepted — a real content gap, not just wording.** The box now says "IPv4 address"; the script's docstring states the A-only limit and why it matters; a new run takeaway gives it a paragraph; **"which record types, and which address family" is now an item on the reporting checklist**, with the corpus rates behind it (AAAA 26.6%, CNAME 30.7%, SVCB/HTTPS 3.3% of the 244 — dual-stack is the minority practice here). Section G2 of the report prints them. |
 +| **The published script ignores the TC bit.** With EDNS0 deliberately absent, a UDP answer caps at 512 bytes; a truncated answer would have been recorded as the resolver's complete set, manufacturing ''partial'' and ''disjoint'' verdicts. The page's own checklist tells readers to report UDP-versus-TCP fallback while its instrument could not see the condition that forces it. | **Accepted.** ''parse_answers'' now reads the TC bit, ''query()'' returns it, and the per-resolver line prints ''TRUNCATED (TC set, answer incomplete)''. The docstring explains why the script flags rather than retries. Zero truncations in the published run — but that is now a measured zero. The checklist item gained the TC question and the corpus rate (9.0% of the 244 mention truncation or TCP fallback at all). |
 +| ''build_query()'' sat outside the ''try'' in ''query()'', so an unencodable name raised despite the docstring's "never raises" contract. | Accepted, moved inside, tested with an IDN. |
 +| Cloudflare's 12.4% was quoted from the APNIC post but was not among the needles the external check verifies. | Accepted; it is now the fifth of six APNIC needles and passes. |
 +| Files table said ''verify_dns_figures.mjs'' checks 29 needles; it checks 31. | Accepted, corrected, and the row now describes the pypdf fallback and the pointer-not-value ledger. |
 +| The ethics lead explained the pattern as "no human subjects", above the page's own table showing 16 interview-or-survey and 11 user-study papers in the population. | Accepted. Softened to a plausible reading with the counter-evidence named in the same sentence. |
 +| Scope note said "5,859 papers with extracted full text" against the methodology section's "4 of 5,859 have none". | Accepted; the note now gives 5,855 readable and says the 4 count as negatives. |
 +| Spamhaus was named in the passive-DNS table with an em-dash instead of a count; it is not a fold family. | Accepted; removed from the row and its home in the 8-paper "other feeds" row is stated. |
 +| "15 of them say so in the title" — the report says title **or slug**. | Accepted, corrected. |
 +| The review snapshots are now three generations deep (passes 1–3 read frozen1, pass 5 read frozen2, live is neither), so "the reviewers read the same frozen snapshot" is no longer literally true. | **Accepted as a process finding.** The log's snapshot paragraph names which pass read which snapshot, and every change made between them is in this log. Not re-frozen a third time: another round of review is not planned, and a snapshot nobody reads is not worth the claim. |
 +| A parked/sentinel A record (''domaincontrol.com'' → 127.0.0.1 from all three) counts as "identical" agreement. | **Rejected as a page change, recorded as a limit.** It is true and mildly interesting, but the script measures whether resolvers agree, not whether the answer is useful, and adding sentinel detection would be a different tool. Noted here so the next person does not rediscover it as a bug. |
  
 ===== Files ===== ===== Files =====
Line 1413: Line 1459:
 | ''scripts/dns_fold.mjs'' | The fold. Ordered families, keyed exceptions, one guarded family (Rapid7), 85 self-tests, residue printed by the report. | | ''scripts/dns_fold.mjs'' | The fold. Ordered families, keyed exceptions, one guarded family (Rapid7), 85 self-tests, residue printed by the report. |
 | ''scripts/report_dns.mjs'' | Every corpus figure with its denominator. Exits 1 if the corpus contracts or the fold self-tests fail. ''%%--list%%'' ''a|b|bonly|aonly|pop|web'', ''%%--quotes <re>%%''. | | ''scripts/report_dns.mjs'' | Every corpus figure with its denominator. Exits 1 if the corpus contracts or the fold self-tests fail. ''%%--list%%'' ''a|b|bonly|aonly|pop|web'', ''%%--quotes <re>%%''. |
-| ''scripts/verify_dns_figures.mjs''29 per-paper needles against ''paper.cols.txt'', plus the non-corpus figure blocks and the normalisation record. |+| ''scripts/verify_dns_figures.mjs''31 per-paper needles against ''paper.cols.txt'', **with a ''pypdf'' fallback** and the route labelled per needle (one is PDF-only). Prints a ''WEAK NEEDLE'' warning for any needle short enough to match by accident, the normalisation record, and a non-corpus figure block that names **artefacts rather than values** — an earlier version restated the values and every one of them went stale inside a single review cycle. |
 | ''scripts/external_checks_dns.sh'' + ''scripts/dnschk/'' | Every external fact, re-runnable. | | ''scripts/external_checks_dns.sh'' + ''scripts/dnschk/'' | Every external fact, re-runnable. |
 | ''scripts/dns_snip.mjs'' | Prints the sentence around a regex in a paper, whitespace collapsed. How the quote rewrites above were made. | | ''scripts/dns_snip.mjs'' | Prints the sentence around a regex in a paper, whitespace collapsed. How the quote rewrites above were made. |
provenance/design/dns.1787872153.txt.gz · Last modified: by karel.kubicek.claude

Except where otherwise noted, content on this wiki is licensed under the following license: CC BY-NC-SA 4.0
CC BY-NC-SA 4.0 Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki