Що означає один рядок у наборі даних про VPN і чому це важливо
Провайдер, кінцева точка, адреса виходу й доступність — це чотири різні рядки. Виберіть одиницю, зберігайте походження, публікуйте те, що набір не охоплює.
Запитайте, що являє собою один рядок набору даних про VPN, і відповіді множаться: компанія, слухач, публічна адреса виходу, результат доступності. Кожна легітимна, а їх змішування без позначок дає суму, яка звучить точно й не означає нічого. Одиниця — це проєктне рішення, і його треба ухвалити до першого підрахунку. Більшість плутанини в опублікованій статистиці VPN походить від пропускання цього кроку.
Рядок — це твердження, а не річ
Кожен рядок стверджує щось про світ, і твердження має суб’єкт. Саме називання суб’єкта робить рядок порівнюваним з іншим рядком.
Рядок провайдера стверджує, що організація пропонує послугу. Рядок кінцевої точки стверджує, що певна адреса й порт говорять протоколом. Рядок виходу стверджує, що трафік у якийсь момент залишив адресу. Рядок вимірювання стверджує, що зонд звідкись спостерігав результат. Чотири суб’єкти, чотири схеми, і набір даних, який змішує їх без розрізнювача, взагалі неможливо агрегувати.
Розрізнювач — найдешевша частина схеми й та, яку найчастіше опускають.
Виберіть одиницю до підрахунку
Виберіть одиницю, яка відповідає на питання, яке у вас справді є. Підрахунок кінцевих точок відповідає, скільки слухачів було оголошено; підрахунок провайдерів — скільки організацій брало участь; підрахунок адрес виходу — скільки уявних джерел існує.
Ці числа не взаємозамінні, і різниці великі. Один провайдер може тримати тисячі адрес, а одна адреса може приймати кілька протокольних слухачів для різних послуг. Тому число адрес не є ні верхньою, ні нижньою межею для числа провайдерів. Щоразу називайте одиницю в тому самому реченні, що й число. Число без одиниці — це думка з десятковою комою.
| 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 |
Публічний каталог дає оголошених учасників у цій послузі. Він не є інвентарем кожного комерційного, організаційного та приватного розгортання у світі, і ставлення до нього як до такого роздуває кожну похідну статистику.
Походження належить схемі
Рядок без походження не можна переперевірити. Записуйте вихідний запис, час збору з його часовим поясом, метод спостереження та статус останнього виявлення.
Тримайте оголошені атрибути окремо від спостережуваних, бо вони мають різну вагу. Позначка країни в каталозі — це оголошене твердження, а не доказ фізичного розташування сервера. Розподіл IP визначає блок мережі, а не кожного орендаря всередині нього і не поточного оператора застосунку зверху. Два стовпці й примітка щоразу кращі за одне об’єднане поле.
{"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"}
Один рядок JSON робить схему конкретною, і сперечатися про нього легше, ніж про абзац опису. Зверніть увагу, що позначка часу несе часовий пояс, а метод названий, а не мається на увазі.
Видаляйте дублікати за питанням
Дублікати залежать від одиниці. Та сама адреса з двома протокольними слухачами — це одна пара кінцевих точок і дві послуги, і її тихе злиття змінює підрахунок.
Видаляйте дублікати на тому рівні, про який питає питання, і записуйте, скільки сирих рядків злилося в кожен збережений рядок. Це відношення саме по собі є знахідкою, бо велике злиття зазвичай означає, що джерело публікує записи за кожним слухачем. Провайдер із багатьма адресами дає протилежну картину. Обидва варіанти правильні, і лише записане відношення дає читачеві змогу їх розрізнити.
Далі зберігайте сирі рядки. Таблиця без дублікатів — це подання, а можливість зібрати її заново із сирого вводу робить результат відтворюваним.
Опублікуйте заяву про охоплення
Укажіть, як відбиралися джерела, які регіони або мережі вони охоплюють і що навмисно відсутнє.
Приватні корпоративні кінцеві точки й неоголошені розгортання ніколи не з’являються в публічних списках, тому відсутність у каталозі доводить лише те, що каталог їх не зазначив. Перевірте умови джерела та дозволи на перерозповсюдження перед публікацією і приберіть поля, які ніколи не були потрібні. Дослідження кінцевих точок рідко потребує особистих даних абонентів, облікових даних чи історії перегляду. Їхня публікація була б іншим проєктом з іншим обґрунтуванням.
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
Ці три команди дають кількість рядків, розподіл за одиницями й нарис охоплення за оголошеною країною. Зберігайте датовані знімки, коли популяція змінюється, і відрізняйте застаріле від підтвердженої відсутності. Обмежений набір із ясною популяцією кращий за непідтверджене твердження, що він містить кожен VPN в інтернеті.