Сколько сайтов вы используете ежедневно? Пару социальных сетей, поисковик, несколько любимых издательств, около 5 рабочих сервисов. Пожалуй, вряд ли наберется более 20 сайтов.



А задумывались ли вы сколько сайтов в интернете и что с ними происходит?

Периодически попадаются статьи с исследованиями, построенными на выборке разных топ 1М сайтов. Но мне всегда было интересно, можно ли пробежаться по всем доменам интернета, не строя аналитику на очень малой выборке.

Впервые я задался этим вопросом больше года назад. Мы начали разработку краулера для вебсайтов и нужно было его тестировать на больших объемах. Взяв ядро краулера, я впервые пробежался по доменам рунета — это 5.5 млн доменов, а после и по всем 213 млн. доменов (осень 2017 года).

За прошедшее время было вложено немало сил и средств в разработку, алгоритмы стали получше, я решил вернуться к анализу интернета и собрать еще больше данных.

Цель этого сбора информации — получить достоверную выборку в первую очередь по рабочим хостам, редиректам, заголовкам server и x-powered-by.

Методика сбора


Само приложение написано на Go, используются собственные реализации для работы с dns и http клиент. В качестве очереди redis, бд — mysql.

Исходно есть только голый домен, вида example.com. Анализ состоит из нескольких этапов:

  1. проверить доступность http://example.com, http://www.example.com, https://example.com, https://www.example.com
  2. если хоть к какому то варианту удалось подключиться, то:
    — анализируем /robots.txt
    — проверяем наличие /sitemap.xml

Каждый день появляется и удаляется около 100 тыс доменов. Очевидно, что сделать одномоментный слепок состояния сети практически невозможно, но нужно делать это максимально быстро.

Мы развернули дополнительный кластер серверов краулера, что позволило достичь средней скорости 2 тыс доменов в секунду. Таким образом проверка 252 млн доменов заняла примерно полтора дня.

Лирическое отступление
Параллельно с краулингом развивается навык “1001 способ ответить на абузы“. Это просто бич любого более-менее крупного анализа. Стоило немало сил доработать алгоритм, чтобы он не попадал за короткий промежуток на одни и те же ip или не стучался несколько раз на https.

Данные


Самая главная цифра при анализе сети — это количество “живых” доменов. Мы называем домен “живым” на который резолвится IP и хоть одна из версий www/без_www http/https отдает любой код ответа.



Конечно же нельзя забывать про код 418 — чайники: 2227 штук.

Всего было найдено 13.2 млн ip адресов. Стоит отметить, что по некоторым доменам отдается сразу несколько ip адресов, по другим только один, но каждый раз разный.
Таким образом, средняя температура по больнице, в среднем на одном IP находится 16 сайтов.

Картина по статус кодам выглядит следующим образом:



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

Https


Переход на https является трендом последних лет. Поисковики активно продвигают внедрение защищенного протокола, а Google Chrome скоро начнет помечать http сайты как незащищенные.



Таким образом доля работающих сайтов по https достигла 73% от количества сайтов работающих по http.

Самой большой проблемой перехода является практически неминуемая просадка трафика, т.к. для поисковиков http/https даже на одном домене технически являются разными сайтами. Новые проекты обычно сразу запускаются на https.

www или без www?


Поддомен www возник примерно вместе с самим Интернетом, но даже и сейчас некоторые люди не воспринимают адреса без www.

При этом 200 код ответа на версию без www отдает 118.6 млн. доменов, а с www — 119.1 млн доменов.

У 4.3 млн доменов не подвязаны ip на версию без www, т.е. вы не зайдете на сайт по example.com. У 3 млн. доменов не подвязаны ip на поддомен www.

Важный момент — это наличие редиректов между версиями. Т.к. если будут в обоих случаях отдаваться 200 коды, то для поисковика это два разных сайта с дублированным контентом. Хочется напомнить, не забывайте настраивать корректные редиректы.
Редиректов с www->без www 32 млн., без www->www 38 млн.

