Я уверен, вы неоднократно видели заголовки“40% сайтов использует вордпресс”, “10% сайтов сидят на CloudFlare”, “Самая распространенная версия PHP X.X”. Обычно не указывается ни тип выборки сайтов для анализа, ни ее объем. Реально ли почти половина интернета работает на Wordpress?

Три года назад я опубликовал статью про то, как мы проанализировали “морды” более чем 250 млн доступных доменов.

В начале 2021 года мы сделали новый сбор данных, добавили определение технологий, трек пикселей, улучшили анализ контента и ссылочного.

Данная статья - это обзор текущего состояния основных показателей: сколько сайтов работает, какой процент использует HTTPs, какая сейчас доминирует версия PHP.

Под капотом

В целом парсинг данных не самая сложная задача и многие программисты ее воспринимают без особого энтузиазма.
В чем сложность? Берем любимый язык программирования, для парсеров, скрейперов - это часто python. Библиотеку для работы с сетью, разбором html (или может быть вы вообще предпочтете регулярки), базу данных, куда все дело сохранять (хотя можно и в csv), не самый слабый сервер и поехали. Я думаю, что мидлу понадобится до недели (при первоначальной оценке в день), чтобы сделать рабочий прототип, который легко сможет скраулить 1-10 млн страниц.

Сложности возникают с ростом объемов. Поставщики отдают порядка 250-260 млн доменов, поддоменов обычно в них нет.
Чтобы сделать анализ, нам нужно, в первую очередь, отрезолвить домен в IP адрес, но т.к. еще имеется поддомен www суммарное количество кандидатов на резолвинг возрастает вдвое до 500 млн доменов.
Здесь и образуется самое узкое место системы. Использовать системный резолвер не получится из-за крайне низкого RPS (если быть точнее, он даст хороший RPS, но только часть доменов будет реально отрезовлена). С этим тоже можно жить, но тогда ваш парсинг растянется на долгие месяцы, хочется всегда быстрее.
Собрав 10-20 публичных DNS серверов все равно их будет не достаточно. Мне также предлагали брать DNS, которые подвязаны к домену и проверять их на возможность рекурсивных запросов, но увы таких весьма не много.

Выход остается по сути один - нам нужно много DNS серверов из всех доступных публичных и не очень списков и много своих серверов откуда делать резолвинг. Но и здесь появляется еще одна проблема. Сейчас DNS сервер работает, а через час он отвалился. Другой сервер стабилен, но отдает вам фейковый IP адреса, которые не привязаны реально к домену. А третий DNS имеет детский фильтр и вы не сможете с ним отрезолвить определенную категорию сайтов.

Следующие проблемы начнутся, когда вы будете подключаться к IP, чтобы запросить главную страницу. Имея домен и IP нам нужно обычно проверить 4 подключения:
http://domain.com
http://www.domain.com
https://domain.com
https://www.domain.com

Если это сделать в лоб с одного IP гарантировано получите тысячу и одну абузу за сканинг портов и прочие смертельные грехи с точки зрения немецких хостингов. Поэтому нужно следить за тем, чтобы стараться не ходить на один и тот же целевой IP адрес с одного своего IP.

После этого вы узнаете, что существуют хосты, которые использовались вирусописателями в своих целях, таких как отправка данных, получение команд и т.п. Их изымают и если вы туда стучитесь своим краулером, то автоматически получаете абузу.

Плюс добавляем еще анализ контента, стека технологий, robots.txt, sitemap.xml и вся система становится уже мягко говоря не простой.

Наша реализация представляет собой Go сервисы которые работает по принципу пайпинга - результат работы одного сервиса направляется в очередь, которую обрабатывают другие сервисы. Можно гибко конфигурировать очередность обработки и данные, которые надо собирать.

Существует тысяча и одна готовая система очередей, которые проверены временем. Это отличные инструменты, которые из коробки умеют шардирование, гарантированную доставку, очередность сообщений. Но что если нам наоборот не нужна очередность, а скорее даже небольшой random? Тут увы готовых решений весьма не много. Redis имеет тип sets, но чтобы вместить все на таких объемах нужно брать сервер с терабайтом+ оперативки - не самое бюджетное занятие, поэтому мы написали свой велосипед.

