Составление диапазонов IP

Узнать информацию о себе

Извлечение информации из кэша и веб архивов

Обход запрета показа исходного HTML кода, обход социальных блокировщиков

Продвинутое использование поисковых систем

Работа с кодировками

Инструменты противодействия CloudFlare

Изображения и метаданные

Информация о номерах телефонов

Сканеры уязвимостей веб-сайтов

Сканеры уязвимостей, открытых портов и запущенных служб веб-серверов

Согласись, зачастую нам все равно,
кто будет нашей жертвой :). Особенно, если нам требуется
получить много машин и/или мы ищем их какими-то
автоматизированными способами. А чтобы защитить себя от
длинных рук правосудия, мы, конечно же, используем
всякие VPN’ы, проксики и другие средства для поддержания
личной анонимности. Хорошим дополнением к перечисленному
будет тот факт, что наши жертвы находятся в другой стане
или на другом континенте. Тогда негативного фидбека
можно не опасаться.

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

Местоположение — это важно.

Какие бывают способы геолокации

Существует 2 базовых способа геолокации, если исключить парсинг геометок фотографий и шпионаж со спутников.

Взять IP-адрес пользователя и по специальному справочнику найти город со страной.

Узнать местонахождение через HTML5 Geolocation API.

В этой статье мы рассказываем, как найти город пользователя, потому что такой точности обычно хватает. Го́рода достаточно интернет-магазинам, курьерским службам, новостным агрегаторам, сайтам с прогнозами погоды.

Город лучше определять по IP: способ всегда работает и не тревожит пользователя. А в геолокации по IP главное — найти справочник, который удобно подключается и без ошибок выдает город. Вторая часть статьи — об этом.

Как мы выбирали справочник IP-адресов

В сравнении справочников есть большая проблема: невозможно проверить, действительно ли прямо сейчас IP-адрес принадлежит городу, найденному справочником. Вчера IP относился к Питеру, а сегодня это Нижний Новгород.

Поэтому мы сравнивали справочники по таким критериям:

  1. Стоимость.
  2. Частота обновлений.
  3. Количество диапазонов IP-адресов для России.
  4. Количество адресов «на местности», или полнота. Чтобы измерить полноту, мы прогнали все адреса из каждого справочника через API cтандартизации «Дадаты». Сервис привел адреса к одному формату и разобрал по типам: регион, район, город. Эти стандартизованные адреса мы и посчитали.
  5. Формат: насколько справочник удобно использовать.
  6. Библиотеки и интеграции с популярными фреймворками.
  7. Что можно вытащить из базы помимо города.
  8. Чей Крым (политика политикой, а бизнесу работать надо).
  9. Детализация по населенным пунктам. Чтобы узнать ее, мы прогнали 35000 рандомных уникальных IP-адресов через каждый справочник. Потом сравнили, сколько уникальных городов разрезолвил каждый справочник.

Мы рассматривали такие справочники:

IPGeoBase

Обновления. Каждый день.

Пулы IP-адресов в России. 43751 пул, это первое место.

Полнота. 728 объектов:

  • 3 региона (Москва, Санкт-Петербург, Севастополь);
  • 2 района;
  • 601 город;
  • 113 прочих населенных пунктов.

Третье место по этому параметру.

Формат базы. Tab-separated текстовые файлы. В одном файле города с ID, в другом — залинкованные на них диапазоны IP.

Кодировка в файлах — боль под названием Windows-1251. Хорошо, что есть iconv — легким движением руки мы получили UTF-8:

База медленная (еще бы, это текстовый файл) — обход 35000 адресов занял несколько минут.

Библиотеки. Есть готовые под Perl, Ruby и Python, но самая новая — от 2013 года. За 4 года Трамп стал президентом США, вышел PHP 7, появился миллион JS-фреймворков, но ни одну из библиотек под этот справочник так и не обновили.

Чтобы портировать библиотеку под Python 3, понадобился час.

Что можно вытащить из базы.

Детализация. На выборке в 35000 адресов нашлось 372 разных населенных пункта.

Это третье место с небольшим отставанием от второго.

Вердикт. IPGeoBase — это набор городов и диапазонов IP-адресов, который завернут в .txt-файлы с tab-separated структурой. Обновляется достаточно часто.

Минусы — библиотеки очаковских времен, да и текстовый файл — не самое удобное решение для доступа к данным.

Повидавший жизнь, но до сих пор летающий Ту-154.

SypexGEO

Стоимость. Бесплатный, распространяется по BSD-лицензии.

Обновления. Пару раз в месяц.

Пулы IP-адресов в России. Всего диапазонов 1696337, но неясно, сколько из них относятся к России: данные закопаны в справочнике. По этому параметру место не присудить.

Полнота. 832 объекта:

  • 2 региона,
  • 1 район,
  • 630 городов,
  • 196 прочих населенных пунктов.

Второе место. Неплохо!

Формат. Странный .dat-файл со структурой на смещениях. Внутренности быстро расковырять не получилось — создатель на форуме говорит, что конвертера для перевода базы в человекопонятный вид нет.

Как работать со справочником, если не через библиотеку — неясно. Для любопытных есть спецификация на сайте справочника.

Скорость хорошая: обход 35000 адресов занял несколько секунд.

Библиотеки. Есть для Python, PHP Yii, PHP Laravel, Java, Ruby. Обновлялись 2-3 года назад. Еще есть интеграция с Symfony и плагин для WordPress.