Глядя на эти цифры мне сложно сказать кто победил — www или без www.

Редиректы


В seo кругах бытует мнение, что самым эффективным методом продвижения сайта является простановкой на него редиректов с околотематических сайтов.

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



Традиционно в топе находятся доменные регистраторы и парковки.

Если посмотреть на топ по количеству менее 10000 входящих редиректов, то можно увидеть много знакомых сайтов типа booking.com.

А в топ до 1000 появляются казино и прочие развлекательные сайты.

Server header


Наконец-то добрались до самого интересного!

186 млн доменов отдают не пустой заголовок Header. Это 87% от всех живых доменов, вполне достоверная выборка.

Если сгруппировать просто по значению, то получим:



Лидерами являются 20 серверов, которые в сумме имеют 96%:



Мировой лидер — Apache, серебро у Nginx и замыкает троицу IIS. В сумме эти три сервера хостят 87% мирового интернета.

Страны консерваторы:



Примечательно, что в Рунете картина иная:



Здесь абсолютным лидером является Nginx, apache имеет долю в три раза меньше.

Где еще любят Nginx:



Оставшиеся сервера распределены следующим образом:



X-Powered-By


Заголовок X-Powered-By есть только у 57.3 млн хостов, это примерно 27% от живых доменов.

В сыром виде лидеры:



если обработать данные и отбросить мусор — то php побеждает:



версии PHP:



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

Также есть один сайт в рунете, который говорит, что работает на php/1.0, но правдивость этой цифры вызывает сомнения.

Cookies




Заключение


Я показал лишь очень малую часть информации, которую удалось найти. Копание в этих данных напоминает рытье в куче мусора с целью найти интересные артефакты.

