код страны по ip адресу
IT Blog. Code Inside
Определение страны посетителя сайта по его IP
Не секрет, что диапазоны IP адресов распределены между странами мира, то есть зная IP можно достаточно точно определить, в какой стране находится пользователь. Иногда даже можно определить его город и координаты (но вот на точность этих данных полагаться уже не стоит).
Существует множество способов определить страну по IP. Это либо базы адресов, развертываемые прямо на сервере, либо онлайн-сервисы, возвращающие информацию об адресе в структурированном формате. Большинство этих сервисов, конечно, имеют ограничения, и для использования в крупных проектах требуют покупки лицензии или подписки, но попробовать их можно и бесплатно.
MaxMind
GeoIP2 сервис, практически монополист на рынке, предлагающий платные услуги по определению страны, города и других параметров.
Рассматривать этот сервис подробно не будем, перейдем к более простым решениям.
ip2nation.com
Это MySQL база данных с информацией о соответствии адреса стране. Скачать для размещения ее на собственном сервере можно здесь.
Пример на php, позволяющий вывести полное название страны:
geoPlugin
Онлайн-сервис определения страны и города подключается к сайту следующим образом:
После подключения можно вызывать следующие методы:
Также можно не подключать библиотеку, а использовать JSONP:
ipinfo.io
Чтобы вызвать его в js используется код
В ответе вы получите:
Сервис поддерживает HTTPS, можно использовать его на сайтах с поддеpжкой HTTPS. Чтобы избежать проблем с кросс-доменными запросами, которые Chrome ограничивает, можно воспользоваться поддержкой JSONP:
freegeoip.net
Сервис, предлагающий открытый HTTP и HTTPS API, позволяющий получить информацию в форматах CSV, XML или JSON.
Сервис также поддеживает JSONP:
Вместо выводов
По результатам наблюдений все приведенные сервисы (кроме MaxMind, который в испытаниях не участвовал, и вообще приведен в статье лишь для полноты картины) правильно определили страну и код страны, geoPlugin сумел правильно определить валюту. Только сервис ipinfo правильно определил область, но промахнулся с городом, а ни один другой сервис город и область не определили совсем (вернули null, 0 или пустое значение).
Определение страны по IP: тестируем скорость алгоритмов
Для определения страны по IP необходимы специальные базы данных, состоящие из диапазонов IP адресов и соответствующих им стран. Обычно такие базы данных распространяются в виде CSV или SQL файлов для использования в СУБД, либо бинарных файлов специального формата.
Для проведения тестирования была выбрана февральская база GeoLite Country, бесплатная версия GeoIP Country от MaxMind.
В тестировании приняли участие несколько популярных решений и мой «велосипед» на эту тему.
Участники тестирования
MySQL
В качестве подопытной СУБД будет использоваться MySQL. В которой создана таблица, состоящая из IP-диапазонов и номеров стран, IP преобразованы в integer и по ним построены индексы. Структура таблицы выглядит так:
GeoIP API
SxGeo v2
Немного слов о моем «велосипеде». Лет 6 назад, после изучения доступных на тот момент решений определения страны по IP, был впечатлен скоростью бинарного формата GeoIP. Но у него, как мне показалось, был недостаток в большом количестве перемещений по файлу для нахождения нужного IP. Появилась интересная идея по поводу своей реализации. Которая довольно быстро была реализована и, на удивление, оказалась значительно быстрее, чем я ожидал. Долгое время Sypex Geo использовался в своих проектах.
На днях решил реализовать еще некоторые идеи по оптимизации. В итоге появилась версия Sypex Geo 2 (сокращено SxGeo). Файл с базой данных стал на 25% меньше, чем у первой версии, и при этом скорость увеличилась в 1,7-2 раза.
Geobaza
Также вне конкурса был протестирован алгоритм Geobaza. Вне конкурса, потому что использовался родной бинарный файл, со значительно большим количеством диапазонов. Geobaza показала около 2000-3000 IP/сек, был очень большой разброс по результатам. Если создатели Geobaza прочитают эту статью и пришлют файл, сгенерированный по февральскому GeoLite Country, то с удовольствием добавлю в тестирование.
Тестирование
Для тестирования был написан PHP-скрипт, в котором при каждом запуске генерился массив из 10000 случайных IP-адресов. После чего все алгоритмы проверялись на этом массиве. Такой метод тестирования был выбран для того, чтобы алгоритмы были в равных условиях.
Тестилось на серваке под управлением FreeBSD 8 и PHP 5.2.17. Также тестилось на локалке Win 7 x64, PHP 5.3.9, пропорции примерно те же, поэтому в таблицах представлены только результаты FreeBSD.
Тест прогонялся 10 раз, усредненные данные приведены на графике.
Самыми медленными оказались простые запросы MySQL. Причина столь медленной работы становится очевидной, если посмотреть EXPLAIN этих запросов.
Первый результат простого индекса PRIMARY KEY (`ipn1`), второй для составного индекса PRIMARY KEY (`ipn1`, `ipn2`), третий для двух индексов PRIMARY KEY (`ipn1`), INDEX `ipn2` (`ipn2`). Как видим для составного индекса строк для последующего перебора больше, чем в других случаях. Я же тестил без LIMIT 1, и в этом случае EXPLAIN пишет, что индекс не используется, хотя реально работает такой вариант быстрее, чем с LIMIT.
Вариант с вложенным SELECT — значительно быстрее. Запрос показывает, что индексы в MySQL, когда они нормально используются, работают очень быстро, приближаясь к специализированным бинарным форматам.
GeoIP показал, что его всё же использовать предпочтительнее, чем MySQL. Меня смутило, что использование кэширования в памяти дает столь малый прирост, меньше 10%. Поковырявшись в geoip.inc, нашел виновника. Им оказался следующий код:
Если закомментировать строки с mb_internal_encoding то в итоге скорость поднимется до 6600 IP/сек — уже более ощутимый прирост от использования кэширования в памяти. Кодировки в данном случае нас не волнуют, возможно были какие-то глюки с GeoIP City.
Что касается SxGeo, то тут думаю, комментарии излишни. Он и в обычном режиме работает очень быстро, а в режиме Batch + Memory позволяет получить прибавку еще 40%.
Желающие могут скачать и потестить SxGeo 2. Пожелания и багрепорты приветствуются.
UPD. Потестил еще запросы в разных комбинациях индексов, оказалось, что если в первые 2 запроса добавить LIMIT 1, то MySQL начинает очень тупить, где-то в 3-5 раз медленнее.
Код страны по ip адресу
Составление диапазонов IP
Узнать информацию о себе
Извлечение информации из кэша и веб архивов
Обход запрета показа исходного HTML кода, обход социальных блокировщиков
Продвинутое использование поисковых систем
Работа с кодировками
Инструменты противодействия CloudFlare
Изображения и метаданные
Информация о номерах телефонов
Сканеры уязвимостей веб-сайтов
Сканеры уязвимостей, открытых портов и запущенных служб веб-серверов
Субдомены и скрытые файлы
Получение информации по MAC-адресам
Анализ работы веб-сервера
Анализ электронных писем
Лучший хостинг Рунета:
IP адреса стран, городов и других географических пунктов
Все IP адреса каждого города, региона, области, населённого пункта и стран всего мира.
Континенты:
Континент Африка (или открыть список ВСЕХ IP адресов этого континента)
Континент Антарктика (или открыть список ВСЕХ IP адресов этого континента)
Континент Азия (или открыть список ВСЕХ IP адресов этого континента)
Континент Европа (или открыть список ВСЕХ IP адресов этого континента)
Континент Северная Америка (или открыть список ВСЕХ IP адресов этого континента)
Континент Океания (или открыть список ВСЕХ IP адресов этого континента)
Континент Южная Америка (или открыть список ВСЕХ IP адресов этого континента)
Континент Неизвестно или не указано (или открыть список ВСЕХ IP адресов этого континента)
Вас также могут заинтересовать сервисы:
If you want to contribute, you can make donation for adding new services:
Код страны по ip адресу
Составление диапазонов IP
Узнать информацию о себе
Извлечение информации из кэша и веб архивов
Обход запрета показа исходного HTML кода, обход социальных блокировщиков
Продвинутое использование поисковых систем
Работа с кодировками
Инструменты противодействия CloudFlare
Изображения и метаданные
Информация о номерах телефонов
Сканеры уязвимостей веб-сайтов
Сканеры уязвимостей, открытых портов и запущенных служб веб-серверов
Субдомены и скрытые файлы
Получение информации по MAC-адресам
Анализ работы веб-сервера
Анализ электронных писем
Лучший хостинг Рунета:
IP адреса стран, городов и других географических пунктов
Все IP адреса каждого города, региона, области, населённого пункта и стран всего мира.
Континенты:
Континент Африка (или открыть список ВСЕХ IP адресов этого континента)
Континент Антарктика (или открыть список ВСЕХ IP адресов этого континента)
Континент Азия (или открыть список ВСЕХ IP адресов этого континента)
Континент Европа (или открыть список ВСЕХ IP адресов этого континента)
Континент Северная Америка (или открыть список ВСЕХ IP адресов этого континента)
Континент Океания (или открыть список ВСЕХ IP адресов этого континента)
Континент Южная Америка (или открыть список ВСЕХ IP адресов этого континента)
Континент Неизвестно или не указано (или открыть список ВСЕХ IP адресов этого континента)
Вас также могут заинтересовать сервисы:
If you want to contribute, you can make donation for adding new services:
Узнать местоположение IP-адреса
Информация о местоположении IP-адреса
Расположение IP-адреса на карте
Геолокация по IP-адресу
Поскольку все IP-адреса в Интернете уникальны, а каждый владелец и провайдер официально зарегистрирован, должно быть возможно определять географическое расположение любого ПК или сервера просто по его IP-адресу, по крайней мере в теории. Одна из проблем заключается в том, что диапазоны IP-адресов администрируются несколькими сотнями региональных учреждений, и было бы не очень практично запрашивать в каждом из них напрямую. К счастью, некоторые компании специализируются на сборе информации о диапазоне IP-адресов со всего мира. Они продают эту информацию в виде консолидированных баз данных, которые легко интегрируются в любой веб-сервер с целью быстрого поиска информации о стране, регионе, городе или интернет-провайдере. Точность этих баз данных колеблется от 80 до 99,8%, согласно их собственным утверждениям.
Многие веб-серверы уже используют технологию геолокации для автоматического отображения контента на местном языке посетителя, предоставляя результаты регионального поиска или измененные страницы в определенных странах, в соответствии с местным законодательством, ограничивающим доставку музыки только для граждан США, для предотвращения подлога, в маркетинговых целях, во время веб-анализа, эта технология также широко используется в брандмауэрах, серверах доменных имен, серверах рекламы, маршрутизации, почтовых системах, веб-сайтах и других автоматизированных системах, где может быть полезна геолокация.
IP2GeoLocation.com веб-сервис IP-геолокации обеспечивает поиск IP-адреса в базе геолокации и возвращает информацию о местоположении, такую как: континент, код страны, название страны, регион или штат, город, широта и долгота, почтовый индекс, часовой пояс, интернет-провайдер или название компании и так далее. Для поиска отправьте запрос в строку сервиса, и вы получите географическое расположение IP-адреса в течении нескольких секунд. Индекс результатов поиска включает в себя более 4 миллиардов уникальных IP-адресов.
Этот бесплатный и простой онлайн-инструмент позволит вам узнать владельца, интернет-провайдера и географическое местоположение любого веб-сайта, домена или IP-адреса. Проверка IP-адресов полезна, когда вам нужно определить, откуда приходят посетители вашего сайта. У вас может быть веб-сайт электронной коммерции, и вы хотели бы знать, где находятся ваши потенциальные клиенты, предварительно заполнить код страны в формах, отобразить другой язык и уменьшить количество случаев мошенничества с кредитными картами, внедрив систему предотвращения мошенничества на основе географического местоположения. Или, возможно, вы захотите бороться со спаммерами и хакерами, узнать где они находятся. Просто введите IP-адрес или имя хоста, и вам будет показано местоположение на карте, координаты, страна, регион, город и интернет-провайдер. Вам также может быть интересно узнать, что ваш IP-адрес раскрывает о вас.