Spørg hvad én række i et VPN-datasæt repræsenterer, og svarene formerer sig: en virksomhed, en lytter, en offentlig udgangsadresse, et tilgængelighedsresultat. Hver er legitim, og at blande dem uden etiketter giver en sum, der lyder præcis og betyder intet. Enheden er en designbeslutning, og den skal træffes før den første optælling. Det meste af forvirringen i offentliggjort VPN-statistik kommer af at springe dette trin over.

En række er en påstand, ikke en ting

Hver række hævder noget om verden, og påstanden har et subjekt. Det er navngivningen af subjektet, der gør rækken sammenlignelig med en anden række.

En udbyderrække hævder, at en organisation tilbyder en tjeneste. En endepunktrække hævder, at en bestemt adresse og port taler en protokol. En udgangsrække hævder, at trafik forlod en adresse på et tidspunkt. En målerække hævder, at en sonde fra et sted observerede et resultat. Fire subjekter, fire skemaer, og et datasæt, der blander dem uden en diskriminator, kan slet ikke aggregeres.

Diskriminatoren er den billigste del af skemaet og den, der oftest udelades.

Vælg enheden før optællingen

Vælg den enhed, der besvarer det spørgsmål, du faktisk har. At tælle endepunkter besvarer, hvor mange lyttere der blev annonceret; at tælle udbydere besvarer, hvor mange organisationer der var involveret; at tælle udgangsadresser besvarer, hvor mange tilsyneladende oprindelser der findes.

Disse tal er ikke udskiftelige, og forskellene er store. Én udbyder kan drive tusinder af adresser, og én adresse kan huse flere protokol lyttere til forskellige tjenester. Et antal adresser er derfor hverken en øvre eller nedre grænse for et antal udbydere. Angiv enheden i samme sætning som tallet, hver gang. Et tal uden enhed er en mening med et decimalpunktum.

UnitThe row assertsWhat a count of it means
ProviderAn organisation offers a serviceHow many operators appear
EndpointAn address and port speak a protocolHow many listeners were advertised
Exit addressTraffic left from an addressHow many apparent origins exist
ObservationA probe saw a resultHow many tests ran, not how many servers

En offentlig mappe leverer annoncerede deltagere i den tjeneste. Den er ikke en fortegnelse over enhver kommerciel, organisatorisk og privat udrulning i verden, og at behandle den som det oppuster enhver afledt statistik.

Proveniens hører til i skemaet

En række uden proveniens kan ikke efterprøves. Registrer kildeposten, indsamlingstiden med dens tidszone, observationsmetoden og en sidst-set-status.

Hold annoncerede attributter adskilt fra observerede, fordi de vejer forskelligt. En mappes landemærke er en annonceret påstand og ikke bevis på en servers fysiske placering. En IP-tildeling identificerer en netværksblok, ikke hver lejer indeni og ikke den nuværende operatør af en applikation ovenpå. To kolonner og en note slår altid ét sammenflettet felt.

{"endpoint": "203.0.113.10:1194/udp", "unit": "endpoint", "advertised_country": "NL",
 "observed_at": "2026-11-03T02:15:00Z", "method": "udp_probe", "last_seen": "2026-11-03"}

En enkelt JSON-linje gør skemaet konkret og er lettere at diskutere end et afsnit beskrivelse. Bemærk, at tidsstemplet bærer en tidszone, og at metoden er navngivet snarere end underforstået.

Fjern dubletter efter spørgsmålet

Dubletter afhænger af enheden. Den samme adresse med to protokol lyttere er ét endepunktpar og to tjenester, og at slå den sammen i det stille ændrer antallet.

Fjern dubletter på det niveau, spørgsmålet handler om, og registrer hvor mange rå rækker der faldt sammen i hver bibeholdt række. Det forhold er i sig selv et fund, fordi en stor sammensmeltning normalt betyder, at kilden offentliggør poster pr. lytter. En udbyder med mange adresser giver det modsatte mønster. Begge er korrekte, og kun det registrerede forhold lader læseren skelne dem.

Behold så de rå rækker. En tabel uden dubletter er en visning, og evnen til at genopbygge den fra råinputtet er det, der gør resultatet reproducerbart.

Offentliggør dækningserklæringen

Angiv, hvordan kilder blev valgt, hvilke regioner eller netværk de dækker, og hvad der bevidst mangler.

Private virksomhedsendepunkter og ikke-annoncerede udrulninger optræder aldrig på offentlige lister, så fravær i en mappe beviser kun, at mappen ikke listede det. Kontrollér kildens vilkår og videristributionstilladelser før offentliggørelse, og fjern felter, der aldrig var nødvendige. En endepunktundersøgelse kræver sjældent abonnentidentiteter, legitimationsoplysninger eller browserhistorik. At offentliggøre dem ville være et andet projekt med en anden begrundelse.

wc -l vpn-endpoints.jsonl
jq -r '.unit' vpn-endpoints.jsonl | sort | uniq -c
jq -r '.advertised_country' vpn-endpoints.jsonl | sort | uniq -c | sort -rn | head

Disse tre kommandoer giver et rækkeantal, en enhedsopdeling og en skitse af dækningen efter annonceret land. Behold daterede snapshots, når populationen ændrer sig, og skel mellem forældet og bekræftet fravær. Et afgrænset datasæt med en klar population slår en ubegrundet påstand om at indeholde enhver VPN på internettet.

Relaterede artikler