Не раскрытыми остались темы с блокировкой ботов поисковиков и сервисов аналитики (ahrefs, majestic и другие). На такой выборке немало находится различных сеток саттелитов, как ни пытайся скрыть футпринты, но на тысячах доменов можно увидеть закономерности.

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

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

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


  1. HermaMora
    14.06.2018 10:56

    Объем данных не пугает?


    1. sergebezborodov Автор
      14.06.2018 11:18

      та не, вполне нормально получается обрабатывать


  1. olku
    14.06.2018 11:23

    работает на php/1.0

    поделитесь, кто это?


    1. sergebezborodov Автор
      14.06.2018 11:41

      я боюсь, что мы его дружно положим хабраэффектом, скину вам в личку адрес
      скрин заголовков:
      image


      1. P6i
        14.06.2018 12:22

        Может его стоит простимулировать хабраэффектом?


    1. nikitasius
      14.06.2018 13:36

      Можно любой заголовок отдавать. Кто вообще им верит?


      1. sergebezborodov Автор
        14.06.2018 13:56

        согласен, но я очень сомневаюсь, что хотя бы каждый десятый подставляет фейк значение, чаще всего просто отключают


        1. TheShock
          15.06.2018 05:42

          Но ведь сайт такой только один) Да и, вроде, не было никогда версии PHP 1.0


          1. Voltos
            15.06.2018 09:35

            1. sergebezborodov Автор
              15.06.2018 09:36

              как выяснили в переписке в личке, сама суть сайта — печать 3д появилась гораздо позже, чем пхп 1


  1. pehat
    14.06.2018 11:27

    А откуда вы набрали доменные имена? Если обходом в глубину — deep web в вашей выборке не присутствует, в противном случае остаётся либо базы регистраторов доменов, либо брутфорс.


    1. sergebezborodov Автор
      14.06.2018 11:32

      покупаем базу доменов у аггрегаторов, самая главная проблема этих баз — там нет поддоменов


      1. Source
        15.06.2018 01:10
        +1

        А меж тем поддомен — это вполне самостоятельный домен, на котором может быть и другой сервер и другой стек. Что делает статистику несколько неполной.


        1. TheShock
          15.06.2018 05:43

          Мне кажется, что проценты это поменяет лишь в рамках погрешности. Да и как отличать — поддомен это или один и тот же сайт, как раньше было с никами на хабре? Такие сайты как раз сместят статистику в сторону более ошибочной


      1. darkk
        15.06.2018 11:06

        Некоторые поддомены есть у https://opendata.rapid7.com/sonar.fdns_v2/


        1. sergebezborodov Автор
          15.06.2018 11:50

          спасибо, потестирую их!


  1. kafeman
    14.06.2018 11:29

    Как мы просканировали весь интернет и что мы узнали
    резолвится IP и хоть одна из версий www/без_www http/https отдает любой код ответа
    Вы не просканировали весь Интернет, а только попытались просканировать всемирную паутину, которая является его частью.


    1. sergebezborodov Автор
      14.06.2018 11:34

      согласен с «паутиной», статьи я пока пишу хуже, чем код
      к более глубокому сканированию мы идем постепенно, следующая цель собрать несколько млрд страниц со всех сайтов и по ним строить аналитику


      1. mwambanatanga
        14.06.2018 12:31
        +1

        kafeman, вероятно, имел в виду, что Интернет не ограничивается Вебом. Помимо веб-серверов, в сеть «смотрят» и другие, по другим протоколам.


        1. maxzhurkin
          16.06.2018 15:06

          а ещё есть сервера веб, обходящиеся без доменных имён


  1. vesper-bot
    14.06.2018 11:32

    Лично меня несколько удивляет такая популярность 5.6

    Ничего сверх-удивительного. Фреймворки берутся под 5.6, версия 5.6 берется доступная под платформу, 7 не берется из-за потенциальных проблем совместимости кода php5 с движком php7, а перепиливать фреймворк это дело небыстрое. Плюс легаси, в виде фреймворков же, но старых неподдерживаемых версий, плюс настройки вида "раз поднял, два забыл, так и крутится", плюс 5.6 это последняя версия пятого пыха. Всё вместе дает достаточный эффект.


    1. sergebezborodov Автор
      14.06.2018 11:37

      я очень помню как переходил на 5.6 с 5.4 кажется, было достаточно много правок
      а когда с 5.6 на 7 — то толком ничего и не менял, запостил тогда скрин с пинбы:
      image


      1. JekaMas
        14.06.2018 20:49

        Аналогично, переводили кодовую базу порядка миллиона строк кода. Для перехода с 5.4 на 5.6 потребовались усилия отдельной команды до 6 человек и месяца 4 работы.
        А вот до 7 обновились менее чем за месяц.


        1. maxzhurkin
          16.06.2018 15:11

          Кстати, возможно, на 7 не переходят испугавшиеся после перехода на 5.6


  1. Blogoslov
    14.06.2018 11:44

    Скажите пожалуйста — а откуда берете список доменов по которым нужно ходить?


    1. sergebezborodov Автор
      14.06.2018 11:46

      не хочу никого рекламировать, ищется в гугле «buy all domains list»


      1. Oplkill
        14.06.2018 20:00

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


        1. sergebezborodov Автор
          14.06.2018 21:30

          если домен существует, то он всегда будет в базах регистраторов.
          с поддоменами уже сложнее, но перебор как мне кажется уж слишком дорогая операция получится


  1. wlr398
    14.06.2018 12:09

    А можно хотя бы в очень общих чертах, как монетизировать сию деятельность?


    1. sergebezborodov Автор
      14.06.2018 12:12

      мы практически не зарабатываем на этом (учесть серверные и прочие расходы)
      главная цель для меня как технаря — интересно покопаться в дебрях сети, улучшить алгоритмы краулера (который коммерческий проект) и опыт с большими данными


      1. Stas911
        15.06.2018 05:22

        А еще не все краулеры в мире написаны?


  1. Alexanevsky
    14.06.2018 12:28

    А можете поделитеся, базу доменов где брали? Российские можно получить у рег.ру, а вот зарубежные и международные


    1. sergebezborodov Автор
      14.06.2018 12:35

      мы покупаем у аггрегаторов, несложно ищется в гугле «buy all domains list»


  1. akalie
    14.06.2018 14:40

    Подскажите пожалуйста, откуда берётся кука TS01e85bed (последний скрин)?


    1. sergebezborodov Автор
      14.06.2018 14:41

      как я понял, это сайты на Wix


  1. namikiri
    14.06.2018 16:32

    pepyaka_wix — очень интересный сервер.


    1. sergebezborodov Автор
      14.06.2018 17:18

      сам хедер там Pepyaka, я дописал _wix чтобы было понятнее
      но этимология слова интересна, может кто-то и знает


      1. Konachan700
        14.06.2018 20:20
        +1

        Лексика Упячки же. Какой-то упячкоид поднял сервер, ну и подставил в заголовок словечко из своего сленга.


        1. sim2q
          15.06.2018 04:22

          и так… миллион раз:)


    1. DjOnline
      15.06.2018 11:21

      Wix — это же система создания сайтов, конструктор. И судя по данным, 125 тысяч доменов, которые покупались специально для wix и через wix, затем были заброшены и неоплачены, и именно поэтому идёт редирект на главную wix.com.


  1. LChem
    14.06.2018 16:33

    А можно подробней про стек, для чего редис и почему мускул итд. Почему своя реализация dns и http, можно в личку если не хочется на публику.


    1. sergebezborodov Автор
      14.06.2018 16:36

      секрета особого нет, редис и мускл — то, с чем хорошо умеем работать
      своя реализация для dns и http — ради оптимизации ресурсов.
      можно было собрать всю эту инфу и краулером на php, но тогда ты расходы на оборудование возросли в разы


  1. DmitrySokolov
    14.06.2018 17:17
    +1

    Таким образом доля работающих сайтов по https достигла 73% от количества сайтов работающих по http.

    Тогда как вы назовёте "27% от количества сайтов работающих по http"?
    Напрашивается так: "доля работающих сайтов не по https (а каких? если всего два типа в выборке) достигла 27% от количества сайтов работающих по http" (или "… по http… от… http", но это ещё хуже, т.к. явный бред).


    Одно число может быть меньше/больше другого на Х (в Х раз). Например, "число сайтов, работающих по http больше в 1/0,73=1,37 раза числа сайтов работающих по https".


    Процент — это "сотая доля ...". Доля — часть целого. В вашем случае — выборка про протоколам http и https это целое. https и http — это доли. Имеет смысл сравнивать доли между собой в разах (пример выше), но считать сколько одна доля составляет процентов от другой — смысла не имеет.


    Выношу этот комментарий в паблик, поскольку весь интернет заполнен подобными "процентами" (да и на Хабре тоже часто встречается).


    1. sergebezborodov Автор
      14.06.2018 17:33

      согласен с Вами, правильнее было бы написать долю https от всего хостов отдающих код 200


    1. TheShock
      15.06.2018 05:46

      Таким образом доля работающих сайтов по https достигла 73% от количества сайтов работающих по http.
      Тогда как вы назовёте «27% от количества сайтов работающих по http»?
      Я так понял, что если 100х сайтов работает по http, то по https — 73х


  1. Infthi
    14.06.2018 17:23

    Ещё одна интересная околокраулерная штука — это поиск /.{git,svn,hg}. По собственному опыту года полтора назад, валидное содержание в них находилось где-то на одном проценте доменов.


    1. sergebezborodov Автор
      14.06.2018 17:35

      добавлю еще интересно количество открытых серверов редиса без пароля, mysql, memcached
      но там нужны «правильные» ip, которые позволят забить на абузы


      1. powerman
        14.06.2018 19:45

        Такое вроде умеет искать https://www.shodan.io/


  1. Forbidden
    14.06.2018 19:08

    каким образом достигается резолвинг domain -> ip со скоростью 2к+ доменов в секунду? точнее, какие сервера способны с такой скоростью выдавать ответы?


    1. sergebezborodov Автор
      14.06.2018 21:33

      увы я таких серверов не нашел, для этой задачи нужно очень много dns серверов и очень много ip с которых их можно долбить, где эти сервера брать — отдельная задача


      1. powerman
        14.06.2018 22:02

        Я в начале 2000-ных на Perl+epoll писал подобное. Скорость получил довольно грубым методом: в процессе резолва имеющихся доменов я получал адреса их DNS-серверов, после чего просто проверял не открыт ли на этих серверах рекурсивный ресолвинг всем желающим — и таких было довольно много, так что дальше к ресолвингу подключались найденные "халявные" DNS-сервера. Очень быстро их набиралось достаточно много, чтобы рейт запросов к каждому был достаточно низким и никого не напрягал. Единственно что, на всякий случай делал дублирующую проверку через другой DNS, на случай если кто-то из "халявных" это специальный ханипот возвращающий левые ответы.


        1. sergebezborodov Автор
          14.06.2018 22:14

          о да, есть отдельная категория DNS возвращающих всякую хрень, поэтому результаты всегда нужно проверять еще на нескольких, что в сумме дает снижение общего rps


          1. powerman
            14.06.2018 22:17

            Если не путаю, у меня тогда был RPS порядка 900. Помню, огорчался что до тысячи не дотянул немного. Но… это был Perl 15 лет назад на одном 10Mbps сервере. Думаю, сейчас и на Go можно выжать намного больше 2k.


  1. el777
    14.06.2018 21:11

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


    1. sergebezborodov Автор
      14.06.2018 21:40

      самую первую версию краулера я написал где-то за пару часов, «ядром» там было что-то типа

      resp, err := http.Get(url)

      и оно работало, но очень на малых объемах и до 1-5 rps. Понадобилась куча времени в обнимку с мануалом, дебаггером, профайлером и уже моим любимым Wireshark, чтобы память и сокеты не текли. Код, увы, не opensource


      1. Voenniy
        14.06.2018 23:14

        Эх. Побольше бы технических подробностей )


  1. auine
    15.06.2018 00:10
    +2

    А как вы получили список доменов? Вы его где-то стянули или по ссылкам сайтов ходили?

    Сорян, нашел ответ выше по коментариям. Но судя по всему говоря «а после и по всем 213 млн», по всем, что вы смогли у кого-то купить)?


  1. sim2q
    15.06.2018 04:25

    а я вас вижу в логах:)


    1. sergebezborodov Автор
      15.06.2018 09:39

      очень вряд ли, боты уже неделю как спят))


      1. sim2q
        16.06.2018 09:17

        Dataprovider.com — показалось как будто похоже


  1. Docal
    15.06.2018 09:39

    кто знает что это за кука ts01e85bed


    1. sergebezborodov Автор
      15.06.2018 09:40

      это сайты на Wix


  1. capslocky
    15.06.2018 09:47

    Админы публичных DNS серверов могуть извлечь из них большой список доменов, или даже просто провайдер может логировать домены из всех проходящих DNS запросов.

    Есть и такая публичная вещь как Certificate Transparency logs, где сохраняются данные об https сертификатах. https://crt.sh/?id=358997645


  1. DjOnline
    15.06.2018 12:10

    Очень интересно увидеть пример скрытой сетки на тысячу доменов.


    1. sergebezborodov Автор
      15.06.2018 12:21

      такие данные шарить увы не могу, но могу сказать что тысяча доменов это не такая уж и большая сетка
      когда я прошлый раз сканил инет зимой, я нашел сетку из 34 тыс сайтов в рунете! при чем сайты были самых разных тематик — от стройки до чуть ли не родов, в бурже все еще интереснее


      1. DjOnline
        15.06.2018 12:51

        Это была сетка из абсолютно разных сайтов, или все они были похожи друг на друга по названию и внешнему виду? По каким признаком опозналась эта сетка? Один и тот же adsense Id? Это был тупо дорвей или рерайченный через биржу контент? На чём они зарабатывали, на партнёрке, или продаже ссылок, или на Adsense/РСЯ?
        Можно пример хотя бы одного сайта из этих 34 тысяч?