Как мы просканировали весь интернет и что мы узнали

    Сколько сайтов вы используете ежедневно? Пару социальных сетей, поисковик, несколько любимых издательств, около 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 и другие). На такой выборке немало находится различных сеток саттелитов, как ни пытайся скрыть футпринты, но на тысячах доменов можно увидеть закономерности.

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

    Буду рад услышать ваши комментарии и замечания.
    Поделиться публикацией
    Комментарии 75
    • НЛО прилетело и опубликовало эту надпись здесь
        +1
        та не, вполне нормально получается обрабатывать
          0
          Здравствуйте, спасибо за статью. Напишу здесь вопросы, возможно это будет еще кому-нибудь интересно:
          1) можете более точно описать конфигурацию серверов, на которых это все дело запускалось (сколько ядер, памяти и т.д)

          2) В Golang вы используете стандартный http клиент, без всяких чит кодов, наподобие fasthtttp?

          3) В своих сервисах по краулингу пишете с нуля (на базе готовой, которя уже реализует небольшой функционал, она вроде из пакета golang.org/x/html) библиотеку по разбору DOM страниц или уже готовую (Goquery например)?

          4) Пробовали что-то подобное на php сделать, как считаете, когда уже целесообразно будет вместо php взять Go, и какие библиотеки использовали из php?
        0
        работает на php/1.0

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

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

              0
              согласен, но я очень сомневаюсь, что хотя бы каждый десятый подставляет фейк значение, чаще всего просто отключают
                0
                Но ведь сайт такой только один) Да и, вроде, не было никогда версии PHP 1.0
                  0
                    +1
                    как выяснили в переписке в личке, сама суть сайта — печать 3д появилась гораздо позже, чем пхп 1
            0

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

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

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

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

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

              +4
              Как мы просканировали весь интернет и что мы узнали
              резолвится IP и хоть одна из версий www/без_www http/https отдает любой код ответа
              Вы не просканировали весь Интернет, а только попытались просканировать всемирную паутину, которая является его частью.
                0
                согласен с «паутиной», статьи я пока пишу хуже, чем код
                к более глубокому сканированию мы идем постепенно, следующая цель собрать несколько млрд страниц со всех сайтов и по ним строить аналитику
                  +7
                  kafeman, вероятно, имел в виду, что Интернет не ограничивается Вебом. Помимо веб-серверов, в сеть «смотрят» и другие, по другим протоколам.
                    0
                    а ещё есть сервера веб, обходящиеся без доменных имён
                0
                Лично меня несколько удивляет такая популярность 5.6

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

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

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

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

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

                    0
                    не хочу никого рекламировать, ищется в гугле «buy all domains list»
                      0
                      А не проще ли простым перебором комбинаций(знаю, что бесконечно много), для получения экзотических сайтов на которые никто не ссылается, но вполне себе существуют и живут жизнью
                        0
                        если домен существует, то он всегда будет в базах регистраторов.
                        с поддоменами уже сложнее, но перебор как мне кажется уж слишком дорогая операция получится
                    +1
                    А можно хотя бы в очень общих чертах, как монетизировать сию деятельность?
                      0
                      мы практически не зарабатываем на этом (учесть серверные и прочие расходы)
                      главная цель для меня как технаря — интересно покопаться в дебрях сети, улучшить алгоритмы краулера (который коммерческий проект) и опыт с большими данными
                        0
                        А еще не все краулеры в мире написаны?
                      0

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

                        0
                        мы покупаем у аггрегаторов, несложно ищется в гугле «buy all domains list»
                        0
                        Подскажите пожалуйста, откуда берётся кука TS01e85bed (последний скрин)?
                          0
                          как я понял, это сайты на Wix
                          0
                          pepyaka_wix — очень интересный сервер.
                            0
                            сам хедер там Pepyaka, я дописал _wix чтобы было понятнее
                            но этимология слова интересна, может кто-то и знает
                              +1
                              Лексика Упячки же. Какой-то упячкоид поднял сервер, ну и подставил в заголовок словечко из своего сленга.
                                0
                                и так… миллион раз:)
                                0

                                Пепяка — так в ДИТ компании x5 retail group называют (по крайней мере раньше называли) их розничную сеть (ПЕрекресток, ПЯтерочка, КАрусель)

                                0
                                Wix — это же система создания сайтов, конструктор. И судя по данным, 125 тысяч доменов, которые покупались специально для wix и через wix, затем были заброшены и неоплачены, и именно поэтому идёт редирект на главную wix.com.
                                0
                                А можно подробней про стек, для чего редис и почему мускул итд. Почему своя реализация dns и http, можно в личку если не хочется на публику.
                                  0
                                  секрета особого нет, редис и мускл — то, с чем хорошо умеем работать
                                  своя реализация для dns и http — ради оптимизации ресурсов.
                                  можно было собрать всю эту инфу и краулером на php, но тогда ты расходы на оборудование возросли в разы
                                  +3
                                  Таким образом доля работающих сайтов по https достигла 73% от количества сайтов работающих по http.

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


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


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


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

                                    0
                                    согласен с Вами, правильнее было бы написать долю https от всего хостов отдающих код 200
                                      0
                                      Таким образом доля работающих сайтов по https достигла 73% от количества сайтов работающих по http.
                                      Тогда как вы назовёте «27% от количества сайтов работающих по http»?
                                      Я так понял, что если 100х сайтов работает по http, то по https — 73х
                                      0
                                      Ещё одна интересная околокраулерная штука — это поиск /.{git,svn,hg}. По собственному опыту года полтора назад, валидное содержание в них находилось где-то на одном проценте доменов.
                                        0
                                        добавлю еще интересно количество открытых серверов редиса без пароля, mysql, memcached
                                        но там нужны «правильные» ip, которые позволят забить на абузы
                                      0
                                      каким образом достигается резолвинг domain -> ip со скоростью 2к+ доменов в секунду? точнее, какие сервера способны с такой скоростью выдавать ответы?
                                        0
                                        увы я таких серверов не нашел, для этой задачи нужно очень много dns серверов и очень много ip с которых их можно долбить, где эти сервера брать — отдельная задача
                                          0

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

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

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

                                        0

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

                                          0
                                          самую первую версию краулера я написал где-то за пару часов, «ядром» там было что-то типа
                                          resp, err := http.Get(url)

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

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

                                              0

                                              :)
                                              Если можете поделиться какими-то интересными наработками, как тюнинговали, переиспользовали буферы, боролись с аллокациями и прочим, то было бы очень интересно.

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

                                            Сорян, нашел ответ выше по коментариям. Но судя по всему говоря «а после и по всем 213 млн», по всем, что вы смогли у кого-то купить)?
                                              0
                                              а я вас вижу в логах:)
                                                0
                                                очень вряд ли, боты уже неделю как спят))
                                                  0
                                                  Dataprovider.com — показалось как будто похоже
                                                0
                                                кто знает что это за кука ts01e85bed
                                                0
                                                Админы публичных DNS серверов могуть извлечь из них большой список доменов, или даже просто провайдер может логировать домены из всех проходящих DNS запросов.

                                                Есть и такая публичная вещь как Certificate Transparency logs, где сохраняются данные об https сертификатах. https://crt.sh/?id=358997645
                                                  0
                                                  Очень интересно увидеть пример скрытой сетки на тысячу доменов.
                                                    0
                                                    такие данные шарить увы не могу, но могу сказать что тысяча доменов это не такая уж и большая сетка
                                                    когда я прошлый раз сканил инет зимой, я нашел сетку из 34 тыс сайтов в рунете! при чем сайты были самых разных тематик — от стройки до чуть ли не родов, в бурже все еще интереснее
                                                      0
                                                      Это была сетка из абсолютно разных сайтов, или все они были похожи друг на друга по названию и внешнему виду? По каким признаком опозналась эта сетка? Один и тот же adsense Id? Это был тупо дорвей или рерайченный через биржу контент? На чём они зарабатывали, на партнёрке, или продаже ссылок, или на Adsense/РСЯ?
                                                      Можно пример хотя бы одного сайта из этих 34 тысяч?
                                                    0
                                                    Отличная аналитика!
                                                    Но вы как-то проигнорировали один из актуальнейших вопросов: сколько живых в IPv4 и IPv6?
                                                      0
                                                      спасибо! ipv6 надеюсь сделаем в будущих исследованиях, пока что допиливаем краулер, для сбора еще большего количества инфы
                                                        0
                                                        Т.е. это всё справедливо только для четвёрки?
                                                    0
                                                    А зачем используются HTTP-коды ответов > 5xx?
                                                      0
                                                      я сам не знаю, в спецификации их нет, но реально они есть

                                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                    Самое читаемое