Главная особенность - это хранение на SSD, небольшое потребление оперативки и процессора. Минимальная единица данных - это вектор (массив) с элементами payload для сервиса.

В целом, благодаря использованию Go можно быть очень оптимальными по памяти и влезать в 1-2 ГБ VPS, которые стоят 5-10 EUR/mo и их можно взять несколько сотен одновременно. Не без своих сложностей, комплайенс некоторых хостеров похуже банковского, но все реально.

Данные

Всего в базе 252 млн доменов, из которых отвечают на 80 и 443 порту - 200 млн, статус код 200 имеет - 148 млн доменов. Т.е. это количество реально работающих доменов.

С за время с прошлого анализа, практически не изменилось количество IP адресов - в 2018 году было 13.2 млн, в 2021 г - 14.3 млн уникальных IP адресов, которые указаны в A записи.

Сразу же стоит дополнить, на хостах site.com и www.site.com как и https://site.com могут быть совершенно разные сайты. Поэтому дальше мы перейдем к оперированию понятиями домен и хост.

сумма больше общего количества доменов, т.к. каждый хост может отдавать 4 разных статус кода (комбинации www/non www, http/https)

HTTPS

Что меня удивило - не особо большой рост сайтов (хостов), которые работают на HTTPS. Я ожидал, что за три года все уже должны были перейти на https, но рост их количества 106/86 - 1 = 23%.

www или без www?

За больше, чем 10 лет работы я зарегистрировал, наверное, около сотни доменов и ни один из них не использовал www как главное зеркало. Но по всей видимости наличие www настолько привычно всем, и я бы сказал, что оно победило. Судите сам: Редиректы с non-www на www имеют 50 млн хостов, а с www на non-www - только 37 млн.

Заголовок Server

Заголовок server присутствует на 143 млн доменов и 286 млн хостах, весьма достойная выборка для аналитики.

Если отбросить версии (находятся после слеша /), то получаем такой список отсортированный по хостам:

Самое удивительное из него - это openresty, в прошлом анализе было чуть меньше 4 млн хостов, сейчас же 67 млн. Откуда такой рост - для меня загадка, то ли они раньше отдавали nginx, то ли китайских сайтов больше в анализе стало.

X-Powered-By

Заголовок имеется у 43 млн доменов и 52 млн хостов.

Лидер неоспоримый - PHP, давайте посмотрим на его версии:

Версия 5.6 все также лидер, но но суммарно семерка уже впереди.
Версия 5.6 все также лидер, но но суммарно семерка уже впереди.

Технологии

Для определения технологий мы использовали wappalyzer. Это популярное расширение для хрома, которое имеют в открытом доступе библиотеку технологий. Алгоритм определения предельно простой - в html коде, url js, css урлах проверяются наличие подстрок характерных для технологий.

Таким образом получается, на WordPress работает 23 млн доменов из 148 млн доменов отвечающих 200 код = 15% доменов в Интернете. Или 55 млн хостов из 295 млн хостов отвечающих код 200 = 18% хостов в интернете.

Удивляет цифра с cloudflare
Удивляет цифра с cloudflare

В тоже время по хостам мы видим около 10 млн с CloudFlare. Возможно в своей статистике они считают еще поддомены, которых у нас нет в базе.

Заключение

Сбор и обработка данных в интернете - это весьма увлекательное занятие, которое заставляет искать нестандартные подходы, как например для очередей. Так и вставлять мыслимые и не очень проверки на каждом участке обработки (как файлы robots.txt по гигабайту).

Честно говоря, я думал что за три года должно было поменяться куда больше цифр. По факту общий объем доменов +- стабилен, количество работающих сайтов также. По видимому, население Земли растет быстрее, чем количество сайтов в Интернете.

Буду рад услышать ваши комментарии и замечания.

