Demandez ce que représente une ligne d’un jeu de données VPN, et les réponses se multiplient : une entreprise, un auditeur, une adresse de sortie publique, un résultat de joignabilité. Chacune est légitime, et les mélanger sans étiquettes produit un total qui sonne précis et ne veut rien dire. L’unité est une décision de conception, et elle doit être prise avant le premier décompte. L’essentiel de la confusion dans les statistiques VPN publiées vient de l’omission de cette étape.

Une ligne est une affirmation, pas une chose

Chaque ligne affirme quelque chose sur le monde, et l’affirmation a un sujet. C’est nommer le sujet qui rend la ligne comparable à une autre ligne.

Une ligne de fournisseur affirme qu’une organisation propose un service. Une ligne de point de sortie affirme qu’une adresse et un port précis parlent un protocole. Une ligne de sortie affirme que le trafic a quitté une adresse à un moment donné. Une ligne de mesure affirme qu’une sonde depuis un endroit a observé un résultat. Quatre sujets, quatre schémas, et un jeu de données qui les mélange sans discriminant ne peut pas être agrégé du tout.

Le discriminant est la partie la moins chère du schéma et la plus souvent omise.

Choisissez l’unité avant le décompte

Choisissez l’unité qui répond à la question que vous avez réellement. Compter les points de sortie répond combien d’auditeurs ont été annoncés ; compter les fournisseurs répond combien d’organisations ont participé ; compter les adresses de sortie répond combien d’origines apparentes existent.

Ces nombres ne sont pas interchangeables, et les écarts sont grands. Un fournisseur peut exploiter des milliers d’adresses, et une adresse peut héberger plusieurs auditeurs de protocole pour des services différents. Un décompte d’adresses n’est donc ni une borne supérieure ni une borne inférieure pour un décompte de fournisseurs. Indiquez l’unité dans la même phrase que le nombre, chaque fois. Un nombre sans unité est une opinion avec un point décimal.

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

Un annuaire public fournit les participants annoncés dans ce service. Ce n’est pas un inventaire de chaque déploiement commercial, organisationnel et privé du monde, et le traiter comme tel gonfle chaque statistique dérivée.

La provenance appartient au schéma

Une ligne sans provenance ne peut pas être revérifiée. Enregistrez l’enregistrement source, l’heure de collecte avec son fuseau horaire, la méthode d’observation et un statut de dernière vue.

Gardez les attributs annoncés séparés des attributs observés, car ils portent un poids différent. L’étiquette de pays d’un annuaire est une affirmation annoncée, et elle ne prouve pas l’emplacement physique d’un serveur. Une attribution d’IP identifie un bloc réseau, pas chaque locataire à l’intérieur, ni l’opérateur actuel d’une application par-dessus. Deux colonnes et une note battent un champ fusionné chaque fois.

{"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"}

Une seule ligne JSON rend le schéma concret et se discute plus facilement qu’un paragraphe de description. Notez que l’horodatage porte un fuseau horaire et que la méthode est nommée plutôt qu’implicite.

Dédoublonnez selon la question

Les doublons dépendent de l’unité. La même adresse avec deux auditeurs de protocole est une paire de points de sortie et deux services, et la fusionner en silence change le décompte.

Dédoublonnez au niveau dont parle la question, et enregistrez combien de lignes brutes se sont repliées dans chaque ligne conservée. Ce ratio est en soi un résultat, car un repli important signifie généralement que la source publie des enregistrements par auditeur. Un fournisseur exploitant de nombreuses adresses produit le motif inverse. Les deux sont corrects, et seul le ratio enregistré permet au lecteur de les distinguer.

Conservez ensuite les lignes brutes. Une table dédoublonnée est une vue, et la capacité de la reconstruire depuis l’entrée brute est ce qui rend le résultat reproductible.

Publiez la déclaration de couverture

Indiquez comment les sources ont été sélectionnées, quelles régions ou réseaux elles couvrent, et ce qui est délibérément absent.

Les points de sortie d’entreprise privés et les déploiements non annoncés n’apparaissent jamais dans les listes publiques, donc l’absence dans un annuaire prouve seulement que l’annuaire ne l’a pas listé. Vérifiez les conditions de la source et les autorisations de redistribution avant de publier, et supprimez les champs qui n’ont jamais été nécessaires. Une étude de points de sortie exige rarement les identités des abonnés, des identifiants ou des historiques de navigation. Les publier serait un autre projet avec une autre justification.

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

Ces trois commandes donnent un nombre de lignes, une répartition par unité et une esquisse de couverture par pays annoncé. Conservez des instantanés datés lorsque la population change, et distinguez l’obsolète de l’absence confirmée. Un jeu de données borné avec une population claire vaut mieux qu’une affirmation non étayée de contenir chaque VPN d’Internet.

Articles similaires