Что можно вытащить из базы:

Детализация. На выборке в 35000 адресов нашлось 400 разных населенных пунктов.

Это второе место.

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

По наполнению и точности похожа на IPGeoBase — здесь чуть больше объектов, 10% адресов резолвятся по-другому.

База полностью открыта.

К сожалению, не резолвит Крым в Россию.

Вертолет Black Hawk — классно летает, но не всем подойдет.

MaxMind Lite

Стоимость. Бесплатный с лицензией Creative Commons. Есть платная версия, которая стоит $1470 в год.

Обновления. Первый вторник каждого месяца (прям как паспортный стол).

Пулы IP-адресов в России. 91432. Если убрать IP-адреса, которые резолвятся в Россию без города, — 42822. Это второе место.

Полнота. 1392 объекта:

  • 61 регион,
  • 819 городов,
  • 497 населенных пунктов.

Первое место с большим отрывом!

Формат базы. Собственный .mmdb. Города и диапазоны IP-адресов доступны также в .csv-файлах, которые лежат в архиве с базой.

У базы есть версии с разной точностью: до страны, до города, а также справочник ASN (уникальных номеров интернет-провайдеров). Есть также база для IPv6-адресов.

Библиотеки. Здесь полный порядок — на «Гитхабе» лежит несколько десятков библиотек для работы с базой.

Что можно вытащить из базы. Выдача суперподробная и мультиязычная. MaxMind отдает интересный параметр accuracy_radius — точность радиуса координат в километрах.

Детализация. На выборке в 35000 адресов справочник нашел 749 адресных объектов.

Это первое место.

  • в 13% случаев база не сумела определить город. Поняла только, что он находится в РФ, и разрезолвила страну;
  • создатели намекают, что определение адреса по IP — не самая сильная сторона бесплатной версии. Для контроля точности они предлагают мониторить accuracy_radius.

Вердикт. Подробнейшая база с шикарной выдачей.

В 50% случаев результаты расходятся с предыдущими двумя базами — точность и детализация у MaxMind Lite выше.

Но есть принципиальные минусы — частота обновлений и Крым.

Навороченный космический корабль, который обновляется раз в месяц и не считает Крым российским.

ip2ruscity

Стоимость. Платный, стоит 5000 рублей в год.

Обновления. Раз в месяц.

Пулы IP-адресов в России. 34907 пул, третье место.

Полнота. 486 объектов:

  • 4 региона,
  • 454 города,
  • 28 населенных пунктов.

Четвертое место, которое сильно слабее третьего.

Формат базы. Tab-separated текстовые файлы либо SQL-файлы. В них — города, регионы, диапазоны IP-адресов. Есть еще телефонные коды городов, но почему-то они доступны только в MySQL-формате. В общем, как в программе партии «Неуверенная Россия» — будет средне (не прямо круто, так, нормально).

Начало и конец диапазонов IP-адресов для экономии места завернуты в uint-формат. Их придется самостоятельно привести к виду IP-адресов.

Не особо удобно, но жить можно. На Python делается просто:

Библиотеки. Не нашлось ни одной :(. Пришлось накостылить свой авангардный биндинг для исследования, код публиковать не буду.

У сервиса недавно появилось API. Через него отдают:

  • город,
  • регион,
  • координаты по Google Maps и «Яндекс.Картам».

API относительно бесплатное — не больше 20 запросов в сутки с одного IP-адреса. В платной версии дают 3000 запросов в час.

Что можно вытащить из базы.

Если использовать MySQL-формат базы, возвращается еще телефонный код города.

Детализация. На выборке в 35000 адресов нашлось 273 населенных пункта. Это последнее место.

Вердикт. Вроде и недорого, но за деньги могло быть и получше.

Винтовой ATR-72 авиакомпании Air Serbia.

Подводя итоги (как первый канал)

Бесплатная MaxMind Lite практически по всем параметрам быстрее, выше и сильнее остальных. Тем не менее, у нее 2 важных минуса — обновляется всего раз в месяц и не считает Крым российским.

Мы в «Дадате» не спали ночами и думали, какой справочник выбрать для своего API геолокации. В итоге взяли за основу IPGeoBase и навернули сверху всяких плюсов.

По сравнению с «голым» IPGeoBase «Дадата» удобнее.

Обновляется автоматически. Сервис обновляет справочник по мере выхода новой версии, вспоминать об этом не придется.

Библиотеки не нужны. Справочник доступен по API, к нему подключится любая HTTP-библиотека. Запрос очень простой: отправляешь только IP-адрес и токен, который дают при регистрации на DaData.ru.

Сервис отдает куда больше данных, чем «голый» справочник. Помимо названия найденного объекта это:

  • детализация, до которой удалось разрезолвить IP: страна, регион, район, город, населенный пункт;
  • типы и названия найденного и всех вышестоящих адресных объектов (например, города → района → региона → страны);
  • коды КЛАДР и ФИАС для найденного и всех вышестоящих адресных объектов (региона, района и т. д.);
  • признак центра района, региона, района и региона;
  • коды ИФНС, ОКАТО и ОКТМО.

Всего в выдаче для IP несколько десятков полей, на DaData.ru есть полная спецификация.

Мы превратили рабочий, но некрашеный Ту-154 в Airbus А-380.

В экономе возим бесплатно — к API можно сделать 10000 запросов в сутки, просто зарегистрировавшись. Если нужно больше, это будет стоить от 4000 рублей в год.