Комментарии (20)


  1. v1a0
    24.06.2021 08:09

    Хмм, занимательно!

    Как насчет того, чтобы выгрузить весь дата-сет в паблик?
    Было бы интересно самому покопаться.


    1. sergebezborodov Автор
      24.06.2021 08:11

      для нас это side-проект, есть идеи сделать типа сервиса, в котом можно посмотреть разную аналитику Интернета, но как всегда вопрос приоритетов и времени.


    1. zhengxi
      24.06.2021 16:38
      +1

      А такого много, например https://github.com/tb0hdan/domains


  1. Glavatskiy
    24.06.2021 08:19

    Очень интересно.

    А смотрели, насколько полученные результаты коррелируют с данными на statdom.ru?


    1. sergebezborodov Автор
      24.06.2021 08:36

      не знал такого, сравню рунет обязательно


  1. RubiksCube
    24.06.2021 08:34
    +1

    Огромное спасибо за статью! В своей прошлой статье, в коментах, Вы писали, что покупаете доменные адреса за деньги у так называемых «агрегаторов». И я предполагаю, что вы хорошо изучили альтернативные способы получения доменов прежде, чем отдать деньги. Тем не менее, спрошу: а нет ли способа получить все адреса через обращение к DNS серверам?


    1. sergebezborodov Автор
      24.06.2021 08:35

      та по факту дешевле купить, мы тратили что-то вроде 200 долл в год и каждый день свежая база


      1. salaev
        24.06.2021 09:48

        А где покупали и что конкретно (какую именно базу)?


        1. sergebezborodov Автор
          24.06.2021 09:52

          zonefiles.io
          на самом деле в гугле «buy domains list» и там можно найти


        1. zhengxi
          24.06.2021 16:40

          https://www.verisign.com/en_US/channel-resources/domain-registry-products/zone-file/index.xhtml

          бесплатно
          без смс

          каждый день свежая база


          1. sergebezborodov Автор
            24.06.2021 17:34

            170 млн доменов против 258 млн


            1. zhengxi
              24.06.2021 17:54

              Так нельзя сравнивать.

              у verisign только .com и .net;
              для некоторых зон (.biz, .ru, ...) тоже можно получать актуальные ежедневные списки в соответствующих организациях (кстати, везде бесплатно).

              Есть зоны, где нельзя - собственно это ваша разница между 258 и 170.

              Но они и у "платных провайдеров" не полные (например, .nl и .ch, если мне не изменяет память больше 5млн каждая, а не ~1.5), и видимо напаршены из commoncrawl или аналогичного датасета.

              То есть 258м, это 170м полных списков зон из оф.источников (и если домена в списке нет, то его нет) + напаршеный мусор.

              А то что такое продают за $200... ну, завидовать будем


  1. nevelaev
    24.06.2021 08:37

    Интересная тема. Можно еще порыться и исключить из списка всякие мусорные сайты-заглушки (занимающие доменные имена, которыми когда-то владели какие-либо конторы, плюс похожие доменные имена, но не вредоносные). А насчет темпов роста цифр - посмотреть бы статистику годами ранее, поскольку цифра небольшого роста может быть связана с экономическими причинами. Мировая экономика сейчас стагнирует помаленьку.


    1. sergebezborodov Автор
      24.06.2021 09:15

      идея отделить нормальные сайты от мусорных весьма хорошая, но практическая реализация не тривиальна (когда ты не гугл).
      Напрашивается на первый взгляд пытаться понять общее количество страниц, для гипотезы, что нормальные сайты должны иметь больше X страниц. Но с другой стороны полно сайтов-визиток на несколько страниц и они вполне себе качественные.
      Можно попробовать считать simhash/minhash контента и выделять кластера похожих сайтов.
      Ну и думаю по вхождению слов «domain on sale» тоже можно отбросить какой то %.


  1. suffix_ixbt
    24.06.2021 09:33

    Ещё бы проверить на кол-во доменов в процентах под DNSSEC !


  1. saboteur_kiev
    24.06.2021 16:54

    Если снаружи стоит nginx балансер или даже железное решение а уже за ним крутится вебсервер на питоне/джетти/etc — это как определяется?


    1. sergebezborodov Автор
      24.06.2021 17:34

      что будет показываться в заголовках сервера для клиента, то и посчитается


  1. Qwentor
    02.07.2021 13:34

    А что это за 7 сайтов на PHP 1-й версии?