provenance:programming:internet_scanning
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| provenance:programming:internet_scanning [2026/09/10 21:35] – Point the review log at the corrected follow-up item. Authored by Claude. karel.kubicek.claude | provenance:programming:internet_scanning [2026/09/17 07:24] (current) – Markup rendering sweep: wrap escapes, CLI flag typography, and heading quotes. Authored by Claude. karel.kubicek.claude | ||
|---|---|---|---|
| Line 11: | Line 11: | ||
| * Corpus at run time: **5,859** extracted papers, 2010–2026, | * Corpus at run time: **5,859** extracted papers, 2010–2026, | ||
| * **Creating**, | * **Creating**, | ||
| - | * Wiki saves through '' | + | * Wiki saves through '' |
| * Pages saved this sitting: '' | * Pages saved this sitting: '' | ||
| + | |||
| + | **A follow-up run on 2026-09-17** worked the three items the 2026-09-10 review left open. It changed the page's population from 245 to **241** and refreshed about forty figures. Everything below that carries a number is the state //after// that run; the run itself is written up in [[# | ||
| + | |||
| + | * Run date: **2026-09-17** (UTC). Single sitting. Authoring agent: **Claude Opus 5** (Claude Code), item //" | ||
| + | * Corpus unchanged: **5,859** extracted papers. No re-extraction, | ||
| + | * Pages saved: '' | ||
| + | * Scripts added: '' | ||
| ==== Accidental exposure, caught in this run ==== | ==== Accidental exposure, caught in this run ==== | ||
| Line 25: | Line 32: | ||
| | **id = '' | | **id = '' | ||
| | **Creating a page rather than broadening [[design: | | **Creating a page rather than broadening [[design: | ||
| - | | **A separate fold ('' | + | | **A separate fold ('' |
| - | | **ACTIVE = 245, not SCAN = 930, as the page's population** | 930 is a '' | + | | **ACTIVE = 241, not SCAN = 930, as the page's population** | 930 is a '' |
| - | | **ACTIVE membership is decided by the instrument, not by '' | + | | **ACTIVE membership is decided by the instrument, not by '' |
| - | | **…but generic strings and hand verdicts stay inside '' | + | | **…but generic strings and hand verdicts stay inside '' |
| - | | **The four practice figures are published as "about a fifth", | + | | **The four practice figures are published as "about a fifth", |
| | **The ethics norms are routed to [[practices: | | **The ethics norms are routed to [[practices: | ||
| | **DNS scanning routed to [[design: | | **DNS scanning routed to [[design: | ||
| | **Web-application vulnerability scanners excluded** (Nikto, ZAP, sqlmap, OpenVAS, Nessus, Acunetix, …) | 15 SCAN papers name one. They scan one host's application layer, not an address space, and one 2023 paper alone contributes eleven of the names. Routed to [[security: | | **Web-application vulnerability scanners excluded** (Nikto, ZAP, sqlmap, OpenVAS, Nessus, Acunetix, …) | 15 SCAN papers name one. They scan one host's application layer, not an address space, and one 2023 paper alone contributes eleven of the names. Routed to [[security: | ||
| + | |||
| + | ===== Follow-up run, 2026-09-17 ===== | ||
| + | |||
| + | Three items were left open by the 2026-09-10 review. Two are closed; the third is not. | ||
| + | |||
| + | ^ Item ^ State ^ | ||
| + | | (1) '' | ||
| + | | (2) Nobody hand-audited the 174 HAND verdicts for judgement | **Closed.** All read; five kinds changed, one entry removed, five tuples suppressed, ACTIVE 245 → **241**. A review pass re-read every change and every borderline against the papers and found a sixth (see [[#D. Review log, 2026-09-17]]). | | ||
| + | | (3) Replace the four practice estimates with per-paper verdicts over the whole hit list | **Not done.** ~351 reads. The sample was made survivable instead; see below. | | ||
| + | |||
| + | ==== A. The ZMap/XMap disagreement with design:dns — resolved ==== | ||
| + | |||
| + | The reviewer' | ||
| + | |||
| + | ^ Quantity ^ Value ^ | ||
| + | | papers naming **both** ZMap and XMap (the suspected double count) | **0** | | ||
| + | | '' | ||
| + | | '' | ||
| + | | papers in the symmetric difference | **1** | | ||
| + | |||
| + | The one paper is **CCS 2016, //A Surfeit of SSH Cipher Suites//**. Its '' | ||
| + | |||
| + | Neither page was right. Both folds now carry an identical, hand-read '' | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | After that, and after the tuple suppression in item B below, the two pages agree exactly: **ZMap ∪ XMap = 111 on both, ZGrab = 32 on both, symmetric difference 0.** | ||
| + | |||
| + | **The recall question — how many other compound names are there?** A blanket split would be wrong ('' | ||
| + | |||
| + | ^ Compound name ^ Category ^ Part the fold loses ^ Disposition ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | ==== B. Hand audit of the 173 HAND verdicts ==== | ||
| + | |||
| + | The HAND map in '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | **Five verdicts changed.** Each is annotated inline in the fold source with the sentence that decided it. | ||
| + | |||
| + | ^ Name ^ Was ^ Now ^ Deciding reading ^ Effect on ACTIVE ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | Net from the five kind changes: **245 → 242**, and one correction in each direction rather than all one way. A sixth change, found by the review pass and not by this audit, took it to **241**; it is in the review log below and in the suppression section that follows. | ||
| + | |||
| + | === The tuple suppression, | ||
| + | |||
| + | Reading '' | ||
| + | |||
| + | Three of those four are **families**, | ||
| + | |||
| + | The rule, and an honest account of how it changed mid-run: | ||
| + | |||
| + | * **(a) Suppress when the paper did not run the tool** — it fingerprinted it, or read someone else's output. //Written before the first entry.// | ||
| + | * **(b) Suppress when the packets never left the host** onto the public Internet — a closed local loop or a synthetic load generator. //Added on 2026-09-17 after the review pass read Spoki; clause (a) alone would have kept it, and one published figure was wrong by one paper because the rule was incomplete.// | ||
| + | * **Do not suppress when the paper ran the tool and the packets did cross the Internet**, even if aimed somewhere unusual — its own honeypot, its own hosts, a cloud VM it controls. "The target was ours" is a different claim from "no packet was sent", and relitigating the former per paper has no stopping rule. | ||
| + | |||
| + | **The recall probe for this defect.** A title/slug sweep for '' | ||
| + | |||
| + | ^ Paper ^ Read ^ Disposition ^ | ||
| + | | IMC 2024 //Have you SYN me?// | Pure telescope, three /16s, 2015–2024. Ran nothing. | **Suppressed**, | ||
| + | | IMC 2015 //Detecting Malicious Activity with DNS Backscatter// | ||
| + | | USENIX 2022 //Spoki// | Ran ZMap, but only inside its own machine: //"A local pair of virtual Ethernet interfaces route packets between the packet source and Spoki. We use ZMap to generate TCP SYN packets, passing the MAC address of the destination interface along with a probing rate and a range of IP addresses to use as a source."// | ||
| + | | CCS 2020 // | ||
| + | |||
| + | That is a bounded sweep over a title pattern, not over the population, so it is a floor. A paper that fingerprints scanners without saying so in its title would be missed. | ||
| + | |||
| + | === Borderlines considered and kept === | ||
| + | |||
| + | These are the judgement calls a second reader would most plausibly decide the other way. All five are load-bearing — each one alone puts its paper in ACTIVE — and all five were kept. | ||
| + | |||
| + | ^ Name ^ Paper ^ Why it is borderline ^ Why it was kept ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | === What the audit did not do === | ||
| + | |||
| + | * **It read 174 strings, not 174 papers.** Where the name and purpose were unambiguous — '' | ||
| + | * **One reader, one pass.** No second opinion was sought on any of the five changes or the five borderlines. | ||
| + | * **It cannot reach the families.** '' | ||
| + | |||
| + | ==== D. Review log, 2026-09-17 ==== | ||
| + | |||
| + | Two '' | ||
| + | |||
| + | === Pass 1: hand-audit judgement (independent re-read of the papers) === | ||
| + | |||
| + | ^ Finding ^ Disposition ^ | ||
| + | | All **five** kind changes (Unicorn, Exitmap, SNMPv3, DMS, LFP): AGREE, each confirmed against '' | ||
| + | | The '' | ||
| + | | All **six** borderlines: | ||
| + | | **'' | ||
| + | | '' | ||
| + | | The blanket '' | ||
| + | | Swept the other ~160 verdicts; read the least-obviously-supported sole-route entries ('' | ||
| + | |||
| + | === Pass 2: figures vs script === | ||
| + | |||
| + | ^ Finding ^ Disposition ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | Section 8's three new guards: tried to construct a passing-but-wrong state, found none | Accepted as confirmation. | | ||
| + | | '' | ||
| + | | Grepped all nine scripts for hardcoded 245/ | ||
| + | |||
| + | **What the second pass cost to ignore would have been high, and one of its findings is about this page lying about itself.** Both passes are recorded in full because the rejections matter as much as the fixes: two findings ('' | ||
| + | |||
| + | **Not re-reviewed.** The figures pass ran against the 242-state snapshot. Accepting its findings and the Spoki finding together moved ACTIVE to 241 and changed roughly forty cells again, and **that final state has not been through a figures pass**. It has been through '' | ||
| + | |||
| + | ==== E. Guards run on 2026-09-17 ==== | ||
| + | |||
| + | ^ Guard ^ Result ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | the same on '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | mutation test: remove '' | ||
| + | | mutation test: misspell a '' | ||
| + | | mutation tests: the three pinned-sample guards | all three fire; commands and messages in [[#Probes]] | | ||
| + | | rendered DOM after save, '' | ||
| + | | rendered DOM after save, '' | ||
| + | |||
| + | **No review sub-agents were run on 2026-09-17.** The item said explicitly not to re-run the generic pass, and the run changed figures rather than prose. That is a gap: the figure-vs-script check that a '' | ||
| ===== Populations and queries ===== | ===== Populations and queries ===== | ||
| Line 41: | Line 196: | ||
| | corpus | — | **5,859** | | | corpus | — | **5,859** | | ||
| | SCAN: '' | | SCAN: '' | ||
| - | | ACTIVE: names an active-scan / grabber / reachability / censorship-probe / IPv6-targeting instrument, used or produced | 5,859 | **245** (4.2%) | | + | | ACTIVE: names an active-scan / grabber / reachability / censorship-probe / IPv6-targeting instrument, used or produced | 5,859 | **241** (4.1%) | |
| - | | ACTIVE ∩ SCAN | 930 | **235** (25.3%) | | + | | ACTIVE ∩ SCAN | 930 | **232** (24.9%) | |
| - | | ACTIVE outside SCAN | 245 | **10** (4.1%) | | + | | ACTIVE outside SCAN | 241 | **9** (3.7%) | |
| - | | ACTIVE if membership were restricted to '' | + | | ACTIVE if membership were restricted to '' |
| | SCAN papers naming any '' | | SCAN papers naming any '' | ||
| | SCAN papers naming **no** such tool | 930 | **534** (57.4%) | | | SCAN papers naming **no** such tool | 930 | **534** (57.4%) | | ||
| | SCAN papers naming no instrument the fold recognises at all | 930 | 416 (44.7%) | | | SCAN papers naming no instrument the fold recognises at all | 930 | 416 (44.7%) | | ||
| - | | ZMap ∪ ZGrab ∪ Masscan ∪ nmap, used or produced | 5,859 / 930 | **145** corpus-wide, | + | | ZMap ∪ ZGrab ∪ Masscan ∪ nmap, used or produced | 5,859 / 930 | **143** corpus-wide, |
| - | | home-grown scanner (generic " | + | | home-grown scanner (generic " |
| - | | families named by exactly one paper | 245 | **40** | | + | | families named by exactly one paper | 241 | **37** | |
| - | | '' | + | | '' |
| - | | ACTIVE posters ('' | + | | ACTIVE posters ('' |
| - | | ACTIVE records of ≤4 pages | 245 | 6 (2.4%) | | + | | ACTIVE records of ≤4 pages | 241 | 6 (2.5%) | |
| - | | ACTIVE papers with ≥1 '' | + | | ACTIVE papers with ≥1 '' |
| - | **Poster sensitivity.** Dropping the 6 short records moves " | + | **Poster sensitivity.** Dropping the 6 short records moves " |
| ===== The fold ===== | ===== The fold ===== | ||
| Line 62: | Line 217: | ||
| '' | '' | ||
| - | * **Coverage is a contract, not an aspiration.** Every '' | + | * **Coverage is a contract, not an aspiration.** Every '' |
| * **Kinds, not one ranking.** Twenty kinds. Five are **membership** ('' | * **Kinds, not one ranking.** Twenty kinds. Five are **membership** ('' | ||
| * **One negative guard.** '' | * **One negative guard.** '' | ||
| - | * **Generic families.** '' | + | * **Generic families.** '' |
| * **ZMap appears under 9 spellings** in ACTIVE: '' | * **ZMap appears under 9 spellings** in ACTIVE: '' | ||
| * **Self-tests: | * **Self-tests: | ||
| - | The full residue — which is empty — and the complete | + | The full residue — which is empty — and the complete |
| ===== Probes ===== | ===== Probes ===== | ||
| Line 78: | Line 233: | ||
| ^ Practice ^ loose ^ first-person ^ hand-read precision ^ published estimate ^ | ^ Practice ^ loose ^ first-person ^ hand-read precision ^ published estimate ^ | ||
| - | | own probe rate or rate limit | 127 (51.8%) | 84 (34.3%) | **6/12** | ~42, "about one in six" | | + | | own probe rate or rate limit | 124 (51.5%) | 81 (33.6%) | **5/12** | ~34, "about one in seven" | |
| - | | honours a blocklist / exclusion list | 106 (43.3%) | 90 (36.7%) | **6/12** | ~45, "about one in five" | | + | | honours a blocklist / exclusion list | 103 (42.7%) | 88 (36.5%) | **6/11** | ~48, "about one in five" | |
| - | | offers an opt-out | 73 (29.8%) | 69 (28.2%) | **9/10** | ~62, "about one in four" | | + | | offers an opt-out | 74 (30.7%) | 70 (29.0%) | **9/10** | ~63, "about one in four" | |
| - | | source-address hygiene | 170 (69.4%) | 114 (46.5%) | **6/10** | ~68, "a little over a quarter" | + | | source-address hygiene | 167 (69.3%) | 112 (46.5%) | **6/10** | ~67, "a little over a quarter" |
| - | | abuse complaints received or handled | 58 (23.7%) | 46 (18.8%) | not sampled | published as an upper bound only | | + | | abuse complaints received or handled | 58 (24.1%) | 45 (18.7%) | not sampled | published as an upper bound only | |
| - | | names an IRB or ethics board | 56 (22.9%) //(loose; there is no first-person version)// | — | not sampled | upper bound, and **not** to be read against '' | + | | names an IRB or ethics board | 55 (22.8%) //(loose; there is no first-person version)// | — | not sampled | upper bound, and **not** to be read against '' |
| - | | cites Durumeric / Partridge-Allman / Menlo / "good Internet citizen" | + | | cites Durumeric / Partridge-Allman / Menlo / "good Internet citizen" |
| + | |||
| + | <WRAP important> | ||
| + | **Two of those cells were wrong on this page until 2026-09-17, and nothing caught them.** The rate row said precision **6/12** and estimate **~42**; the script has said 5/12 and ~35 since the generic review pass of 2026-09-10 flipped the PCspoof verdict from '' | ||
| + | |||
| + | **And the first draft of this very paragraph then claimed the fix had been made when it had not.** It said "the 2026-09-17 run added this page to that check"; | ||
| + | </ | ||
| + | |||
| + | Samples **were** every //k//-th paper of the sorted hit list. That made the sample a function of ACTIVE, and on 2026-09-17 a three-paper change to ACTIVE reshuffled all four strides and failed **46** of these checks on papers that were still perfectly good hits — the reads were invalidated by arithmetic, not by evidence. The sample is now the **verdict map itself**: a pinned list of papers, each with the sentence that decided it, drawn originally as every //k//-th of a hit list of the length recorded in the script. Three guards keep that honest, and all three were mutation-tested on 2026-09-17: | ||
| - | Samples are **every //k//-th paper of the sorted | + | ^ Guard ^ What it catches ^ Mutation used to prove it fires ^ |
| + | | every pinned paper is still a hit | the probe changed, or the paper left ACTIVE | renamed one pinned key to '' | ||
| + | | hit-list length within 15% of the length at draw time | a frozen sample quietly stops being representative as the list grows | set the source-address pin to 250 against a real 113 → //"hit list moved 54.8% since the sample was drawn"// | | ||
| + | | pinned papers span at least half the sorted hit list | a sample clustered in one corner is not a sample | ||
| ==== Every hand verdict, with its deciding reading ==== | ==== Every hand verdict, with its deciding reading ==== | ||
| Line 95: | Line 261: | ||
| | rate | CCS/2015 //Search engine backed by Internet-wide scanning// | other | rate-limits its own **web interface**, | | rate | CCS/2015 //Search engine backed by Internet-wide scanning// | other | rate-limits its own **web interface**, | ||
| | rate | CCS/2025 //Poster: ERIS// | other | ICMPv6 rate limiting is the side channel under study | | | rate | CCS/2025 //Poster: ERIS// | other | ICMPv6 rate limiting is the side channel under study | | ||
| - | | rate | IEEE S& | + | | rate | IEEE S& |
| | rate | IMC/2016 //Free bridge across the digital divide// | other | Free Basics traffic is throttled | | | rate | IMC/2016 //Free bridge across the digital divide// | other | Free Basics traffic is throttled | | ||
| | rate | IMC/2022 //Saving Brian' | | rate | IMC/2022 //Saving Brian' | ||
| Line 161: | Line 327: | ||
| * The embedded block is **byte-identical** to '' | * The embedded block is **byte-identical** to '' | ||
| - | * Downloading it back off the rendered page (''/ | + | * Downloading it back off the rendered page (''/ |
| * The '' | * The '' | ||
| * The self-test has a **mutation guard**: replacing '' | * The self-test has a **mutation guard**: replacing '' | ||
| Line 188: | Line 354: | ||
| ===== What could not be established ===== | ===== What could not be established ===== | ||
| - | * **How many scan papers actually rate-limited, | + | * **How many scan papers actually rate-limited, |
| * **Whether the 534 SCAN papers that name no '' | * **Whether the 534 SCAN papers that name no '' | ||
| * **The recall of ACTIVE outside '' | * **The recall of ACTIVE outside '' | ||
| Line 204: | Line 370: | ||
| | '' | | '' | ||
| | '' | | '' | ||
| - | | '' | + | | '' |
| | rendered DOM after save | **37** source '' | | rendered DOM after save | **37** source '' | ||
| | red links in the rendered DOM | 3, all of them to this page, before it existed | | | red links in the rendered DOM | 3, all of them to this page, before it existed | | ||
| Line 232: | Line 398: | ||
| | A4 | The rate table had no independent check. | **Added**: the ZMap paper measured //" | | A4 | The rate table had no independent check. | **Added**: the ZMap paper measured //" | ||
| - | ==== Pass 1 — figures vs script ('' | + | ==== Pass 1 — figures vs script (sonnet) ==== |
| Re-ran all four scripts, confirmed they reproduce the committed outputs | Re-ran all four scripts, confirmed they reproduce the committed outputs | ||
| Line 242: | Line 408: | ||
| ^ # ^ Finding ^ Disposition ^ | ^ # ^ Finding ^ Disposition ^ | ||
| - | | P1.1 | //"'' | + | | P1.1 | //"'' |
| - | | P1.2 | //" | + | | P1.2 | //" |
| | P1.3 | The opening box said " | | P1.3 | The opening box said " | ||
| - | | P1.4 | '' | + | | P1.4 | '' |
| - | ==== Pass 2 — citations and quotes ('' | + | ==== Pass 2 — citations and quotes (sonnet) ==== |
| All 15 citekeys resolve exactly once in a fresh export; | All 15 citekeys resolve exactly once in a fresh export; | ||
| Line 258: | Line 424: | ||
| | P2.1 | //" | | P2.1 | //" | ||
| - | ==== Pass 3 — external currency ('' | + | ==== Pass 3 — external currency (sonnet) ==== |
| Independently re-fetched and confirmed: both ZMap man pages (tag and '' | Independently re-fetched and confirmed: both ZMap man pages (tag and '' | ||
| Line 276: | Line 442: | ||
| | P3.3 | '' | | P3.3 | '' | ||
| - | ==== Pass 4 — generic ('' | + | ==== Pass 4 — generic (fable) ==== |
| **It returned after the "did not return" | **It returned after the "did not return" | ||
| Line 330: | Line 496: | ||
| 0. FOLD COVERAGE — every category=network-scanner name must be decided | 0. FOLD COVERAGE — every category=network-scanner name must be decided | ||
| ============================================================================== | ============================================================================== | ||
| - | category=' | + | category=' |
| unmapped strings: 0 | unmapped strings: 0 | ||
| - | HAND entries: | + | HAND entries: |
| ============================================================================== | ============================================================================== | ||
| Line 350: | Line 516: | ||
| corpus (7 venues, 2010–2026) | corpus (7 venues, 2010–2026) | ||
| SCAN — studyTypes ' | SCAN — studyTypes ' | ||
| - | ACTIVE — names an active-scan instrument (page population) | + | ACTIVE — names an active-scan instrument (page population) |
| - | … of those, inside SCAN 235 | + | … of those, inside SCAN 232 |
| - | … of those, outside SCAN | + | … of those, outside SCAN |
| SCAN papers naming ANY category=' | SCAN papers naming ANY category=' | ||
| SCAN papers naming NO category=' | SCAN papers naming NO category=' | ||
| PUBLISHED_CORPUS 5859 | PUBLISHED_CORPUS 5859 | ||
| PUBLISHED_SCAN 930 | PUBLISHED_SCAN 930 | ||
| - | PUBLISHED_ACTIVE | + | PUBLISHED_ACTIVE |
| - | PUBLISHED_ACTIVE_IN_SCAN | + | PUBLISHED_ACTIVE_IN_SCAN |
| - | PUBLISHED_ACTIVE_IN_SCAN_PCT | + | PUBLISHED_ACTIVE_IN_SCAN_PCT |
| - | PUBLISHED_ACTIVE_OUTSIDE | + | PUBLISHED_ACTIVE_OUTSIDE |
| PUBLISHED_NAMES_NS 396 | PUBLISHED_NAMES_NS 396 | ||
| PUBLISHED_NO_NS 534 57.4% | PUBLISHED_NO_NS 534 57.4% | ||
| - | category-restricted membership would give 231; the any-category rule adds 14 | + | category-restricted membership would give 227; the any-category rule adds 14 |
| - | PUBLISHED_NS_ONLY | + | PUBLISHED_NS_ONLY |
| +CCS/ | +CCS/ | ||
| +IMC/ | +IMC/ | ||
| Line 386: | Line 552: | ||
| kind | kind | ||
| ----------------- | ----------------- | ||
| - | active-scan | + | active-scan |
| dataset | dataset | ||
| - | topology | + | topology |
| passive | passive | ||
| vantage-platform | vantage-platform | ||
| Line 404: | Line 570: | ||
| packet-crafting | packet-crafting | ||
| simulation | simulation | ||
| - | lab-protocol-test | + | lab-protocol-test |
| registry | registry | ||
| Line 415: | Line 581: | ||
| Family | Family | ||
| -------------------- | -------------------- | ||
| - | ZMap active-scan | + | ZMap active-scan |
| - | nmap active-scan | + | nmap active-scan |
| - | ZGrab | + | ZGrab |
| - | custom scanner | + | custom scanner |
| - | ping reachability | + | ping reachability |
| - | XMap active-scan | + | XMap active-scan |
| - | TLS banner grabbers | + | TLS banner grabbers |
| OONI censorship-probe | OONI censorship-probe | ||
| - | Geneva | + | Geneva |
| - | Masscan | + | Censored Planet |
| - | Censored Planet | + | IPv6 Hitlist Service |
| - | IPv6 Hitlist Service | + | Masscan |
| - | Quack | + | Quack |
| 6Gen ipv6-targeting | 6Gen ipv6-targeting | ||
| Hyperquack | Hyperquack | ||
| Line 442: | Line 608: | ||
| Satellite | Satellite | ||
| - | families named by exactly one paper: | + | families named by exactly one paper: |
| - | PUBLISHED_ONEOFF_FAMILIES | + | PUBLISHED_ONEOFF_FAMILIES |
| - | PUBLISHED_FAM_ZMAP | + | PUBLISHED_FAM_ZMAP |
| - | PUBLISHED_FAM_NMAP | + | PUBLISHED_FAM_NMAP |
| PUBLISHED_FAM_ZGRAB 32 | PUBLISHED_FAM_ZGRAB 32 | ||
| PUBLISHED_FAM_CUSTOM_SCANNER 25 | PUBLISHED_FAM_CUSTOM_SCANNER 25 | ||
| Line 454: | Line 620: | ||
| - | ZMap|ZGrab|Masscan|nmap, | + | ZMap|ZGrab|Masscan|nmap, |
| - | PUBLISHED_CORE_FOUR_ALL | + | PUBLISHED_CORE_FOUR_ALL |
| - | PUBLISHED_CORE_FOUR_SCAN | + | PUBLISHED_CORE_FOUR_SCAN |
| - | ZMap spellings: TCP Options module for ZMap | ZMap | ZMap-based script | ZMap6 | ZMapv6 | Zmap | zmap | zmap2 | zmap6 | + | ZMap spellings: TCP Options module for ZMap | ZGrab/ZMap | ZMap | ZMap-based script | ZMap6 | ZMapv6 | Zmap | zmap | zmap2 | zmap6 |
| - | PUBLISHED_ZMAP_SPELLINGS | + | PUBLISHED_ZMAP_SPELLINGS |
| - | ACTIVE papers whose scanner is home-grown: 45 (18.4%) | + | ACTIVE papers whose scanner is home-grown: 45 (18.7%) |
| = generic ' | = generic ' | ||
| + a one-paper name the paper itself PRODUCED: | + a one-paper name the paper itself PRODUCED: | ||
| - overlap: | - overlap: | ||
| - | (the other 20 one-paper families are third-party tools only this corpus' | + | (the other 17 one-paper families are third-party tools only this corpus' |
| - | PUBLISHED_HOMEGROWN 45 18.4% | + | PUBLISHED_HOMEGROWN 45 18.7% |
| PUBLISHED_HOMEGROWN_CUSTOM 25 | PUBLISHED_HOMEGROWN_CUSTOM 25 | ||
| PUBLISHED_HOMEGROWN_PRODUCED 20 | PUBLISHED_HOMEGROWN_PRODUCED 20 | ||
| - | PUBLISHED_ONEOFF_THIRDPARTY | + | PUBLISHED_ONEOFF_THIRDPARTY |
| ============================================================================== | ============================================================================== | ||
| Line 475: | Line 641: | ||
| ---------- | ---------- | ||
| 2010–2013 | 2010–2013 | ||
| - | 2014–2017 | + | 2014–2017 |
| - | 2018–2021 | + | 2018–2021 |
| - | 2022–2024 | + | 2022–2024 |
| - | 2025–2026* | + | 2025–2026* |
| Per year, ZMap and the whole ACTIVE population (2026 is provisional): | Per year, ZMap and the whole ACTIVE population (2026 is provisional): | ||
| Line 489: | Line 655: | ||
| 2014 166 | 2014 166 | ||
| 2015 190 | 2015 190 | ||
| - | 2016 182 | + | 2016 182 |
| 2017 231 | 2017 231 | ||
| - | 2018 254 | + | 2018 254 |
| 2019 402 | 2019 402 | ||
| 2020 404 | 2020 404 | ||
| 2021 379 | 2021 379 | ||
| - | 2022 546 | + | 2022 546 |
| - | 2023 719 | + | 2023 719 |
| - | 2024 690 | + | 2024 690 |
| - | 2025 770 | + | 2025 770 |
| - | 2026 415 | + | 2026 415 |
| first ZMap year in ACTIVE: 2013 | first ZMap year in ACTIVE: 2013 | ||
| PUBLISHED_ZMAP_FIRST_YEAR 2013 | PUBLISHED_ZMAP_FIRST_YEAR 2013 | ||
| Line 510: | Line 676: | ||
| CCS 990 | CCS 990 | ||
| IEEE-SP | IEEE-SP | ||
| - | IMC 638 | + | IMC 638 |
| NDSS | NDSS | ||
| PETS | PETS | ||
| - | USENIX | + | USENIX |
| - | WWW 843 | + | WWW 843 |
| ============================================================================== | ============================================================================== | ||
| 6. WHAT A SCAN PAPER REPORTS — schema fields, denominator ACTIVE and SCAN | 6. WHAT A SCAN PAPER REPORTS — schema fields, denominator ACTIVE and SCAN | ||
| ============================================================================== | ============================================================================== | ||
| - | Field | + | Field |
| ------------------------------ | ------------------------------ | ||
| - | vantage location | + | vantage location |
| - | vantage infrastructure | + | vantage infrastructure |
| - | any used/ | + | any used/ |
| - | version of the SCANNER itself | + | version of the SCANNER itself |
| - | own artifact URL | + | own artifact URL |
| - | ethics review outcome | + | ethics review outcome |
| - | notified affected parties | + | notified affected parties |
| - | harm mitigation described | + | harm mitigation described |
| - | robots.txt | + | robots.txt |
| - | temporal span start 196 | + | temporal span start 192 |
| ACTIVE papers with NO ethics record at all: 7 (2.9%) — not counted as stated, not counted as a sentinel | ACTIVE papers with NO ethics record at all: 7 (2.9%) — not counted as stated, not counted as a sentinel | ||
| Line 536: | Line 702: | ||
| PUBLISHED_NO_ETHICS_RECORD 7 2.9% | PUBLISHED_NO_ETHICS_RECORD 7 2.9% | ||
| PUBLISHED_NO_ARTIFACT_RECORD 3 1.2% | PUBLISHED_NO_ARTIFACT_RECORD 3 1.2% | ||
| - | PUBLISHED_REPORT_VANTAGE_LOCATION | + | PUBLISHED_REPORT_VANTAGE_LOCATION |
| - | PUBLISHED_REPORT_VANTAGE_INFRASTRUCTURE | + | PUBLISHED_REPORT_VANTAGE_INFRASTRUCTURE |
| - | PUBLISHED_REPORT_ANY_USED_PRODUCED_TOOL_VERSION | + | PUBLISHED_REPORT_ANY_USED_PRODUCED_TOOL_VERSION |
| - | PUBLISHED_REPORT_VERSION_OF_THE_SCANNER_ITSELF 20 8.2% | SCAN 20 2.2% | + | PUBLISHED_REPORT_VERSION_OF_THE_SCANNER_ITSELF 20 8.3% | SCAN 20 2.2% |
| - | PUBLISHED_REPORT_OWN_ARTIFACT_URL | + | PUBLISHED_REPORT_OWN_ARTIFACT_URL |
| - | PUBLISHED_REPORT_ETHICS_REVIEW_OUTCOME | + | PUBLISHED_REPORT_ETHICS_REVIEW_OUTCOME |
| - | PUBLISHED_REPORT_NOTIFIED_AFFECTED_PARTIES | + | PUBLISHED_REPORT_NOTIFIED_AFFECTED_PARTIES |
| - | PUBLISHED_REPORT_HARM_MITIGATION_DESCRIBED | + | PUBLISHED_REPORT_HARM_MITIGATION_DESCRIBED |
| - | PUBLISHED_REPORT_ROBOTS_TXT 11 4.5% | SCAN 22 2.4% | + | PUBLISHED_REPORT_ROBOTS_TXT 11 4.6% | SCAN 22 2.4% |
| - | PUBLISHED_REPORT_TEMPORAL_SPAN_START | + | PUBLISHED_REPORT_TEMPORAL_SPAN_START |
| ============================================================================== | ============================================================================== | ||
| 7. FULL-TEXT PROBES over ACTIVE — a loose upper bound and a tight estimate | 7. FULL-TEXT PROBES over ACTIVE — a loose upper bound and a tight estimate | ||
| ============================================================================== | ============================================================================== | ||
| - | PUBLISHED_PROBE_STATES_ITS_OWN_PROBE_RATE_OR_RATE_LIMIT_LOOSE | + | PUBLISHED_PROBE_STATES_ITS_OWN_PROBE_RATE_OR_RATE_LIMIT_LOOSE |
| - | PUBLISHED_PROBE_STATES_ITS_OWN_PROBE_RATE_OR_RATE_LIMIT_TIGHT | + | PUBLISHED_PROBE_STATES_ITS_OWN_PROBE_RATE_OR_RATE_LIMIT_TIGHT |
| - | PUBLISHED_PROBE_HONOURS_A_BLOCKLIST_EXCLUSION_LIST_LOOSE | + | PUBLISHED_PROBE_HONOURS_A_BLOCKLIST_EXCLUSION_LIST_LOOSE |
| - | PUBLISHED_PROBE_HONOURS_A_BLOCKLIST_EXCLUSION_LIST_TIGHT | + | PUBLISHED_PROBE_HONOURS_A_BLOCKLIST_EXCLUSION_LIST_TIGHT |
| - | PUBLISHED_PROBE_OFFERS_AN_OPT_OUT_LOOSE | + | PUBLISHED_PROBE_OFFERS_AN_OPT_OUT_LOOSE |
| - | PUBLISHED_PROBE_OFFERS_AN_OPT_OUT_TIGHT | + | PUBLISHED_PROBE_OFFERS_AN_OPT_OUT_TIGHT |
| - | PUBLISHED_PROBE_SOURCE_ADDRESS_HYGIENE_DEDICATED_IPS_RDNS_PTR_WHOIS_WEB_PAGE__LOOSE | + | PUBLISHED_PROBE_SOURCE_ADDRESS_HYGIENE_DEDICATED_IPS_RDNS_PTR_WHOIS_WEB_PAGE__LOOSE |
| - | PUBLISHED_PROBE_SOURCE_ADDRESS_HYGIENE_DEDICATED_IPS_RDNS_PTR_WHOIS_WEB_PAGE__TIGHT | + | PUBLISHED_PROBE_SOURCE_ADDRESS_HYGIENE_DEDICATED_IPS_RDNS_PTR_WHOIS_WEB_PAGE__TIGHT |
| - | PUBLISHED_PROBE_ABUSE_COMPLAINTS_RECEIVED_OR_HANDLED_LOOSE 58 23.7% | + | PUBLISHED_PROBE_ABUSE_COMPLAINTS_RECEIVED_OR_HANDLED_LOOSE 58 24.1% |
| - | PUBLISHED_PROBE_ABUSE_COMPLAINTS_RECEIVED_OR_HANDLED_TIGHT | + | PUBLISHED_PROBE_ABUSE_COMPLAINTS_RECEIVED_OR_HANDLED_TIGHT |
| Practice | Practice | ||
| ----------------------------------------------------------------- | ----------------------------------------------------------------- | ||
| - | states its own probe rate or rate limit | + | states its own probe rate or rate limit |
| - | honours a blocklist / exclusion list 106 (43.3%) | + | honours a blocklist / exclusion list 103 (42.7%) |
| - | offers an opt-out | + | offers an opt-out |
| - | source-address hygiene (dedicated IPs, rDNS/PTR, WHOIS, web page) | + | source-address hygiene (dedicated IPs, rDNS/PTR, WHOIS, web page) |
| - | abuse complaints received or handled | + | abuse complaints received or handled |
| Neither column is a population. The loose regex fires on any sentence in | Neither column is a population. The loose regex fires on any sentence in | ||
| Line 575: | Line 741: | ||
| the measured precision. | the measured precision. | ||
| - | ACTIVE papers naming an IRB / ethics board: | + | ACTIVE papers naming an IRB / ethics board: |
| - | ACTIVE papers citing Durumeric / Partridge-Allman / Menlo / "good Internet citizen": | + | ACTIVE papers citing Durumeric / Partridge-Allman / Menlo / "good Internet citizen": |
| - | PUBLISHED_IRB | + | PUBLISHED_IRB |
| - | PUBLISHED_GOODPRACTICE | + | PUBLISHED_GOODPRACTICE |
| ============================================================================== | ============================================================================== | ||
| - | 8. HAND-READ PRECISION — deterministic every-k-th | + | 8. HAND-READ PRECISION — a PINNED |
| ============================================================================== | ============================================================================== | ||
| - | --- own probe rate: 84 first-person hits of 245 ACTIVE; sample of 12 | + | --- own probe rate: 81 first-person hits of 241 ACTIVE; |
| - | other CCS/ | + | sample drawn on 2026-09-10 as every-k-th of a hit list that was then 84 long |
| - | other CCS/ | + | other CCS/ |
| - | other IEEE-SP/ | + | other CCS/ |
| - | other IMC/ | + | other IEEE-SP/ |
| - | own IMC/ | + | other IMC/ |
| - | own IMC/ | + | own IMC/ |
| - | own NDSS/ | + | own IMC/ |
| - | other NDSS/ | + | own NDSS/ |
| - | other USENIX/ | + | other NDSS/ |
| - | other USENIX/ | + | other USENIX/ |
| - | own USENIX/ | + | other USENIX/ |
| - | own USENIX/ | + | own USENIX/ |
| - | precision 5/12; 84 x 5/12 = about 35 papers (14.3% of ACTIVE) | + | own USENIX/ |
| - | PUBLISHED_PRECISION_OWN_PROBE_RATE 5/12 -> ~35 14.3% | + | hit list 81 now vs 84 at draw time — drift 3.6% |
| + | sample positions in the sorted hit list: 0, 7, 14, 21, 28, 34, 41, 48, 55, 62, 68, 75 (spread 75 of 81) | ||
| + | precision 5/12; 81 x 5/12 = about 34 papers (14.1% of ACTIVE) | ||
| + | PUBLISHED_PRECISION_OWN_PROBE_RATE 5/12 -> ~34 14.1% | ||
| - | --- own blocklist / exclusion: | + | --- own blocklist / exclusion: |
| - | | + | |
| - | other IEEE-SP/ | + | own |
| - | other IMC/ | + | other IEEE-SP/ |
| - | own IMC/ | + | other IMC/ |
| - | own IMC/ | + | own IMC/ |
| - | other IMC/ | + | own IMC/ |
| - | own IMC/ | + | other IMC/ |
| - | other NDSS/ | + | own IMC/ |
| - | other NDSS/ | + | other NDSS/ |
| - | own USENIX/ | + | other NDSS/ |
| - | own USENIX/ | + | own USENIX/ |
| - | | + | own USENIX/ |
| - | precision 6/12; 90 x 6/12 = about 45 papers (18.4% of ACTIVE) | + | |
| - | PUBLISHED_PRECISION_OWN_BLOCKLIST_EXCLUSION 6/12 -> ~45 18.4% | + | sample positions in the sorted hit list: 0, 7, 14, 21, 28, 35, 42, 48, 55, 62, 69 (spread 69 of 88) |
| + | precision 6/11; 88 x 6/11 = about 48 papers (19.9% of ACTIVE) | ||
| + | PUBLISHED_PRECISION_OWN_BLOCKLIST_EXCLUSION 6/11 -> ~48 19.9% | ||
| - | --- own opt-out offer: | + | --- own opt-out offer: |
| - | | + | |
| - | other IEEE-SP/ | + | own |
| - | own IMC/ | + | other IEEE-SP/ |
| - | own IMC/ | + | own IMC/ |
| - | own IMC/ | + | own IMC/ |
| - | own IMC/ | + | own IMC/ |
| - | own NDSS/ | + | own IMC/ |
| - | own PETS/ | + | own NDSS/ |
| - | own USENIX/ | + | own PETS/ |
| - | own USENIX/ | + | own USENIX/ |
| - | precision 9/10; 69 x 9/10 = about 62 papers (25.3% of ACTIVE) | + | own USENIX/ |
| - | PUBLISHED_PRECISION_OWN_OPT_OUT_OFFER 9/10 -> ~62 25.3% | + | hit list 70 now vs 69 at draw time — drift 1.4% |
| + | sample positions in the sorted hit list: 0, 6, 12, 18, 24, 31, 37, 43, 49, 55 (spread 55 of 70) | ||
| + | precision 9/10; 70 x 9/10 = about 63 papers (26.1% of ACTIVE) | ||
| + | PUBLISHED_PRECISION_OWN_OPT_OUT_OFFER 9/10 -> ~63 26.1% | ||
| - | --- own source-address hygiene: | + | --- own source-address hygiene: |
| - | | + | |
| - | other IEEE-SP/ | + | own |
| - | own IMC/ | + | other IEEE-SP/ |
| - | other IMC/ | + | own IMC/ |
| - | own IMC/ | + | other IMC/ |
| - | own IMC/ | + | own IMC/ |
| - | own NDSS/ | + | own IMC/ |
| - | other NDSS/ | + | own NDSS/ |
| - | other USENIX/ | + | other NDSS/ |
| - | own USENIX/ | + | other USENIX/ |
| - | precision 6/10; 114 x 6/10 = about 68 papers (27.8% of ACTIVE) | + | own USENIX/ |
| - | PUBLISHED_PRECISION_OWN_SOURCE_ADDRESS_HYGIENE 6/10 -> ~68 27.8% | + | hit list 112 now vs 114 at draw time — drift 1.8% |
| + | sample positions in the sorted hit list: 0, 11, 22, 33, 44, 55, 66, 77, 88, 98 (spread 98 of 112) | ||
| + | precision 6/10; 112 x 6/10 = about 67 papers (27.8% of ACTIVE) | ||
| + | PUBLISHED_PRECISION_OWN_SOURCE_ADDRESS_HYGIENE 6/10 -> ~67 27.8% | ||
| Practice | Practice | ||
| -------------------------- | -------------------------- | ||
| - | own probe rate | + | own probe rate |
| - | own blocklist / exclusion | + | own blocklist / exclusion |
| - | own opt-out offer 69 (28.2%) 9/10 ~62 (25.3%) | + | own opt-out offer 70 (29.0%) 9/10 ~63 (26.1%) |
| - | own source-address hygiene | + | own source-address hygiene |
| The point estimate is probe count x sample precision. It is an estimate on a | The point estimate is probe count x sample precision. It is an estimate on a | ||
| sample of 10-12, so read it as "about a fifth" rather than as a percentage. | sample of 10-12, so read it as "about a fifth" rather than as a percentage. | ||
| + | Replacing these four estimates with four numbers needs a per-paper verdict | ||
| + | over the whole hit list — about 400 reads. That work is NOT done. | ||
| ============================================================================== | ============================================================================== | ||
| Line 660: | Line 839: | ||
| --------------------------------------------- | --------------------------------------------- | ||
| mentions IPv6 anywhere | mentions IPv6 anywhere | ||
| - | mentions IPv6 anywhere | + | mentions IPv6 anywhere |
| names an IPv6-targeting instrument in tools[] | names an IPv6-targeting instrument in tools[] | ||
| names an IPv6-targeting instrument in tools[] | names an IPv6-targeting instrument in tools[] | ||
| Line 668: | Line 847: | ||
| discusses aliased prefixes / dealiasing | discusses aliased prefixes / dealiasing | ||
| PUBLISHED_V6_SCAN 281 30.2% | PUBLISHED_V6_SCAN 281 30.2% | ||
| - | PUBLISHED_V6_ACTIVE | + | PUBLISHED_V6_ACTIVE |
| PUBLISHED_V6_INSTR_SCAN 11 | PUBLISHED_V6_INSTR_SCAN 11 | ||
| PUBLISHED_V6_INSTR_ALL 11 | PUBLISHED_V6_INSTR_ALL 11 | ||
| Line 718: | Line 897: | ||
| Population | Population | ||
| ---------- | ---------- | ||
| - | ACTIVE | + | ACTIVE |
| SCAN 930 | SCAN 930 | ||
| corpus | corpus | ||
| - | PUBLISHED_IPCLS_ACTIVE | + | PUBLISHED_IPCLS_ACTIVE |
| PUBLISHED_IPCLS_SCAN 213 22.9% | PUBLISHED_IPCLS_SCAN 213 22.9% | ||
| PUBLISHED_IPCLS_CORPUS 295 5.0% | PUBLISHED_IPCLS_CORPUS 295 5.0% | ||
| - | distinct raw resourceName strings on ACTIVE ip-address classifications: | + | distinct raw resourceName strings on ACTIVE ip-address classifications: |
| 5 MaxMind | 5 MaxMind | ||
| 4 MaxMind GeoLite2 | 4 MaxMind GeoLite2 | ||
| 3 IPinfo | 3 IPinfo | ||
| 3 VirusTotal | 3 VirusTotal | ||
| + | 3 Censys | ||
| 2 MaxMind GeoIP | 2 MaxMind GeoIP | ||
| 2 regular expressions (custom) | 2 regular expressions (custom) | ||
| 2 ipinfo.io | 2 ipinfo.io | ||
| - | 2 Censys | ||
| 2 ASdb | 2 ASdb | ||
| - | 2 IPinfo Lite | ||
| 1 custom response categorization | 1 custom response categorization | ||
| 1 Snacktime (custom implementation) | 1 Snacktime (custom implementation) | ||
| Line 741: | Line 919: | ||
| 1 12 IP reputation blacklists | 1 12 IP reputation blacklists | ||
| 1 MaxMind GeoLiteCity | 1 MaxMind GeoLiteCity | ||
| + | 1 WHOIS | ||
| ============================================================================== | ============================================================================== | ||
| 11. POSTERS AND SHORT RECORDS | 11. POSTERS AND SHORT RECORDS | ||
| ============================================================================== | ============================================================================== | ||
| - | ACTIVE posters: 4 (1.6%); SCAN posters: 34 (3.7%) | + | ACTIVE posters: 4 (1.7%); SCAN posters: 34 (3.7%) |
| - | ACTIVE records of <=4 pages: 6 (2.4%) | + | ACTIVE records of <=4 pages: 6 (2.5%) |
| - | vantage location stated: all ACTIVE 55.5%, excluding <=4-page records 56.1% | + | vantage location stated: all ACTIVE 55.6%, excluding <=4-page records 56.2% |
| PUBLISHED_ACTIVE_POSTERS 4 | PUBLISHED_ACTIVE_POSTERS 4 | ||
| - | PUBLISHED_VANTAGE_FULLONLY 56.1% | + | PUBLISHED_VANTAGE_FULLONLY 56.2% |
| ============================================================================== | ============================================================================== | ||
| 12. MEASURED RESULTS available for the page (detection[].prevalence on ACTIVE) | 12. MEASURED RESULTS available for the page (detection[].prevalence on ACTIVE) | ||
| ============================================================================== | ============================================================================== | ||
| - | ACTIVE papers with at least one detection[].prevalence: | + | ACTIVE papers with at least one detection[].prevalence: |
| - | PUBLISHED_ACTIVE_PREVALENCE | + | PUBLISHED_ACTIVE_PREVALENCE |
| ============================================================================== | ============================================================================== | ||
| Line 868: | Line 1047: | ||
| 41.5 / 0.97 = 42.8 | 41.5 / 0.97 = 42.8 | ||
| the page's own arithmetic reconciling scan_budget.py' | the page's own arithmetic reconciling scan_budget.py' | ||
| - | 174 / 56 = 3.1 | ||
| - | the page's own arithmetic: cites-the-norm over named-an-IRB, | ||
| 16 CIDR entries; 592,708,864 removed (13.8%); 3, | 16 CIDR entries; 592,708,864 removed (13.8%); 3, | ||
| conf/ | conf/ | ||
| Line 926: | Line 1103: | ||
| 30-fold / 2-3 | 30-fold / 2-3 | ||
| ratios inside quoted sentences | ratios inside quoted sentences | ||
| + | |||
| + | ============================================================================== | ||
| + | E. DERIVED ARITHMETIC (recomputed from out/ | ||
| + | ============================================================================== | ||
| + | OK | ||
| RESULT: OK | RESULT: OK | ||
| Line 1273: | Line 1455: | ||
| ' | ' | ||
| ' | ' | ||
| - | ' | + | |
| + | // Ecosystem...": | ||
| + | // to test the DTLS channel of a DTLS-SRTP connection", | ||
| + | // capabilities", | ||
| + | // the same paper' | ||
| + | | ||
| ' | ' | ||
| 'Enemy of the State': | 'Enemy of the State': | ||
| ' | ' | ||
| + | // Two spellings, two papers, two uses — and HAND is keyed by the exact string, | ||
| + | // so they can and must differ. USENIX 2016 " | ||
| + | // Sybils in the Tor Network" | ||
| + | // using Winter et al.'s exitmap tool". | ||
| ' | ' | ||
| - | ' | + | |
| + | // paper; its studyTypes do not include network-scan-or-probe. It uses Exitmap | ||
| + | // only for the node list: "We first use Exitmap [45] to get current available | ||
| + | // exit nodes, from which we build Tor circuits and fetch the index page of the | ||
| + | // forums." | ||
| + | | ||
| ' | ' | ||
| ' | ' | ||
| Line 1310: | Line 1506: | ||
| ' | ' | ||
| ' | ' | ||
| - | ' | + | |
| + | // Diversity": | ||
| + | // vendor fingerprinting methodology and tool", benchmarked as "at least as good | ||
| + | // as Nmap while sending orders of magnitude fewer packets" | ||
| + | // learn what they say; it infers no path and resolves no alias. That is a | ||
| + | // grabber, and this correction puts the paper INTO ACTIVE. | ||
| + | | ||
| 'LTE PROBE': | 'LTE PROBE': | ||
| ' | ' | ||
| Line 1369: | Line 1571: | ||
| ' | ' | ||
| ' | ' | ||
| - | ' | + | |
| + | // MPLS Tunnels" | ||
| + | // mapped each IP address to an inferred router using the MIDAR, iffinder, and | ||
| + | // SNMPv3 alias resolution graph included in the March 2025 ITDK". MIDAR and | ||
| + | // iffinder, named in that same sentence, are already topology. ('dataset' | ||
| + | // the arguable alternative; | ||
| + | // correction takes the paper OUT of ACTIVE. | ||
| + | ' | ||
| ' | ' | ||
| ' | ' | ||
| Line 1385: | Line 1594: | ||
| ' | ' | ||
| ' | ' | ||
| - | ' | + | |
| + | // now suppressed in scripts/ | ||
| + | // me?" never ran it, it fingerprinted its traffic at a telescope — so the name | ||
| + | // no longer reaches this map and an entry here would fail the staleness guard. | ||
| ' | ' | ||
| ' | ' | ||
| Line 1413: | Line 1625: | ||
| // words elsewhere in the tool vocabulary. Pass category === null to fold a bare | // words elsewhere in the tool vocabulary. Pass category === null to fold a bare | ||
| // string, which is what the self-test does. | // string, which is what the self-test does. | ||
| + | // --------------------------------------------------------------------------- | ||
| + | // COMPOUND TUPLE STRINGS. One tools[] entry that names more than one | ||
| + | // instrument. FAMILIES is ordered and first-match-wins, | ||
| + | // lands in exactly one family and the other instrument silently disappears — | ||
| + | // which is how this page and design:dns came to disagree by one paper about | ||
| + | // the size of the ZMap family (the two folds test ZGrab and ZMap in opposite | ||
| + | // order, so the same string went to different families). Each key is | ||
| + | // hand-read against the paper' | ||
| + | // scripts/ | ||
| + | // parts fold to a family the whole string does not. | ||
| + | // Key is the lower-cased, | ||
| + | // each folded through the normal path. | ||
| + | export const COMPOUND_SPLIT = new Map([ | ||
| + | // CCS 2016 "A Surfeit of SSH Cipher Suites" | ||
| + | // IPv4-address-space-wide scans for SSH servers using ZGrab/ZMap [13]." — | ||
| + | // matched verbatim in data/ | ||
| + | // paper.cols.txt on 2026-09-17. Both instruments were used. | ||
| + | [' | ||
| + | ]); | ||
| + | |||
| + | // Every verdict a tools[] name yields, compound names included. Deduplicated | ||
| + | // by family, because a paper naming one instrument twice is still one paper. | ||
| + | export function kindsOfName(raw, | ||
| + | const k = String(raw).trim().toLowerCase(); | ||
| + | const parts = COMPOUND_SPLIT.has(k) ? COMPOUND_SPLIT.get(k) : [raw]; | ||
| + | const seen = new Map(); | ||
| + | for (const part of parts) { | ||
| + | const v = kindOfName(part, | ||
| + | if (v && !seen.has(v.family)) seen.set(v.family, | ||
| + | } | ||
| + | return [...seen.values()]; | ||
| + | } | ||
| + | |||
| export function kindOfName(raw, | export function kindOfName(raw, | ||
| const fam = foldScannerName(raw); | const fam = foldScannerName(raw); | ||
| Line 1545: | Line 1790: | ||
| // before the first count. Two denominators, | // before the first count. Two denominators, | ||
| // | // | ||
| - | // | + | // |
| // censorship-probe / IPv6-targeting instrument they used or produced | // censorship-probe / IPv6-targeting instrument they used or produced | ||
| + | // (245 before the 2026-09-17 hand audit of the HAND verdicts and the | ||
| + | // tuple suppression in tool_use_overrides.mjs) | ||
| // | // | ||
| // Flags: --wiki (DokuWiki tables) | // Flags: --wiki (DokuWiki tables) | ||
| Line 1556: | Line 1803: | ||
| import path from ' | import path from ' | ||
| import { loadExtractions, | import { loadExtractions, | ||
| - | import { kindOfName, MEMBERSHIP_KINDS, | + | import { kindsOfName, MEMBERSHIP_KINDS, |
| + | import { notRun, NOT_RUN, checkNotRun } from ' | ||
| const argv = process.argv.slice(2); | const argv = process.argv.slice(2); | ||
| Line 1578: | Line 1826: | ||
| if (rows.length !== 5859) fail(`corpus ${rows.length} != 5859`); | if (rows.length !== 5859) fail(`corpus ${rows.length} != 5859`); | ||
| + | |||
| + | // A NOT_RUN entry that matches nothing is a lie about what was read. | ||
| + | for (const m of checkNotRun(rows)) fail(m); | ||
| const SCAN = rows.filter((p) => p.studyTypes.includes(' | const SCAN = rows.filter((p) => p.studyTypes.includes(' | ||
| Line 1588: | Line 1839: | ||
| for (const tool of p.tools) { | for (const tool of p.tools) { | ||
| if (!DROVE.has(tool.usedOrMentioned)) continue; | if (!DROVE.has(tool.usedOrMentioned)) continue; | ||
| - | const v = kindOfName(tool.name, tool.category); | + | |
| - | if (!v) continue; | + | for (const v of kindsOfName(tool.name, tool.category)) |
| - | if (!seen.has(v.family)) seen.set(v.family, | + | if (!seen.has(v.family)) seen.set(v.family, |
| - | const e = seen.get(v.family); | + | const e = seen.get(v.family); |
| - | e.names.add(String(tool.name).trim()); | + | e.names.add(String(tool.name).trim()); |
| - | e.cats.add(tool.category); | + | e.cats.add(tool.category); |
| - | if (!isSentinel(tool.version)) e.versions.add(String(tool.version)); | + | if (!isSentinel(tool.version)) e.versions.add(String(tool.version)); |
| + | } | ||
| } | } | ||
| return [...seen.values()]; | return [...seen.values()]; | ||
| Line 1653: | Line 1905: | ||
| ' | ' | ||
| ' | ' | ||
| - | | + | // DROPPED 2026-09-17, was ' |
| + | // projects"). The reading still stands, but the paper left ACTIVE when its | ||
| + | // only membership tuple — a ZMap run over a closed veth loop — was | ||
| + | // suppressed (see scripts/ | ||
| + | // and the pinned-sample guard rejected it. The sample is 11, not 12. | ||
| }; | }; | ||
| const OPT_VERDICT = { | const OPT_VERDICT = { | ||
| Line 1711: | Line 1967: | ||
| for (const tool of p.tools) { | for (const tool of p.tools) { | ||
| if (!DROVE.has(tool.usedOrMentioned) || tool.category !== ' | if (!DROVE.has(tool.usedOrMentioned) || tool.category !== ' | ||
| + | if (notRun(p, tool.name)) continue; | ||
| tuples += 1; | tuples += 1; | ||
| - | const v = kindOfName(tool.name, tool.category); | + | const vs = kindsOfName(tool.name, tool.category); |
| - | if (!v) { un.set(String(tool.name).trim(), | + | if (!vs.length) { un.set(String(tool.name).trim(), |
| - | if (v.via === ' | + | |
| + | | ||
| + | } | ||
| } | } | ||
| } | } | ||
| Line 1752: | Line 2011: | ||
| p.tools.some((tool) => { | p.tools.some((tool) => { | ||
| if (!DROVE.has(tool.usedOrMentioned) || tool.category !== ' | if (!DROVE.has(tool.usedOrMentioned) || tool.category !== ' | ||
| - | | + | |
| - | return v && | + | return |
| }) | }) | ||
| ); | ); | ||
| const namesNS = SCAN.filter((p) => | const namesNS = SCAN.filter((p) => | ||
| - | p.tools.some((tool) => DROVE.has(tool.usedOrMentioned) && tool.category === ' | + | p.tools.some((tool) => DROVE.has(tool.usedOrMentioned) && tool.category === ' |
| + | && !notRun(p, tool.name)) | ||
| ); | ); | ||
| t([' | t([' | ||
| Line 1938: | Line 2198: | ||
| ' | ' | ||
| }; | }; | ||
| - | t([' | + | t([' |
| const a = ACTIVE.filter(f).length; | const a = ACTIVE.filter(f).length; | ||
| const s = SCAN.filter(f).length; | const s = SCAN.filter(f).length; | ||
| Line 1989: | Line 2249: | ||
| } | } | ||
| - | h('8. HAND-READ PRECISION — deterministic every-k-th | + | h('8. HAND-READ PRECISION — a PINNED |
| { | { | ||
| - | | + | |
| - | const hits = probe(ACTIVE, | + | // made the sample |
| - | const step = Math.max(1, Math.floor(hits.length | + | // by three papers and the stride reshuffled all four samples, failing 46 of |
| - | | + | // these checks on papers that were still perfectly good hits — the read was |
| - | | + | // invalidated by arithmetic rather than by evidence. The sample |
| + | // verdict map itself: a frozen list of papers, each with the sentence that | ||
| + | | ||
| const CHECKS = [ | const CHECKS = [ | ||
| - | ['own probe rate', PROBE.rateTight, | + | ['own probe rate', PROBE.rateTight, |
| - | ['own blocklist / exclusion', | + | ['own blocklist / exclusion', |
| - | ['own opt-out offer', | + | ['own opt-out offer', |
| - | ['own source-address hygiene', | + | ['own source-address hygiene', |
| ]; | ]; | ||
| const summary = []; | const summary = []; | ||
| - | for (const [label, re, verdicts, | + | for (const [label, re, verdicts, |
| - | const { hits, sample: sm } = sample(re, n); | + | const hits = probe(ACTIVE, |
| + | const hitKeys = new Set(hits.map(key)); | ||
| + | const sampleKeys = Object.keys(verdicts).sort(); | ||
| say('' | say('' | ||
| - | say(`--- ${label}: ${hits.length} first-person hits of ${ACTIVE.length} ACTIVE; sample of ${sm.length}`); | + | say(`--- ${label}: ${hits.length} first-person hits of ${ACTIVE.length} ACTIVE; |
| - | // Both directions: every sampled | + | say(` sample drawn on 2026-09-10 as every-k-th of a hit list that was then ${drawnFrom} long`); |
| - | // verdict | + | // GUARD 1. Every pinned |
| - | | + | // probe changed or the paper left ACTIVE, and the verdict |
| - | for (const | + | |
| - | const v = verdicts[key(p)]; | + | for (const |
| - | say(` ${(v ?? ' | + | const inHits |
| - | if (!v) fail(`${label}: sampled paper has no hand verdict: | + | say(` ${verdicts[k].padEnd(6)} ${inHits ? ' ' : '!'} ${k}`); |
| - | } | + | if (!inHits) fail(`${label}: |
| - | for (const k of Object.keys(verdicts)) { | + | |
| - | if (!sampleKeys.has(k)) fail(`${label}: | + | |
| } | } | ||
| + | // GUARD 2. A frozen sample silently stops being representative as the hit | ||
| + | // list grows. Pin the length it was drawn from and fail on real drift. | ||
| + | const drift = Math.abs(hits.length - drawnFrom) / drawnFrom; | ||
| + | say(` hit list ${hits.length} now vs ${drawnFrom} at draw time — drift ${(100 * drift).toFixed(1)}%`); | ||
| + | if (drift > 0.15) fail(`${label}: | ||
| + | // GUARD 3. A sample clustered in one corner of the sorted hit list is not a | ||
| + | // sample. Report where the pinned papers sit, so clustering is visible. | ||
| + | const posns = sampleKeys.filter((k) => hitKeys.has(k)).map((k) => hits.findIndex((p) => key(p) === k)); | ||
| + | const spread = posns.length > 1 ? Math.max(...posns) - Math.min(...posns) : 0; | ||
| + | say(` sample positions in the sorted hit list: ${posns.join(', | ||
| + | if (posns.length > 1 && spread < 0.5 * hits.length) fail(`${label}: | ||
| const own = Object.values(verdicts).filter((v) => v === ' | const own = Object.values(verdicts).filter((v) => v === ' | ||
| - | const tot = Object.keys(verdicts).length; | + | const tot = sampleKeys.length; |
| const est = Math.round((hits.length * own) / tot); | const est = Math.round((hits.length * own) / tot); | ||
| say(` precision ${own}/ | say(` precision ${own}/ | ||
| Line 2030: | Line 2303: | ||
| say(' | say(' | ||
| say(' | say(' | ||
| + | say(' | ||
| + | say(' | ||
| } | } | ||
| Line 2047: | Line 2322: | ||
| const v6instrAll = rows.filter((p) => instruments(p).some((v) => v.kind === ' | const v6instrAll = rows.filter((p) => instruments(p).some((v) => v.kind === ' | ||
| t([' | t([' | ||
| - | [' | + | [' |
| - | [' | + | [' |
| [" | [" | ||
| [" | [" | ||
| Line 2182: | Line 2457: | ||
| console.log(out.join(' | console.log(out.join(' | ||
| if (fails.length) process.exit(1); | if (fails.length) process.exit(1); | ||
| + | </ | ||
| + | |||
| + | <file javascript reconcile_zmap.mjs> | ||
| + | # | ||
| + | // Why design:dns said "ZMap and XMap (112 papers)" | ||
| + | // programming: | ||
| + | // | ||
| + | // The two pages count the same thing over the same corpus: | ||
| + | // | ||
| + | // | ||
| + | // for both scanners, counted corpus-wide in the | ||
| + | // | ||
| + | // | ||
| + | // | ||
| + | // kept apart. Both kinds are ' | ||
| + | // which is a MEMBERSHIP_KIND, | ||
| + | // | ||
| + | // and the two counts are ALSO corpus-wide. Only | ||
| + | // only the percentage column on that page uses | ||
| + | // | ||
| + | // | ||
| + | // So the populations are identical and the 1-paper gap was never a population | ||
| + | // difference. It was also not an overlap artefact: no paper names both ZMap and | ||
| + | // XMap. It was ONE compound tools[] string, " | ||
| + | // by two ordered first-match-wins folds (this fold tests ZGrab before ZMap; | ||
| + | // dns_fold tests ZMap/XMap before ZGrab). | ||
| + | // | ||
| + | // Sections: | ||
| + | // | ||
| + | // | ||
| + | // separator whose PARTS fold to a family the WHOLE string does not | ||
| + | // | ||
| + | // | ||
| + | // Exit 1 if an identity fails or if a compound name appears that is not in | ||
| + | // COMPOUND_SPLIT. A new compound name is a FAILURE, not a drop. | ||
| + | // | ||
| + | // Usage: node scripts/ | ||
| + | import { loadExtractions, | ||
| + | import { foldDnsTool, | ||
| + | import { kindOfName, kindsOfName, | ||
| + | import { notRun } from ' | ||
| + | |||
| + | const SHOW_NAMES = process.argv.includes(' | ||
| + | const rows = loadExtractions(); | ||
| + | const key = (p) => `${p.venue}/ | ||
| + | const out = []; | ||
| + | const say = (s = '' | ||
| + | const fails = []; | ||
| + | const fail = (m) => { fails.push(m); | ||
| + | const h = (s) => { say('' | ||
| + | |||
| + | if (rows.length !== 5859) fail(`corpus ${rows.length} != 5859`); | ||
| + | |||
| + | // Both report scripts use the same tuple filter: used or produced, non-sentinel. | ||
| + | const DROVE = new Set([' | ||
| + | // Section 1 reproduces the state the two pages were published in, so it uses | ||
| + | // the raw tuples. Everything after it applies the 2026-09-17 tuple suppression | ||
| + | // too: a tool the paper fingerprinted rather than ran is not an instrument on | ||
| + | // either page (scripts/ | ||
| + | const tuplesRaw = (p) => p.tools.filter((t) => DROVE.has(t.usedOrMentioned) && !isSentinel(t.name)); | ||
| + | const tuples = (p) => tuplesRaw(p).filter((t) => !notRun(p, t.name)); | ||
| + | |||
| + | // Collect one side. `fold` returns a list of labels for a tuple. | ||
| + | function collect(fold, | ||
| + | const m = new Map(); // label -> Map(paperKey -> [names]) | ||
| + | for (const p of rows) { | ||
| + | const k = key(p); | ||
| + | for (const t of pick(p)) { | ||
| + | for (const label of fold(t)) { | ||
| + | if (!m.has(label)) m.set(label, | ||
| + | const inner = m.get(label); | ||
| + | if (!inner.has(k)) inner.set(k, | ||
| + | inner.get(k).push(t.name); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | return m; | ||
| + | } | ||
| + | const emptyMap = new Map(); | ||
| + | const papersOf = (m, label) => new Set((m.has(label) ? m.get(label) : emptyMap).keys()); | ||
| + | |||
| + | // --- 1. as published before the fix ----------------------------------------- | ||
| + | const oldDns = collect((t) => { const f = foldDnsTool(t.name, | ||
| + | const oldScan = collect((t) => { const v = kindOfName(t.name, | ||
| + | const oD = papersOf(oldDns, | ||
| + | const oZ = papersOf(oldScan, | ||
| + | const oX = papersOf(oldScan, | ||
| + | const oS = new Set([...oZ, ...oX]); | ||
| + | const oBoth = [...oZ].filter((k) => oX.has(k)); | ||
| + | const oInter = new Set([...oD].filter((k) => oS.has(k))); | ||
| + | const oDOnly = [...oD].filter((k) => !oS.has(k)).sort(); | ||
| + | const oSOnly = [...oS].filter((k) => !oD.has(k)).sort(); | ||
| + | |||
| + | h('1. THE TWO SIDES AS PUBLISHED (single-valued folds, before 2026-09-17)' | ||
| + | say('' | ||
| + | say(`corpus | ||
| + | say(`dns_fold 'ZMap / XMap' | ||
| + | say(`scan_fold ' | ||
| + | say(`scan_fold ' | ||
| + | say(` naive sum | ||
| + | say(` papers naming BOTH ZMap and XMap (would be double-counted) | ||
| + | say(` scan_fold ZMap U XMap, papers | ||
| + | say('' | ||
| + | say(`shared by both folds ${oInter.size}`); | ||
| + | say(`dns_fold only | ||
| + | say(`scan_fold only ${oSOnly.length}`); | ||
| + | say('' | ||
| + | say(' | ||
| + | if (oBoth.length !== 0) fail(`${oBoth.length} papers name both ZMap and XMap — the overlap story is back`); | ||
| + | say('' | ||
| + | say(' | ||
| + | for (const k of oDOnly) { | ||
| + | const p = rows.find((r) => key(r) === k); | ||
| + | say(` dns_fold ONLY ${k}`); | ||
| + | for (const n of oldDns.get(' | ||
| + | const t = tuplesRaw(p).find((tt) => tt.name === n); | ||
| + | const v = kindOfName(n, | ||
| + | say(` ${JSON.stringify(n)} [cat=${t.category}] | ||
| + | say(` purpose: | ||
| + | say(` evidence: ${t.evidence ? t.evidence.quote : ' | ||
| + | } | ||
| + | } | ||
| + | for (const k of oSOnly) { | ||
| + | const p = rows.find((r) => key(r) === k); | ||
| + | say(` scan_fold ONLY ${k}`); | ||
| + | const names = [...(oZ.has(k) ? oldScan.get(' | ||
| + | for (const n of names) { | ||
| + | const t = tuplesRaw(p).find((tt) => tt.name === n); | ||
| + | const f = foldDnsTool(n, | ||
| + | say(` ${JSON.stringify(n)} [cat=${t.category}] | ||
| + | } | ||
| + | } | ||
| + | if (oInter.size + oDOnly.length !== oD.size) fail(' | ||
| + | if (oInter.size + oSOnly.length !== oS.size) fail(' | ||
| + | |||
| + | // --- 2. the compound-name sweep --------------------------------------------- | ||
| + | // A separator-bearing name whose PARTS fold to a family the WHOLE string does | ||
| + | // not is a name one of the two folds is silently losing. Wide on purpose: the | ||
| + | // point is recall, and every hit is printed whether or not it is acknowledged. | ||
| + | h('2. COMPOUND-NAME SWEEP (recall check over every used/ | ||
| + | const SEP = / | ||
| + | const compounds = new Map(); | ||
| + | let sepNames = 0; | ||
| + | for (const p of rows) { | ||
| + | for (const t of tuples(p)) { | ||
| + | const n = String(t.name).trim(); | ||
| + | if (!SEP.test(n)) continue; | ||
| + | sepNames += 1; | ||
| + | const parts = n.split(SEP).filter(Boolean); | ||
| + | if (parts.length < 2) continue; | ||
| + | const wS = kindOfName(n, | ||
| + | const wD = foldDnsTool(n, | ||
| + | const extraS = new Set(); | ||
| + | const extraD = new Set(); | ||
| + | for (const part of parts) { | ||
| + | const vs = kindOfName(part, | ||
| + | if (vs && (!wS || vs.family !== wS.family)) extraS.add(`${vs.family}/ | ||
| + | const vd = foldDnsTool(part, | ||
| + | if (vd && (!wD || vd.label !== wD.label)) extraD.add(`${vd.label}/ | ||
| + | } | ||
| + | if (!extraS.size && !extraD.size) continue; | ||
| + | const kk = `${n}|${t.category}`; | ||
| + | if (!compounds.has(kk)) { | ||
| + | compounds.set(kk, | ||
| + | n, cat: t.category, papers: new Set(), | ||
| + | wS: wS ? wS.family : null, wD: wD ? wD.label : null, | ||
| + | extraS: [...extraS], | ||
| + | }); | ||
| + | } | ||
| + | compounds.get(kk).papers.add(key(p)); | ||
| + | } | ||
| + | } | ||
| + | say('' | ||
| + | say(`used/ | ||
| + | say(`…of those, names a fold loses part of: ${compounds.size} distinct (name, category) pairs`); | ||
| + | say('' | ||
| + | const ACK = new Set([...DNS_COMPOUND.keys(), | ||
| + | for (const v of [...compounds.values()].sort((a, | ||
| + | const ack = ACK.has(v.n.toLowerCase()); | ||
| + | say(` ${ack ? ' | ||
| + | say(` | ||
| + | say(` | ||
| + | for (const pk of [...v.papers].sort()) say(` | ||
| + | } | ||
| + | say('' | ||
| + | say(' | ||
| + | say(' | ||
| + | say(' | ||
| + | say(' | ||
| + | say(' | ||
| + | { | ||
| + | const MEMBER = new Set([' | ||
| + | const DNSK = new Set([' | ||
| + | ' | ||
| + | for (const v of compounds.values()) { | ||
| + | if (ACK.has(v.n.toLowerCase())) continue; | ||
| + | for (const e of v.extraS) if (MEMBER.has(e.split('/' | ||
| + | for (const e of v.extraD) if (DNSK.has(e.split('/' | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // --- 3. after the fix -------------------------------------------------------- | ||
| + | const newDns = collect((t) => foldDnsToolAll(t.name, | ||
| + | const newScan = collect((t) => kindsOfName(t.name, | ||
| + | const nD = papersOf(newDns, | ||
| + | const nZ = papersOf(newScan, | ||
| + | const nX = papersOf(newScan, | ||
| + | const nS = new Set([...nZ, ...nX]); | ||
| + | const nBoth = [...nZ].filter((k) => nX.has(k)); | ||
| + | const nDG = papersOf(newDns, | ||
| + | const nSG = papersOf(newScan, | ||
| + | |||
| + | h('3. AFTER COMPOUND_SPLIT AND THE TUPLE SUPPRESSION — they must agree exactly' | ||
| + | say('' | ||
| + | say(`dns_fold 'ZMap / XMap' | ||
| + | say(`scan_fold ' | ||
| + | say(`scan_fold ' | ||
| + | say(` papers naming both ${nBoth.length}`); | ||
| + | say(`scan_fold ZMap U XMap | ||
| + | say(`symmetric difference | ||
| + | say('' | ||
| + | say(`dns_fold ' | ||
| + | say(`scan_fold ' | ||
| + | say(`symmetric difference | ||
| + | say('' | ||
| + | say(`PUBLISHED_ZMAP_FAMILY_UNION ${nS.size}`); | ||
| + | say(`PUBLISHED_ZMAP ${nZ.size}`); | ||
| + | say(`PUBLISHED_XMAP ${nX.size}`); | ||
| + | say(`PUBLISHED_ZGRAB ${nSG.size}`); | ||
| + | if (nD.size !== nS.size) fail(`after the split the two folds still disagree: ${nD.size} vs ${nS.size}`); | ||
| + | if (nDG.size !== nSG.size) fail(`ZGrab still disagrees: dns ${nDG.size} vs scan ${nSG.size}`); | ||
| + | if (nZ.size + nX.size - nBoth.length !== nS.size) fail(' | ||
| + | |||
| + | if (SHOW_NAMES) { | ||
| + | h('4. EVERY DISTINCT SPELLING ON EACH SIDE, AFTER THE SPLIT' | ||
| + | const spell = (m, label) => [...new Set([...(m.has(label) ? m.get(label) : emptyMap).values()].flat())].sort().join(' | ||
| + | say('' | ||
| + | say(`dns_fold 'ZMap / XMap': ${spell(newDns, | ||
| + | say(`scan_fold ' | ||
| + | say(`scan_fold ' | ||
| + | say(`scan_fold ' | ||
| + | } | ||
| + | |||
| + | say('' | ||
| + | say(fails.length ? `FAILURES: ${fails.length}` : 'OK — both folds agree and no unacknowledged compound name loses a counted kind' | ||
| + | console.log(out.join(' | ||
| + | process.exit(fails.length ? 1 : 0); | ||
| + | </ | ||
| + | |||
| + | <file text reconcile_zmap-output.txt> | ||
| + | |||
| + | ============================================================================== | ||
| + | 1. THE TWO SIDES AS PUBLISHED (single-valued folds, before 2026-09-17) | ||
| + | ============================================================================== | ||
| + | |||
| + | corpus | ||
| + | dns_fold 'ZMap / XMap' | ||
| + | scan_fold ' | ||
| + | scan_fold ' | ||
| + | naive sum 111 | ||
| + | papers naming BOTH ZMap and XMap (would be double-counted) | ||
| + | scan_fold ZMap U XMap, papers | ||
| + | |||
| + | shared by both folds 111 | ||
| + | dns_fold only 1 | ||
| + | scan_fold only 0 | ||
| + | |||
| + | NOT AN OVERLAP ARTEFACT: the double-count the review suspected is zero. | ||
| + | |||
| + | The whole gap, paper by paper, with the deciding tools[] string: | ||
| + | dns_fold ONLY CCS/ | ||
| + | " | ||
| + | purpose: | ||
| + | evidence: We ran two IPv4-address-space-wide scans for SSH servers using ZGrab/ZMap [13]. | ||
| + | |||
| + | ============================================================================== | ||
| + | 2. COMPOUND-NAME SWEEP (recall check over every used/ | ||
| + | ============================================================================== | ||
| + | |||
| + | used/ | ||
| + | …of those, names a fold loses part of: 4 distinct (name, category) pairs | ||
| + | |||
| + | RESIDUE | ||
| + | | ||
| + | | ||
| + | | ||
| + | RESIDUE | ||
| + | | ||
| + | | ||
| + | | ||
| + | SPLIT 1 paper(s) | ||
| + | | ||
| + | | ||
| + | | ||
| + | RESIDUE | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | RESIDUE rows are names where a fold loses a part and no hand verdict says | ||
| + | that is correct. They are left unsplit ON PURPOSE only when the lost part | ||
| + | changes no published figure; the judgement is on provenance: | ||
| + | internet_scanning. A row whose lost part is a MEMBERSHIP kind (scan page) | ||
| + | or a DNS_KIND (dns page) is a real defect and fails this script. | ||
| + | |||
| + | ============================================================================== | ||
| + | 3. AFTER COMPOUND_SPLIT AND THE TUPLE SUPPRESSION — they must agree exactly | ||
| + | ============================================================================== | ||
| + | |||
| + | dns_fold 'ZMap / XMap' | ||
| + | scan_fold ' | ||
| + | scan_fold ' | ||
| + | papers naming both 0 | ||
| + | scan_fold ZMap U XMap 110 | ||
| + | symmetric difference | ||
| + | |||
| + | dns_fold ' | ||
| + | scan_fold ' | ||
| + | symmetric difference | ||
| + | |||
| + | PUBLISHED_ZMAP_FAMILY_UNION 110 | ||
| + | PUBLISHED_ZMAP 94 | ||
| + | PUBLISHED_XMAP 16 | ||
| + | PUBLISHED_ZGRAB 32 | ||
| + | |||
| + | ============================================================================== | ||
| + | 4. EVERY DISTINCT SPELLING ON EACH SIDE, AFTER THE SPLIT | ||
| + | ============================================================================== | ||
| + | |||
| + | dns_fold 'ZMap / XMap': TCP Options module for ZMap | XMAP | XMap | Xmap (extended) | ZGrab/ZMap | ZMap | ZMap-based script | ZMap6 | ZMapv6 | Zmap | zmap | zmap2 | zmap6 | ||
| + | scan_fold ' | ||
| + | scan_fold ' | ||
| + | scan_fold ' | ||
| + | |||
| + | OK — both folds agree and no unacknowledged compound name loses a counted kind | ||
| + | </ | ||
| + | |||
| + | <file javascript tool_use_overrides.mjs> | ||
| + | // Tuple-level corrections to the extraction' | ||
| + | // by report_internet_scanning.mjs and report_dns.mjs. | ||
| + | // | ||
| + | // WHY THIS FILE EXISTS. The extraction records a tools[] entry as ' | ||
| + | // the paper' | ||
| + | // wrong for one paper shape: a study of *other people' | ||
| + | // scanner name appears because the authors FINGERPRINTED its traffic, not | ||
| + | // because they ran it. A name fold cannot see the difference — the string is | ||
| + | // " | ||
| + | // hand-read. Found on 2026-09-17 while hand-auditing scan_fold.mjs' | ||
| + | // verdicts; the recall probe that bounded it is in the provenance page. | ||
| + | // | ||
| + | // THE RULE APPLIED, written before the entries below: | ||
| + | // (a) suppress when the paper DID NOT RUN the tool — it fingerprinted it, or | ||
| + | // read someone else's output; and | ||
| + | // (b) suppress when the packets NEVER LEFT THE HOST onto the public Internet: | ||
| + | // a closed local loop or a synthetic load generator. | ||
| + | // Do NOT suppress when the paper ran the tool and the packets did cross the | ||
| + | // | ||
| + | // own hosts, a cloud VM it controls. "The target was ours" is a different | ||
| + | // claim from "no packet was sent", and relitigating the former per paper has | ||
| + | // no stopping rule. | ||
| + | // | ||
| + | // | ||
| + | // added on 2026-09-17 after a review pass read USENIX 2022 Spoki and found a | ||
| + | // ZMap run that clause (a) alone would have kept. Recording that here rather | ||
| + | // than back-dating the rule: the rule was incomplete, and one published | ||
| + | // | ||
| + | // | ||
| + | // Key is `venue/ | ||
| + | export const NOT_RUN = new Map([ | ||
| + | // IMC 2024, "Have you SYN me? Characterizing Ten Years of Internet | ||
| + | // Scanning" | ||
| + | // names are fingerprint references. The extraction' | ||
| + | // themselves (" | ||
| + | // says of one of them: "we find no evidence of Unicorn being used for | ||
| + | // Internet-wide scanning and instead record in total only 2 distinct IP | ||
| + | // addresses ever using the Unicorn scanning tool." | ||
| + | [' | ||
| + | ' | ||
| + | [' | ||
| + | ' | ||
| + | [' | ||
| + | ' | ||
| + | [' | ||
| + | ' | ||
| + | // USENIX 2022, " | ||
| + | // Network Telescope" | ||
| + | // packet generator inside their own machine: "A local pair of virtual | ||
| + | // Ethernet interfaces route packets between the packet source and Spoki. We | ||
| + | // use ZMap to generate TCP SYN packets, passing the MAC address of the | ||
| + | // destination interface along with a probing rate and a range of IP | ||
| + | // addresses to use as a source." | ||
| + | // prefix for load generation; nothing is probed. Verified in | ||
| + | // data/ | ||
| + | // This tuple was Spoki' | ||
| + | [' | ||
| + | ' | ||
| + | ]); | ||
| + | |||
| + | // The canonical key. Each report script spells its own paper key differently | ||
| + | // (report_dns.mjs uses year/ | ||
| + | // venue/ | ||
| + | // passing the wrong spelling would silently match nothing. | ||
| + | export const paperKey = (p) => `${p.venue}/ | ||
| + | |||
| + | // True if this (paper, tool) tuple must not count as a used/ | ||
| + | export function notRun(p, toolName) { | ||
| + | return NOT_RUN.has(`${paperKey(p)}|${String(toolName).trim()}`); | ||
| + | } | ||
| + | |||
| + | // Self-check: every NOT_RUN key must name a paper and a tool tuple that exist, | ||
| + | // or the entry is a lie about what was read. Call it from a report script. | ||
| + | export function checkNotRun(rows) { | ||
| + | const fails = []; | ||
| + | for (const k of NOT_RUN.keys()) { | ||
| + | const [pk, tool] = k.split(' | ||
| + | const p = rows.find((r) => paperKey(r) === pk); | ||
| + | if (!p) { fails.push(`NOT_RUN key names no paper: ${pk}`); continue; } | ||
| + | if (!p.tools.some((t) => String(t.name).trim() === tool)) fails.push(`NOT_RUN key names no tools[] entry: ${k}`); | ||
| + | } | ||
| + | return fails; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <file javascript audit_hand_verdicts.mjs> | ||
| + | # | ||
| + | // Dump every HAND verdict in scripts/ | ||
| + | // needs to judge it: the tools[] purpose the verdict was supposedly read off, | ||
| + | // the extractor' | ||
| + | // | ||
| + | // scan_fold.mjs' | ||
| + | // names the FAMILIES list does not fold. The report' | ||
| + | // guards prove every name has a verdict and every verdict matches a name; they | ||
| + | // prove nothing about whether the KIND is right. A wrong kind on a one-off | ||
| + | // scanner name moves ACTIVE by one paper and nothing fires. | ||
| + | // | ||
| + | // Usage: node scripts/ | ||
| + | import { loadExtractions, | ||
| + | import { HAND, MEMBERSHIP_KINDS } from ' | ||
| + | |||
| + | const MEMBER_ONLY = process.argv.includes(' | ||
| + | const TSV = process.argv.includes(' | ||
| + | const rows = loadExtractions(); | ||
| + | const DROVE = new Set([' | ||
| + | const key = (p) => `${p.venue}/ | ||
| + | |||
| + | // name -> list of occurrences | ||
| + | const occ = new Map(); | ||
| + | for (const p of rows) { | ||
| + | for (const t of p.tools) { | ||
| + | if (!DROVE.has(t.usedOrMentioned) || t.category !== ' | ||
| + | const n = String(t.name).trim(); | ||
| + | if (!Object.prototype.hasOwnProperty.call(HAND, | ||
| + | if (!occ.has(n)) occ.set(n, []); | ||
| + | occ.get(n).push({ | ||
| + | paper: key(p), title: p.title, uom: t.usedOrMentioned, | ||
| + | purpose: isSentinel(t.purpose) ? ' | ||
| + | quote: t.evidence ? t.evidence.quote : '(no evidence quote)', | ||
| + | section: t.evidence ? t.evidence.section : '', | ||
| + | }); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | const names = Object.keys(HAND).sort((a, | ||
| + | const shown = names.filter((n) => !MEMBER_ONLY || MEMBERSHIP_KINDS.has(HAND[n])); | ||
| + | if (TSV) { | ||
| + | console.log([' | ||
| + | for (const n of shown) { | ||
| + | for (const o of occ.get(n)) { | ||
| + | console.log([n, | ||
| + | o.paper, o.title, o.purpose, String(o.quote).replace(/ | ||
| + | } | ||
| + | } | ||
| + | process.exit(0); | ||
| + | } | ||
| + | console.log(`HAND verdicts: ${names.length}; | ||
| + | console.log(`of the ${names.length}, | ||
| + | console.log('' | ||
| + | for (const n of shown) { | ||
| + | const list = occ.get(n); | ||
| + | console.log(`### | ||
| + | for (const o of list) { | ||
| + | console.log(` | ||
| + | console.log(` | ||
| + | console.log(` | ||
| + | console.log(` | ||
| + | } | ||
| + | console.log('' | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <file text audit_hand_verdicts-output.txt> | ||
| + | HAND verdicts: 173; shown: 173 | ||
| + | of the 173, 35 put their paper in ACTIVE | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Measures RTT using probes piggybacked on established TCP connections. | ||
| + | quote We developed a Go package that implements 0trace. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title From 5G Sniffing to Harvesting Leakages of Privacy-Preserving Messengers. | ||
| + | purpose Decode live 5G control channels and recover RNTI scheduling | ||
| + | quote We introduce our tool 5GSniffer, which is, to the best of our knowledge, the first open-source implementation of a promiscuous 5G control channel sniffer | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title From .academy to .zone: An Analysis of the New TLD Land Rush. | ||
| + | purpose Followed DNS chains and collected A, AAAA, CNAME, and NS records | ||
| + | quote Every time we Web crawl a domain, we also perform a DNS query using a DNS crawler developed for [15]. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title A Large-scale and Longitudinal Measurement Study of DKIM Deployment | ||
| + | purpose Query DKIM, SPF, and DMARC records. | ||
| + | quote We select the top 40 selectors to actively scan the Alexa top 1 million domains. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title How to Catch when Proxies Lie: Verifying the Physical Locations of Network Proxies with Active Geolocation. | ||
| + | purpose Reimplemented and ran active-geolocation algorithms. | ||
| + | quote We reimplemented four active geolocation algorithms from earlier papers: CBG [20], Octant [45], Spotter [30], and an Octant/ | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Perform stealthy LTE message overshadowing | ||
| + | quote For message overshadowing, | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Enabled Wi-Fi receiver monitor mode. | ||
| + | quote We enabled " | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Resolved IP aliases using IP-ID measurements. | ||
| + | quote | ||
| + | paper | ||
| + | title | ||
| + | purpose Performed follow-up ICMP, UDP, and TCP alias probing. | ||
| + | quote we used Ally [27] with ICMP, UDP, and TCP probes, and Mercator [8]. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Can I Take Your Subdomain? Exploring Same-Site Attacks in the Modern Web | ||
| + | purpose Enumerated subdomains using public sources and DNS techniques. | ||
| + | quote The enumeration phase was based on amass [41], a state of the art information gathering tool backed by the OWASP project. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Discover amplification-inducing query patterns | ||
| + | quote We implemented AmpMap, validated our parameter settings in lab settings, and ran real-world measurements. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Generate ordered target IP lists for each targeted AS. | ||
| + | quote Then, for each AS, we built a list of target IP addresses, using Anaximander, | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Enumerating Apple CDN DNS names | ||
| + | quote By scanning Apple' | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Scan Me If You Can: Understanding and Detecting Unwanted Vulnerability Scanning. | ||
| + | purpose Scanned test web applications | ||
| + | quote Table 1 lists the 12 scanners that we analyze in this study along with their corresponding version information. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Probe IPv4 address-resolution behavior in cloud VPS networks. | ||
| + | quote | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Collected running Bitcoin server lists. | ||
| + | quote In order to periodically get the list of all running Bitcoin servers we used an open source crawler [4]. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title I know where you are and what you are sharing: exploiting P2P communications to invade users' privacy. | ||
| + | purpose Collects IP addresses from BitTorrent swarms. | ||
| + | quote The BitTorrent crawler collects the IP addresses participating in the 50,000 most popular swarms | ||
| + | |||
| + | ### "Black Widow" | ||
| + | paper | ||
| + | title Scan Me If You Can: Understanding and Detecting Unwanted Vulnerability Scanning. | ||
| + | purpose Scanned test web applications | ||
| + | quote We augment this list with two academic scanners: Black Widow and Enemy of the State, resulting in 12 scanners. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Sniffed Bluetooth MAC addresses | ||
| + | quote we can use the open source Bluesniff [23] package and a USRP-based software radio to sniff our car's Bluetooth MAC address | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Many Roads Lead To Rome: How Packet Headers Influence DNS Censorship Measurement | ||
| + | purpose Generate, capture, and analyze DNS censorship probes | ||
| + | quote | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Recover Bluetooth LAP and UAP address fragments. | ||
| + | quote We employ the current state-of-the-art in passive Bluetooth monitoring [6] as a method for recovering addresses from local traffic. This program is open-source [34] | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Less is More: Quantifying the Security Benefits of Debloating Web Applications | ||
| + | purpose Scanned headers, URLs, and forms for vulnerabilities. | ||
| + | quote We use BurpSuite Scanner v2.0.14beta [2] based on the URLs extracted by the spider to look for vulnerabilities in headers, URLs and forms. | ||
| + | |||
| + | ### "CAIDA AS Relationships Dataset" | ||
| + | paper | ||
| + | title The Hijackers Guide To The Galaxy: Off-Path Taking Over Internet Resources | ||
| + | purpose Construct AS-level topology maps. | ||
| + | quote For creating the topological map of the AS-relationship dataset of the customer domains and the providers in our dataset we use CAIDA [3]. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title State of the Art: Automated Black-Box Web Application Vulnerability Testing. | ||
| + | purpose Scan test applications for web vulnerabilities. | ||
| + | quote The eight scanners are listed in Table I. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title On the Feasibility of Rerouting-Based DDoS Defenses. | ||
| + | purpose Simulated BGP propagation over inferred AS topology. | ||
| + | quote We use the Chaos simulator [4], an open-source BGP simulator that has been used to evaluate the RAC proposal [51], to simulate the network topology and BGP propagation among ASes in the network. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Hope of Delivery: Extracting User Locations From Mobile Instant Messengers | ||
| + | purpose Runs ping and traceroute measurements from multiple locations. | ||
| + | quote We continue with a series of systematic Ping and Traceroute experiments from different geographical locations using a public API provided by CheckHost [7]. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title “We may share the number of diaper changes”: A Privacy and Security Analysis of Mobile Child Care Applications | ||
| + | purpose Find publicly accessible cloud storage resources | ||
| + | quote This tool tries to find any publicly accessible cloud storage resources at Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform based on given keywords. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Activate binaries and identify or probe live C2 servers. | ||
| + | quote Among the various tools, we selected CnCHunter, a powerful open-source tool for analyzing IoT malware binaries. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Scan Me If You Can: Understanding and Detecting Unwanted Vulnerability Scanning. | ||
| + | purpose Scanned test web applications | ||
| + | quote Table 1 lists the 12 scanners that we analyze in this study along with their corresponding version information. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Detect cross-app OAuth vulnerabilities through modified traffic | ||
| + | quote To facilitate systematic discovery of vulnerabilities, | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title When Governments Hack Opponents: A Look at Actors and Technology | ||
| + | purpose Searched historical Internet scanning data for FinSpy indicators. | ||
| + | quote | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Downloaded CT logs and assembled unique SAN datasets. | ||
| + | quote we created a free and open-source tool named ct-sans that assembles a reproducible dataset of Subject Alternative Names (SANs) found via CT. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Dead Domains, Living Data: A Privacy Risk Analysis of Domain Lifecycle in Android Apps | ||
| + | purpose Detect dangling CNAME chains and unclaimed resources | ||
| + | quote We used danglingcname [44] to identify CNAME chains that point to deallocated or unclaimed third-party resources | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Provide interdomain load-balancing diamonds. | ||
| + | quote The authors of Diamond Miner provided us with 81, 581 interdomain diamonds collected in August 2019. | ||
| + | |||
| + | ### "dMAP (DPI Mapper)" | ||
| + | paper | ||
| + | title | ||
| + | purpose Generate, send, analyze, and aggregate DPI fingerprinting probes. | ||
| + | quote we design and implement dMAP (DPI Mapper), a framework that systematically discovers, selects, and deploys specialized network probes | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Measured vulnerable DNS services and load-balancing impact. | ||
| + | quote We designed DMiner, which is a semiautomatic framework that finds affected services, and it further estimates the effect that an adversary can cause. | ||
| + | |||
| + | ### "DNS crawler" | ||
| + | paper | ||
| + | title Click Trajectories: | ||
| + | purpose Enumerated DNS records and name-server infrastructure. | ||
| + | quote We developed a DNS crawler to identify the name server infrastructure used to support spam-advertised domains, and the address records they specify for hosting those names. | ||
| + | |||
| + | ### "DNS Scanner" | ||
| + | paper | ||
| + | title | ||
| + | purpose Detected wildcard-DNS link farms. | ||
| + | quote Link Farm (SSP) [6, 11, 27, 64] Hot-words DNS Scanner [11] 200 | ||
| + | |||
| + | ### "DNS X-Ray Tool" | ||
| + | paper | ||
| + | title | ||
| + | purpose Implemented and customized the authoritative DNS server | ||
| + | quote | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Path to Encrypted DNS with DDR: Adoption, Configuration Patterns, and Privacy Implications | ||
| + | purpose Conducted scalable DDR and encrypted-DNS measurements. | ||
| + | quote the measurement tool DoE-Hunter [63], along with the corresponding research study dataset, has been made available to the public online [64]. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Learn models and test DTLS implementations. | ||
| + | quote | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Intercept and actively test DTLS-SRTP connections | ||
| + | quote We developed an automated DTLS-SRTP testing platform, called DMS, to probe the DTLS component of any party willing to establish DTLS-SRTP/ | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Why TLS is better without STARTTLS: A Security Analysis of STARTTLS in the Email Context | ||
| + | purpose Generated and executed semi-automatic STARTTLS test cases. | ||
| + | quote We introduce EAST, a semi-automatic toolkit for analyzing SMTP, POP3, and IMAP implementations, | ||
| + | |||
| + | ### "Enemy of the State" | ||
| + | paper | ||
| + | title Scan Me If You Can: Understanding and Detecting Unwanted Vulnerability Scanning. | ||
| + | purpose Scanned test web applications | ||
| + | quote We augment this list with two academic scanners: Black Widow and Enemy of the State, resulting in 12 scanners. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Probe IPv6 reachability and infer ROV deployment | ||
| + | quote We implemented a prototype framework (about 4.5K lines of code) and conducted a preliminary experiment that covers 5,440 ASes. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Scan Tor exit relays for traffic tampering | ||
| + | quote We exposed malicious exit relays using Winter et al.'s exitmap tool [37, § 3.1]. Exitmap is a Python-based scanning framework for Tor exit relays. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Identified currently available Tor exit nodes. | ||
| + | quote We first use Exitmap [45] to get current available exit nodes, from which we build Tor circuits | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Perform complete-remapping comparison measurements. | ||
| + | quote We execute both FastMDA and Scamper [29], popular traceroute tools, to perform complete remapping in order to compare across different implementations. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Scan Me If You Can: Understanding and Detecting Unwanted Vulnerability Scanning. | ||
| + | purpose Collected passive TLS fingerprints | ||
| + | quote We incorporate the FingerprinTLS library in our system to passively collect TLS fingerprints. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Conduct high-speed Internet-scale traceroute scans. | ||
| + | quote | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Detect SAV failures via misbehaving DNS forwarders | ||
| + | quote We performed Internet-wide forwarders-based scans of IPv4 space weekly between September 2020 and February 2021 | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Probed gateway accessibility for denylisted CIDs. | ||
| + | quote We then implement a gateway checker that verifies the accessibility of all the denylist CIDs from every gateway on the gateway list. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Scan Me If You Can: Understanding and Detecting Unwanted Vulnerability Scanning. | ||
| + | purpose Scanned test web applications | ||
| + | quote Table 1 lists the 12 scanners that we analyze in this study along with their corresponding version information. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title A QUIC Look at Web Tracking | ||
| + | purpose Sent QUIC client hello probes during the Internet scan. | ||
| + | quote Thus, we used the tool Zmap [8] with the gQUIC-module [29] to send a client hello message to UDP port 443 of each Alexa-listed host. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Testing HTTP/2 continuation-frame flooding | ||
| + | quote We used the open-source tool h2spec to test Krill and Routinator and verify the presence of this vulnerability. | ||
| + | |||
| + | ### "HP WebInspect" | ||
| + | paper | ||
| + | title State of the Art: Automated Black-Box Web Application Vulnerability Testing. | ||
| + | purpose Scan test applications for web vulnerabilities. | ||
| + | quote The eight scanners are listed in Table I. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Probe Internet paths and identify loss-pair events. | ||
| + | quote We conducted loss-pair measurement using HTTP/ | ||
| + | |||
| + | ### "IBM Rational AppScan" | ||
| + | paper | ||
| + | title State of the Art: Automated Black-Box Web Application Vulnerability Testing. | ||
| + | purpose Scan test applications for web vulnerabilities. | ||
| + | quote The eight scanners are listed in Table I. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Change an InfiniBand port local identifier | ||
| + | quote we found out that the ibportstate tool from the infinibanddiags package allows privileged users to change the configuration of the RNIC | ||
| + | |||
| + | ### "ICMP Paris" | ||
| + | paper | ||
| + | title On the prevalence and characteristics of MPLS deployments in the open internet. | ||
| + | purpose Specified the traceroute probe method. | ||
| + | quote The probing tool used in Ark is Scamper [26], and the specific traceroute method used is ICMP Paris [28]. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Probe hosts using spoofed ICMP messages | ||
| + | quote This study introduces two novel approaches implemented in ICMP_Sonar, a tool using meticulously crafted spoofed ICMP messages to detect the presence and efficacy of ISAV. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Provide IP alias-resolution data for inferred routers. | ||
| + | quote All the traceroutes used ICMP Paris traceroute [15,39], which controls the IP and transport headers to reduce load balancing, and a combination of iffinder [21] and MIDAR [22] for alias resolution. | ||
| + | paper | ||
| + | title | ||
| + | purpose Resolving aliases in the ITDK topology graph | ||
| + | quote we mapped each IP address to an inferred router using the MIDAR, iffinder, and SNMPv3 alias resolution graph included in the March 2025 ITDK | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Compared MAnycast2 classifications using latency-based measurements. | ||
| + | quote To compare our results with those obtained by iGreedy (Table 3), we ran iGreedy against a set of target addresses. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Back to School: On the (In)Security of Academic VPNs | ||
| + | purpose Probe IKE back-ends for aggressive mode. | ||
| + | quote we probed the IKE back-ends discovered in Section 3.2 using the open source tool ike-scan | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title When Governments Hack Opponents: A Look at Actors and Technology | ||
| + | purpose Searched Internet-wide service-probe and certificate-scan data. | ||
| + | quote We searched sources including Shodan, Internet Census service probes, and Critical.IO scanning data for the observed distinctive HTTP behavior. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Measure network throughput | ||
| + | quote We use standard tools such as iperf [8] and ping to measure the network throughput and path latency of a provider. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Measure maximum achievable network bandwidth. | ||
| + | quote To test network bandwidth occupation, we employ the iPerf3 tool [45] that is designed for active measurements of the maximum achievable bandwidth. | ||
| + | |||
| + | ### "IPFS Crawler" | ||
| + | paper | ||
| + | title The Cloud Strikes Back: Investigating the Decentralization of IPFS. | ||
| + | purpose Enumerated outgoing DHT connections and network topology. | ||
| + | quote Using the DHT crawler presented in [32, 79], we can enumerate all outgoing DHT connections of functional DHT server nodes. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Scan Iranian IPs and domains for censorship | ||
| + | quote we developed IRBlock, a large-scale, | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Conduct Internet-wide service-discovery scans | ||
| + | quote Using IRLscanner and 24-hour scans, we perform 21 Internet-wide experiments using 6 different protocols | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title From GEO to LEO: First Look Into Starlink In-Flight Connectivity. | ||
| + | purpose Performed 10 ms-granularity UDP latency measurements. | ||
| + | quote This allows MEs to conduct high-frequency (10 ms granularity) UDP ping measurements via IRTT [19] to the closest AWS server | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Where The Light Gets In: Analyzing Web Censorship Mechanisms in India. | ||
| + | purpose Located censorship middleboxes along router-level paths. | ||
| + | quote We devised a technique which we collectively call Iterative Network Tracing (INT), that works on the principle used by traceroute. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Probe IPv6 extension-header survivability across Internet paths. | ||
| + | quote This extended abstract introduces James, a new tool for measuring how IPv6 Extension Headers (IPv6 EHs) are processed in the network. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Compare alternative alias-resolution groupings. | ||
| + | quote | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Am I Infected? Lessons from Operating a Large-Scale IoT Security Diagnostic Service | ||
| + | purpose Scanning IoT IP addresses for vulnerabilities and device models. | ||
| + | quote Our service utilizes the IoT scan engine Karma [9], developed by 00One, Inc. The Karma' | ||
| + | paper | ||
| + | title Who Left the Door Open? Investigating the Causes of Exposed IoT Devices in an Academic Network. | ||
| + | purpose Identify hosts exposing Telnet, FTP, and IoT risks. | ||
| + | quote We used a service named Karma [10] to identify hosts running Telnet (23/TCP) and/or FTP (21/TCP). | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Sent random L2CAP packets for RTT evaluation. | ||
| + | quote We further use l2ping [58] on Linux to perform end-to-end evaluation on BlueSWAT. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Run distributed anycast and latency-based Internet censuses. | ||
| + | quote We built LACeS, a new system that combines the MAnycast2 anycast measurement approach ... and the Great Circle Distance (GCD) approach | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Scan, sample, and analyze Internet-facing LDAP servers. | ||
| + | quote For our study, we built a custom tool, LanDscAPe, that identifies public LDAP servers on the Internet, assesses their configuration, | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Fingerprint router vendors using lightweight active probes. | ||
| + | quote | ||
| + | |||
| + | ### "LTE PROBE" | ||
| + | paper | ||
| + | title | ||
| + | purpose Passively sniff uplink and downlink LTE traffic | ||
| + | quote We implement the first white-box uplink and downlink LTE sniffer, called LTE PROBE. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title 403 Forbidden: A Global View of CDN Geoblocking. | ||
| + | purpose Probe websites through residential proxy exits. | ||
| + | quote We implemented a new probing tool, Lumscan, that greatly improves the reliability of the data. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Tested Wi-Fi client isolation. | ||
| + | quote the attacker detects whether AP isolation is enabled via network scanning tools (e.g., Nmap [36], MacStealer [32]). | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title On Borrowed Time: Measurement-Informed Understanding of the NTP Pool’s Robustness to Monopoly Attacks | ||
| + | purpose Identify registered IP anycast servers. | ||
| + | quote the remaining six servers are all IP anycast, as determined by looking up their addresses in the MAnycast anycast census [40]. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Of Choices and Control - A Comparative Analysis of Government Hosting. | ||
| + | purpose Identified anycast server addresses. | ||
| + | quote To determine if a server address is anycast, we rely on a recent data snapshot from MAnycast2 | ||
| + | |||
| + | ### "Mao et al. AS-path inference algorithm" | ||
| + | paper | ||
| + | title | ||
| + | purpose Inferred shortest valley-free AS paths. | ||
| + | quote We infer AS paths using the algorithm proposed by Mao et al. [43], which searches for shortest valley-free paths | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Infer AS interconnections when bdrmapIT cannot apply. | ||
| + | quote | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title A Framework to Evaluate MPIC Security using Real-World BGP Announcements. | ||
| + | purpose Launch BGP hijacks and collect MPIC perspective outcomes. | ||
| + | quote We design and deploy a system that evaluates the effectiveness of MPIC in the real world using ethically-launched real-world BGP attacks. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title State of the Art: Automated Black-Box Web Application Vulnerability Testing. | ||
| + | purpose Remotely scan test applications for vulnerabilities. | ||
| + | quote We ran two of the tested scanners, McAfee and Qualys, as remote services whereby the user configures the scanner via a web-interface. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Resolved aliases from ICMP port-unreachable responses. | ||
| + | quote | ||
| + | paper | ||
| + | title | ||
| + | purpose Provided aliases and performed follow-up probing. | ||
| + | quote For the interfaces in the good class that were responsive to alias resolution at the time of our probing in May 2019, we used Ally [27] with ICMP, UDP, and TCP probes, and Mercator [8]. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Is Nobody There? Good! Globally Measuring Connection Tampering Without Responsive Endhosts. | ||
| + | purpose Automated packet-sequence interference measurement | ||
| + | quote We present a system, Mint (Measuring Interference with Nonresponsive Targets), that generalizes this approach to the global IPv4 and IPv6 Internet. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title On Borrowed Time: Measurement-Informed Understanding of the NTP Pool’s Robustness to Monopoly Attacks | ||
| + | purpose Fingerprint NTP responses and identify aliased servers. | ||
| + | quote we implement active server fingerprinting starting with the open-source " | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Route-stable censorship measurements and application-level traceroutes | ||
| + | quote We develop Monocle (Figure 1) to explore 3 commonly censored protocols: DNS, HTTP, and HTTPS. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title On the impact of layer-2 on node degree distribution. | ||
| + | purpose Discover multicast-enabled router interfaces and neighbors. | ||
| + | quote | ||
| + | paper | ||
| + | title | ||
| + | purpose Generated known-alias ground truth. | ||
| + | quote we use a dataset of known aliases generated by mrinfo measurements on December 30th, 2009 | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title On the impact of layer-2 on node degree distribution. | ||
| + | purpose Recursively probe discovered router addresses each day. | ||
| + | quote Our approach in probing the network with mrinfo is recursive and we call such a probing scheme mrinfo-rec. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title State of the Art: Automated Black-Box Web Application Vulnerability Testing. | ||
| + | purpose Scan test applications for web vulnerabilities. | ||
| + | quote The eight scanners are listed in Table I. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title In and Out of Cuba: Characterizing Cuba's Connectivity. | ||
| + | purpose Run hourly traceroutes from globally distributed endhosts. | ||
| + | quote For this dataset, Namehelp clients ran hourly traceroute measurements to prefixes located in Cuba. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Probed database and SSH ports. | ||
| + | quote We use basic Linux tools (e.g., nc, openssl) and Java net URL APIs to implement the system. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Probe IPv6 neighbor-discovery behavior in cloud VPS networks. | ||
| + | quote | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Checked active servers and open ports. | ||
| + | quote Then we used the Netcat [28] to scan open ports and filter out inaccessible or offline servers. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Interpose on and alter client packets. | ||
| + | quote | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title TCP congestion signatures. | ||
| + | purpose Run controlled and baseline throughput tests. | ||
| + | quote We use netperf to run 10-second downstream throughput tests from Server 1 to Pi 1. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Monitored Android network usage and channels. | ||
| + | quote We associated the channels (TCP/UDP and virtual devices) with the emulator components through dynamically monitoring the network and resource usage (e.g., through " | ||
| + | paper | ||
| + | title | ||
| + | purpose Identified network-facing processes for FirmAE comparison. | ||
| + | quote To compare with FirmAE, we ran the netstat [39] tool to identify network-facing processes during emulation. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Identify open device ports during traffic monitoring. | ||
| + | quote We use Netstat to identify open ports on the mobile device, ensuring that connections are exclusively made by the app under analysis. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Ran traceroute measurements on iOS devices. | ||
| + | quote In the case of iOS, we use the applications Net Analyzer and Ping Traceroute. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Time Tells All: Deanonymization of Blockchain RPC Users with Zero Transaction Fee. | ||
| + | purpose Identify realistic geographic routing paths for relay placement. | ||
| + | quote We artificially deploy software routers on cloud servers at various geographic locations along real-world routes identified using traceroute-like tools (e.g., NextTrace). | ||
| + | |||
| + | ### "node probing program" | ||
| + | paper | ||
| + | title | ||
| + | purpose Identified Monero mainnet nodes with open RPC ports. | ||
| + | quote We utilized a node probing program to identify Monero mainnet nodes with open RPC ports. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Discover, monitor, and characterize Ethereum DEVp2p nodes. | ||
| + | quote We then built NodeFinder, an open-source and ethical measurement tool for characterizing the three protocols that constitute Ethereum' | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Collected sub-millisecond 5G PHY/MAC telemetry and retransmissions. | ||
| + | quote We use NR-Scope [33] to gather measurements from the 5G PHY/MAC layers in sub-millisecond resolution, including traffic-scheduling information and retransmission events. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Simulate rate-limiter and network scenarios. | ||
| + | quote We use our prototype to answer the former and ns-3 simulation [32] for the latter. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Trust but Verify: An Assessment of Vulnerability Tagging Services | ||
| + | purpose Independently probed endpoints using CVE templates. | ||
| + | quote We use the Nuclei toolchain [31] to conduct payload-based detections. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Generated single-connection TCP throughput traffic. | ||
| + | quote To measure throughput, we used nuttcp [10] with the default TCP congestion control algorithm, CUBIC, to generate downlink and uplink backlogged traffic | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Send TCP probe pairs and infer delivery statuses. | ||
| + | quote | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Retrieve device information through SNMP scanning. | ||
| + | quote We use ZGrab [6] and a fast SNMP scanner [31] to retrieve systems information about these transparent forwarders. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Scanned HTTPS domains for Onion-Location configuration. | ||
| + | quote We created a free and open-source tool named onion-grab to determine which HTTPS sites configure O-L. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Discover transparent forwarders and measure OSAV deployment characteristics. | ||
| + | quote We present OSAVRoute, the first non-cooperative measurement system capable of capturing fine-grained characteristics of OSAV deployment. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Performed low-interaction PCI vulnerability scans. | ||
| + | quote Using PciCheckerLite, | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title SoK: The Challenges, Pitfalls, and Perils of Using Hardware Performance Counters for Security. | ||
| + | purpose Obtain hardware performance-counter measurements. | ||
| + | quote We used the Perf tool v4.4.90 to obtain performance counter measurements. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Scanned simulated PLCs for device information. | ||
| + | quote Next, we used PLCScan to scan each PLC Profile in similar fashion as the Nmap methodology. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Confirmed inbound interfaces and point-to-point links. | ||
| + | quote We use the prefixscan algorithm [26] to try to confirm that we observe the inbound interface of a router in traceroute, rather than a third-party address. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title A Look at the ECS Behavior of DNS Resolvers. | ||
| + | purpose Scan IPv4 space with DNS queries | ||
| + | quote The scan was conducted from a machine on our campus network using a Python script that issued 25K DNS queries per second | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Test standard QUIC handshakes | ||
| + | quote | ||
| + | paper | ||
| + | title | ||
| + | purpose Performed QUIC handshakes and HTTP/3 HEAD requests. | ||
| + | quote We perform QUIC handshakes and HTTP/3 HEAD requests using QScanner [30]. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title State of the Art: Automated Black-Box Web Application Vulnerability Testing. | ||
| + | purpose Remotely scan test applications for vulnerabilities. | ||
| + | quote We ran two of the tested scanners, McAfee and Qualys, as remote services whereby the user configures the scanner via a web-interface. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title A QUIC Look at Web Tracking | ||
| + | purpose Established QUIC connections to identified websites. | ||
| + | quote To analyze the default configuration of the identified 186 QUIC-enabled websites, we used the tool quicgrabber [29] to establish QUIC connections to them. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Logs attestations, | ||
| + | quote We call our modified consensus node RAINBOW throughout, as RAINBOW acts as a Prysm, taking peer input and breaking it down into the “colors” of the validators. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title State of the Art: Automated Black-Box Web Application Vulnerability Testing. | ||
| + | purpose Scan test applications for web vulnerabilities. | ||
| + | quote The eight scanners are listed in Table I. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Scanned IPv4 addresses for RAT controllers. | ||
| + | quote we also created RAT-Scan, which is able to differentiate some sinkholes, including our high fidelity RAT-Hole, from actual RAT controllers | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Can I Take Your Subdomain? Exploring Same-Site Attacks in the Modern Web | ||
| + | purpose Detected dangling DNS records and takeover preconditions. | ||
| + | quote This component, that we call RDScan, has three different modules that test for the presence of the vulnerable scenarios described in §3.2.1. | ||
| + | |||
| + | ### "revtr 2.0" | ||
| + | paper | ||
| + | title | ||
| + | purpose Measure reverse Internet paths at scale. | ||
| + | quote In this paper we design, implement and evaluate revtr 2.0, an Internet-scale Reverse Traceroute system | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Probe DNS resolution chains and identify configuration risks. | ||
| + | quote We present RMap, a tool that rapidly probes all potential resolution chains of a domain, reveals its resolution dependency topology, and detects security risks. | ||
| + | |||
| + | ### "SAD DNS" | ||
| + | paper | ||
| + | title The Maginot Line: Attacking the Boundary of DNS Caching Protection | ||
| + | purpose Scanned ephemeral UDP ports during off-path attacks. | ||
| + | quote We solve this challenge by adjusting SAD DNS to attack BIND. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title The Hijackers Guide To The Galaxy: Off-Path Taking Over Internet Resources | ||
| + | purpose Infer resolver source ports through ICMP side channels. | ||
| + | quote We use our own implementation of the SadDNS port scanning application with binary search and attempt to poison the resolver with a malicious record. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title The Dangers of Key Reuse: Practical Attacks on IPsec IKE | ||
| + | purpose Construct and control IKE network packets. | ||
| + | quote Our test initiator is based on Scapy [8], a Python library for network packet manipulation. | ||
| + | paper | ||
| + | title | ||
| + | purpose Decoded, crafted, and manipulated protocol packets | ||
| + | quote We analyze the packets using scapy [7], a network analysis tool. | ||
| + | paper | ||
| + | title | ||
| + | purpose Crafted and transmitted attack and probing packets. | ||
| + | quote an attack machine equipped with Linux 5.19.0 and Scapy, with the capability of IP spoofing | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Provide historical DNSSEC penetration statistics. | ||
| + | quote our partial historical DNSSEC penetration statistics (collected through SecSpider4 [67]) | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Simulated Tor circuits using injected consensus files. | ||
| + | quote we simulated Tor with Shadow [15] based on the injected consensus files and server descriptors. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Detect shaping and estimate capacity, rate, and burst size. | ||
| + | quote We develop an active end-to-end detection mechanism, referred to as ShaperProbe, | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Scan Me If You Can: Understanding and Detecting Unwanted Vulnerability Scanning. | ||
| + | purpose Scanned test web applications | ||
| + | quote Table 1 lists the 12 scanners that we analyze in this study along with their corresponding version information. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Enumerated anonymous SMB sessions and unprotected shares. | ||
| + | quote We customize it to add support for specifying source ports and enhance its performance and stability. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Obtaining self-reported router vendors | ||
| + | quote We were able to identify the router vendor for 95,013 of these addresses. We identified vendors for 49,390 routers by the routers disclosing their own manufacturer in the SNMPv3 probe response. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Supplied IPv6 topology datasets for evaluation. | ||
| + | quote Two ITDK datasets (August 2017 and January 2019) contain router-level graphs inferred using Speedtrap [16]. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Reactive telescope probing and scanner-event collection | ||
| + | quote In this work, we examine Internet-wide scan traffic through Spoki, a reactive network telescope operating in real-time that we design and implement. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Conducted automated source-address-validation tests from volunteer networks. | ||
| + | quote The data from the Spoofer project comes from volunteers who run the Spoofer client, which sends and receives a variety of spoofed packets. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title On the Feasibility of Rerouting-Based DDoS Defenses. | ||
| + | purpose Simulated fine-grained BGP convergence and path hunting. | ||
| + | quote we use SSFNet [13] and add BGP poisoning and hole punching capabilities to it, instead of using the Chaos simulator | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Inferred AS-level paths for simulated Tor streams. | ||
| + | quote After all streams are generated, we use them as input to Swordqiu, the Qiu and Gao AS-level path inference tool. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Logged TCP congestion-window values. | ||
| + | quote we instead use our local proxy to serve both the video traffic and the competing flow, and use the tcp_probe kernel module to log the cwnd values. | ||
| + | paper | ||
| + | title | ||
| + | purpose Observe the sender TCP congestion window. | ||
| + | quote We use tcp_probe [5] to observe the sender' | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Collected distributed ICMP reachability samples during weather alerts. | ||
| + | quote We developed ThunderPing to test our hypothesis that weather affects the performance of residential Internet connections, | ||
| + | |||
| + | ### "Time Series Latency Probing (TSLP)" | ||
| + | paper | ||
| + | title TCP congestion signatures. | ||
| + | purpose Identify periodically congested interdomain links. | ||
| + | quote we use the dataset resulting from our deployment of the TSLP [35] tool on the Archipelago (Ark) [19] infrastructure to identify interdomain links | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Tested TLS vulnerabilities and padding oracles. | ||
| + | quote The analysis tools include testssl.sh, TLS-Attacker and the nmap plugin for Special DROWN | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Probe Turkmenistan’s censorship across protocols | ||
| + | quote We present the design and implementation of TMC, a large-scale measurement system capable of testing millions of domains from outside a censoring nation-state | ||
| + | |||
| + | ### "Tor DNSEL" | ||
| + | paper | ||
| + | title | ||
| + | purpose Obtain relay IPs used for exiting traffic. | ||
| + | quote Tor DNSEL gathers the IP address used by a relay for exiting traffic based on active testing. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Point Break: A Study of Bandwidth Denial-of-Service Attacks against Tor | ||
| + | purpose Scanned relays and measured bandwidth-authority performance. | ||
| + | quote We ran a TorFlow instance, analyzed its output, and computed the time to measure the fastest slice over 20 scans. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title ECN with QUIC: Challenges in the Wild. | ||
| + | purpose Traced paths and detected ECN codepoint changes. | ||
| + | quote we use a traceboxbased [27] approach sending QUIC Initial packets with active ECT codepoints and increasing TTLs to trigger ICMP time exceeded messages from the devices on path. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Inferred the network hop where SAV filtering occurred. | ||
| + | quote These 16,998 tests come from implementing tracefilter [6] on the Spoofer platform and deploying it during the period October 2017 to August 2019. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Collect subnet-level Internet topology | ||
| + | quote In this study, we have devised a set of heuristics to develop a router level Internet topology collector called tracenet. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Snoop public DNS caches and estimate cached-domain counts. | ||
| + | quote We present Trufflehunter, | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title No keys to the kingdom required: a comprehensive investigation of missing authentication vulnerabilities in the wild. | ||
| + | purpose Detected missing-authentication vulnerabilities with application plugins. | ||
| + | quote For this, we created and open sourced a generic network security scanner called Tsunami [33]. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Page devices and exchange Bluetooth LMP messages. | ||
| + | quote Our chosen Bluetooth transceiver is an Ubertooth One [38], a popular and inexpensive embedded Bluetooth prototyping platform that connects to a host through USB. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title An End-to-End Measurement of Certificate Revocation in the Web's PKI. | ||
| + | purpose Measured server support for OCSP Stapling. | ||
| + | quote we use the IPv4 TLS Handshake scans conducted by the University of Michigan | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Wolf in Sheep' | ||
| + | purpose Collect and classify undelegated DNS records | ||
| + | quote we designed a framework to collect URs and identify their malicious behaviors | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Probe active IPv6 victims | ||
| + | quote In our experiments, | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Broad and load-aware anycast mapping with verfploeter. | ||
| + | purpose Probe anycast catchments using ICMP Echo Requests. | ||
| + | quote In Verfploeter, | ||
| + | paper | ||
| + | title | ||
| + | purpose Sequentially probed targets from each anycast vantage point. | ||
| + | quote For probing we use Verfploeter [12], a global probing system running on the Tangled testbed | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title LAMP: Lightweight Approaches for Latency Minimization in Mixnets with Practical Deployment Considerations | ||
| + | purpose Measure and obtain mixnode latency data. | ||
| + | quote We build the mixnode latency dataset for evaluation using the Verloc [13] measurement framework as deployed on the Nym network. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Measure peer-to-peer latency between mixnodes. | ||
| + | quote To ensure statistical reliability, | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Scan Me If You Can: Understanding and Detecting Unwanted Vulnerability Scanning. | ||
| + | purpose Scanned test web applications | ||
| + | quote Table 1 lists the 12 scanners that we analyze in this study along with their corresponding version information. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Scan Me If You Can: Understanding and Detecting Unwanted Vulnerability Scanning. | ||
| + | purpose Scanned test web applications | ||
| + | quote Table 1 lists the 12 scanners that we analyze in this study along with their corresponding version information. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Localize traffic differentiation within the client ISP. | ||
| + | quote We present WeHeY: a system for localizing traffic differentiation within a client' | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Fingerprinted CDN instances from IP addresses and domain names. | ||
| + | quote we use the WhatWeb [8] web scanner to find details about IP addresses. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Can I Take Your Subdomain? Exploring Same-Site Attacks in the Modern Web | ||
| + | purpose Checked whether expired canonical domains were registered. | ||
| + | quote if the whois command on the apex domain does not return any match, RDScan queries GoDaddy to detect if the domain can be purchased. | ||
| + | |||
| + | ### "WiFi Inspector" | ||
| + | paper | ||
| + | title All Things Considered: An Analysis of IoT Devices on Home Networks | ||
| + | purpose Scanned home subnets and tested IoT security | ||
| + | quote WiFi Inspector runs locally on the user's personal computer and performs network scans of the local subnet to check for devices that accept weak credentials or have remotely exploitable vulnerabilities. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Scan Me If You Can: Understanding and Detecting Unwanted Vulnerability Scanning. | ||
| + | purpose Scanned test web applications | ||
| + | quote Table 1 lists the 12 scanners that we analyze in this study along with their corresponding version information. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title Scan Me If You Can: Understanding and Detecting Unwanted Vulnerability Scanning. | ||
| + | purpose Scanned WordPress test applications | ||
| + | quote For each tool, we used the latest version available at the time of our analysis. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Generated HTTP benchmark traffic | ||
| + | quote We used wrk [51] to simulate traffic by generating HTTP requests for each one of the user tasks for 10 minutes each. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Provide HTTP logs from vulnerability scans. | ||
| + | quote We also collected the HTTP logs of the network security scanner Xray during vulnerability scans [10]. | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Large-scale DNS resolution and DNSSEC record scanning | ||
| + | quote | ||
| + | |||
| + | ### " | ||
| + | paper | ||
| + | title | ||
| + | purpose Discover stale NS records and hijackable domains | ||
| + | quote For this purpose, we designed a semi-automated approach, called ZreFinder, to automatically discover Zrefs. | ||
| </ | </ | ||
| <bibtex bibliography></ | <bibtex bibliography></ | ||
| + | |||
| + | ===== Markup sweep, 2026-09-17 ===== | ||
| + | |||
| + | Mechanical rendering repair only: a fresh live raw/XHTML export of 188 pages was checked with '' | ||
provenance/programming/internet_scanning.1789076132.txt.gz · Last modified: by karel.kubicek.claude
