Как стать автором
Обновить

Не так страшен черт, или сколько же реально используемых доменов

Время на прочтение4 мин
Количество просмотров5.8K
Понадобилось мне собрать определенного рода статистику по вебу. Но поисковики даже приблизительно не захотели выдавать стату, какими только запросами я их ни кормил. В итоге, по исконно русской традиции, принялся писать свой «поисковик». Итак, начнем.

Первое, что нам необходимо — список всех зарегистрированных доменов. В результате продолжительных поисков был найден ресурс, предлагающий после регистрации скачать файл зоны. Регистрация проходила с добавлением кредитной карты, и после трех дней триала с нее собирались снять деньги и даже дать уже готовый файл со списком доменов, но на тот момент ждать не хотелось (возбуждение знаете ли), поэтому я просто скачал файлы зон и написал простенький парсер на python. Что-то начало медленно опускаться, возможно это были руки… 106,138,643 зарегистрированных доменов. Предположим, что 1 http ответ будет примерно 100кб. Тогда я в итоге должен сохранить около 10 Тб. Продолжительные размышления и непродолжительный сон привели меня к мысли, что думая глобально, необходимо действовать локально. Практиковаться я решил на зоне .us — в 100 раз меньше доменов (предварительно 100 Гб). Учитывая что скрипты пишутся в процессе, ошибки и перезапуск неизбежны.

Второе, экономия ресурсов в целом и времени в частности. Dns запрос дешевле http. Я был уверен, что далеко не все домены имеют А запись (если среди читателей есть просто интересующиеся, то это значит что далеко не все домены ссылаются на какой-то сервер). Пишем простенький скриптик, выясняющий этот вопрос (честно говоря после надцатого перезапуска скриптик стал не таким уж простеньким, но не суть). Итого скормил 1 746 769 доменов .us зоны, на выходе получил 227 051 которые никуда не ведут. Уже хорошо. Просматривая результат увидел массу доменов с одинаковым ip. Точно! Паркинги! Игрался я часа 3. В итоге выделил следующие айпишники (более 10000 записей на каждый):

  • 108.179.223.250 89247
  • 184.168.221.96 22095
  • 208.87.35.103 11196
  • 216.21.239.197 13574
  • 97.74.42.79 14107
  • 208.91.197.27 29839
  • 64.202.189.170 144693
  • 68.178.232.100 328476
  • 68.178.232.99 12297


При подготовке списка доменов для финальной стадии отсеил то, что я не буду трогать:

ip_blacklist = {
    "74.220.199.6": "domins parking A",
    "74.220.199.8": "domins parking A",
    "74.220.199.9": "domins parking A",
    "74.117.221.143": "parking",
    "68.178.232.100": "GoDaddy's resale/parking shit (320k in us zone)",
    "64.202.189.170": "GoDaddy's redirector server, parse this shit later (150k .us)",
    "108.179.223.250": "zip code shit, don't need at all (90k in .us 00000.us like)",
    "184.168.221.96": "GoDaddy's parking server (22k .us)",
    "208.87.35.103": "domain parking B",
    "216.21.239.197": "domains.com parking",
    "68.178.232.99": "google's parking?!?!",
    "208.91.197.23": "parking",
    "208.91.197.24": "parking",
    "208.91.197.25": "parking",
    "208.91.197.26": "parking",
    "208.91.197.27": "parking",
    "97.74.42.79": "GoDaddys' site builder or somethink like, let's parse it later",
    "204.13.160.107": "parking",
    "64.95.64.218": "probably parking, decide later what to do",
    "64.95.64.194": "probably parking, decide later what to do (dead serv)",
    "213.186.33.5": "probably parking, decide later what to do",
    "216.21.239.197": "parking"
}


108.179.223.250 забавный сервер. На нем практически все домены вида юса-зип-код.us, мне он в статистике не нужен, поэтому и отфильтровал. GoDaddy со странными сервисами, вроде сайт-билдера и редиректора отправились туда же. В итоге:

На входе — 1 746 769 доменов
Без «А» записи — 227 051
Забракованных (ip) — 702 459
Остаток — 817 262

Мдя, если в .com зоне картина будет плюс-минус, то все что опустилось точно поднимется. Делаю пробный заход на 800к запросов, и… Боже, сколько проблем… urllib2 — плохое решение, sqlite3 — еще более «плохое» решение, в дебиан ограничение на кол-во открытых файлов примерно в 2к!? Я думал, что только виндоус так дурно пахнет.

Итог: можно спокойно сократить количество работы, что надо проделать, в 2 раза. Для этого просто включаем мозг. Предварительные оценки очень приблизительны. Файл с ответами на запросы в итоге весит 5 Гб, а не 100. Правда я отключил редиректы «до выяснения», т.к. 301 на другой домен мне не нужен, а вот с индекса в папку надо отработать, но этим я займусь позже. И в догонку даю ссылку на архив с итоговыми файлами. Если что, спрашивайте у питонщиков.

Бонус 1 — файлы 91.222.136.77/tmp/us

Бонус 2 — Что искать в теле бесполезных страниц
kw_blacklist = {
    # originally found on terrapinn.us (212.53.89.138)
    "The domain DOMAIN is registered by NetNames": "blank domain registration",
    'pageTracker._trackPageview("/parked/dns/': "domins parking A",
    'src="http://return.uk.domainnamesales.com/return_js.php': "domains parking B",
    'googlesyndication.com/apps/domainpark/': "Google's parking?!?!?",
    'src="http://dsparking.com/': "Parking, check ip",
    'src="http://cdn.rooktemplate.com/rmgdsc/newProcess.js': "Parking, check ip",
    '<h2>This Domain Is Registered with Network Solutions</h2>': "No site on Network Solutions",
    '<title>Web Page Under Construction</title>': "No site on Network Solutions", # both means that we have to skip this site
}


Бонус 3 — Кол-во ответов различного типа (из тех самых 800к)
CODE 0 — 207523 (ошибка во время запроса типа таймаут или иди в ...)
CODE 200 — 385543
CODE 202 — 1
CODE 204 — 3
CODE 300 — 5
CODE 301 — 77447
CODE 302 — 114727
CODE 303 — 305
CODE 307 — 180
CODE 400 — 2498
CODE 401 — 1217
CODE 402 — 20
CODE 403 — 14237
CODE 404 — 10475
CODE 405 — 2
CODE 406 — 21
CODE 407 — 1
CODE 409 — 1
CODE 410 — 55
CODE 411 — 2
CODE 418 — 1
CODE 500 — 1807
CODE 501 — 1
CODE 502 — 160
CODE 503 — 965
CODE 504 — 26
CODE 505 — 4
CODE 508 — 1
CODE 509 — 3
CODE 600 — 1
CODE 999 — 1

Важное дополнение — смотрел я логи сервера и удивлялся, сильно удивлялся тому что с айпи 127.0.0.1 идут запросы на 80й порт. Проверил, таки да, на 127.0.0.1 ссылаются некоторые домены. Равно как и на 10.*.*.* и иные зарезервированные подсети.
Теги:
Хабы:
Всего голосов 29: ↑23 и ↓6+17
Комментарии24

Публикации

Ближайшие события