Qué significa una fila en un conjunto de datos de VPN y por qué importa
Proveedor, extremo, dirección de salida y accesibilidad son cuatro filas distintas. Elija la unidad, conserve la procedencia, publique lo que el conjunto no cubre.
Pregunte qué representa una fila de un conjunto de datos de VPN y las respuestas se multiplican: una empresa, un receptor, una dirección de salida pública, un resultado de accesibilidad. Todas son legítimas, y mezclarlas sin etiquetas produce un total que suena preciso y no significa nada. La unidad es una decisión de diseño, y debe tomarse antes del primer recuento. La mayor parte de la confusión en las estadísticas publicadas de VPN proviene de saltarse ese paso.
Una fila es una afirmación, no una cosa
Cada fila afirma algo sobre el mundo, y la afirmación tiene un sujeto. Nombrar el sujeto es lo que hace que la fila sea comparable con otra fila.
Una fila de proveedor afirma que una organización ofrece un servicio. Una fila de extremo afirma que una dirección y un puerto concretos hablan un protocolo. Una fila de salida afirma que el tráfico salió de una dirección en un momento dado. Una fila de medición afirma que una sonda desde algún lugar observó un resultado. Cuatro sujetos, cuatro esquemas, y un conjunto de datos que los mezcla sin un discriminador no puede agregarse en absoluto.
El discriminador es la parte más barata del esquema y la que más a menudo se omite.
Elija la unidad antes del recuento
Elija la unidad que responde a la pregunta que realmente tiene. Contar extremos responde cuántos receptores se anunciaron; contar proveedores responde cuántas organizaciones participaron; contar direcciones de salida responde cuántos orígenes aparentes existen.
Esos números no son intercambiables, y las diferencias son grandes. Un proveedor puede operar miles de direcciones, y una dirección puede alojar varios receptores de protocolo para servicios distintos. Por tanto, un recuento de direcciones no es ni un límite superior ni inferior de un recuento de proveedores. Indique la unidad en la misma frase que el número, cada vez. Un número sin unidad es una opinión con un punto 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 |
Un directorio público proporciona los participantes anunciados en ese servicio. No es un inventario de cada despliegue comercial, organizativo y privado del mundo, y tratarlo como tal infla todas las estadísticas derivadas.
La procedencia pertenece al esquema
Una fila sin procedencia no puede volver a comprobarse. Registre el registro de origen, el momento de recogida con su zona horaria, el método de observación y un estado de última visualización.
Mantenga los atributos anunciados separados de los observados, porque tienen un peso distinto. La etiqueta de país de un directorio es una afirmación anunciada, y no es prueba de la ubicación física de un servidor. Una asignación de IP identifica un bloque de red, no a cada inquilino dentro de él, ni al operador actual de una aplicación encima. Dos columnas y una nota superan un campo fusionado cada vez.
{"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"}
Una sola línea de JSON hace concreto el esquema y es más fácil de discutir que un párrafo de descripción. Observe que la marca de tiempo lleva zona horaria y que el método se nombra en lugar de implicarse.
Deduplique según la pregunta
Los duplicados dependen de la unidad. La misma dirección con dos receptores de protocolo es un par de extremos y dos servicios, y colapsarla en silencio cambia el recuento.
Deduplique en el nivel por el que pregunta la pregunta, y registre cuántas filas crudas colapsaron en cada fila conservada. Esa proporción es en sí misma un hallazgo, porque un colapso grande suele significar que la fuente publica registros por receptor. Un proveedor que opera muchas direcciones produce el patrón opuesto. Ambos son correctos, y solo la proporción registrada permite al lector distinguirlos.
Luego conserve las filas crudas. Una tabla sin duplicados es una vista, y la capacidad de reconstruirla desde la entrada cruda es lo que hace reproducible el resultado.
Publique la declaración de cobertura
Indique cómo se seleccionaron las fuentes, qué regiones o redes cubren y qué falta deliberadamente.
Los extremos corporativos privados y los despliegues no anunciados nunca aparecen en listas públicas, así que la ausencia en un directorio solo prueba que el directorio no lo listó. Revise los términos de la fuente y los permisos de redistribución antes de publicar, y elimine los campos que nunca fueron necesarios. Un estudio de extremos rara vez requiere identidades de suscriptores, credenciales o historiales de navegación. Publicarlos sería otro proyecto con otra justificación.
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
Esos tres comandos dan un recuento de filas, un desglose por unidad y un esbozo de cobertura por país anunciado. Conserve instantáneas fechadas cuando cambia la población, y distinga lo obsoleto de la ausencia confirmada. Un conjunto de datos acotado con una población clara supera una afirmación no respaldada de contener cada VPN de internet.