O que uma linha significa num conjunto de dados de VPN, e porque é importante
Fornecedor, endpoint, endereço de saída e acessibilidade são quatro linhas diferentes. Escolha a unidade, preserve a proveniência, publique o que o conjunto de dados não cobre.
Pergunte o que uma linha de um conjunto de dados de VPN representa, e as respostas multiplicam-se: uma empresa, um ouvinte, um endereço de saída público, um resultado de acessibilidade. Todas são legítimas, e misturá-las sem rótulos produz um total que soa preciso e não significa nada. A unidade é uma decisão de projeto, e tem de ser tomada antes da primeira contagem. A maior parte da confusão nas estatísticas de VPN publicadas vem de saltar esse passo.
Uma linha é uma afirmação, não uma coisa
Cada linha afirma algo sobre o mundo, e a afirmação tem um sujeito. É nomear o sujeito que torna a linha comparável a outra linha.
Uma linha de fornecedor afirma que uma organização oferece um serviço. Uma linha de endpoint afirma que um determinado endereço e porta falam um protocolo. Uma linha de saída afirma que o tráfego saiu de um endereço num dado momento. Uma linha de medição afirma que uma sonda de algum lugar observou um resultado. Quatro sujeitos, quatro esquemas, e um conjunto de dados que os mistura sem um discriminador não pode ser agregado de forma alguma.
O discriminador é a parte mais barata do esquema e a que mais frequentemente se omite.
Escolha a unidade antes da contagem
Escolha a unidade que responde à pergunta que realmente tem. Contar endpoints responde a quantos ouvintes foram anunciados; contar fornecedores responde a quantas organizações estiveram envolvidas; contar endereços de saída responde a quantas origens aparentes existem.
Esses números não são intermutáveis, e as diferenças são grandes. Um fornecedor pode operar milhares de endereços, e um endereço pode alojar vários ouvintes de protocolo para serviços diferentes. Uma contagem de endereços não é, portanto, nem limite superior nem inferior de uma contagem de fornecedores. Indique a unidade na mesma frase que o número, todas as vezes. Um número sem unidade é uma opinião com uma vírgula decimal.
| Unit | The row asserts | What a count of it means |
|---|---|---|
| Provider | An organisation offers a service | How many operators appear |
| Endpoint | An address and port speak a protocol | How many listeners were advertised |
| Exit address | Traffic left from an address | How many apparent origins exist |
| Observation | A probe saw a result | How many tests ran, not how many servers |
Um diretório público fornece os participantes anunciados nesse serviço. Não é um inventário de todas as implementações comerciais, organizacionais e privadas do mundo, e tratá-lo como tal inflaciona todas as estatísticas derivadas.
A proveniência pertence ao esquema
Uma linha sem proveniência não pode ser reverificada. Registe o registo de origem, o momento de recolha com o seu fuso horário, o método de observação e um estado de última visualização.
Mantenha os atributos anunciados separados dos observados, porque têm peso diferente. A etiqueta de país de um diretório é uma afirmação anunciada, e não é prova da localização física de um servidor. Uma atribuição de IP identifica um bloco de rede, não cada inquilino dentro dele, nem o operador atual de uma aplicação por cima. Duas colunas e uma nota vencem um campo fundido todas as vezes.
{"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"}
Uma única linha JSON torna o esquema concreto e é mais fácil de discutir do que um parágrafo de descrição. Repare que o carimbo temporal transporta um fuso horário e que o método é nomeado em vez de implícito.
Deduplique conforme a pergunta
Os duplicados dependem da unidade. O mesmo endereço com dois ouvintes de protocolo é um par de endpoints e dois serviços, e colapsá-lo em silêncio altera a contagem.
Deduplique ao nível sobre o qual a pergunta incide, e registe quantas linhas em bruto colapsaram em cada linha mantida. Essa proporção é em si um achado, porque um colapso grande costuma significar que a fonte publica registos por ouvinte. Um fornecedor que opera muitos endereços produz o padrão oposto. Ambos estão corretos, e só a proporção registada permite ao leitor distingui-los.
Depois guarde as linhas em bruto. Uma tabela sem duplicados é uma vista, e a capacidade de a reconstruir a partir da entrada em bruto é o que torna o resultado reproduzível.
Publique a declaração de cobertura
Indique como as fontes foram selecionadas, que regiões ou redes cobrem e o que está deliberadamente ausente.
Endpoints empresariais privados e implementações não anunciadas nunca aparecem em listas públicas, por isso a ausência num diretório prova apenas que o diretório não o listou. Verifique os termos da fonte e as permissões de redistribuição antes de publicar, e remova campos que nunca foram necessários. Um estudo de endpoints raramente exige identidades de assinantes, credenciais ou históricos de navegação. Publicá-los seria outro projeto com outra justificação.
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
Esses três comandos dão uma contagem de linhas, uma repartição por unidade e um esboço de cobertura por país anunciado. Guarde instantâneos datados quando a população muda, e distinga o obsoleto da ausência confirmada. Um conjunto de dados delimitado com uma população clara supera uma afirmação não sustentada de conter todas as VPN da internet.