Определение страны посетителя сайта по его IP

Определение страны посетителя сайта по его IP

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

Существует множество способов определить страну по IP. Это либо базы адресов, развертываемые прямо на сервере, либо онлайн-сервисы, возвращающие информацию об адресе в структурированном формате. Большинство этих сервисов, конечно, имеют ограничения, и для использования в крупных проектах требуют покупки лицензии или подписки, но попробовать их можно и бесплатно.

MaxMind

GeoIP2 сервис, практически монополист на рынке, предлагающий платные услуги по определению страны, города и других параметров.

Достоинство - самые актуальные базы и различные подходы к повышению точности определения.

Недостаток - услуга использования онлайн-сервиса платная, 0,0001 $ за запрос, причем платить нужно вперед. Однако, можно скачать бесплатную версию баз GeoLite2 Country или GeoLite2 City, разместить ее на сервере (для этого нужно иметь доступ к файловой системе), и использовать в C#, Java или php проекте (список поддерживаемых API).

Рассматривать этот сервис подробно не будем, перейдем к более простым решениям.

ip2nation.com

Это MySQL база данных с информацией о соответствии адреса стране. Скачать для размещения ее на собственном сервере можно здесь.

Пример на php, позволяющий вывести полное название страны:

<?php $server = ''; // MySQL hostname $username = ''; // MySQL username $password = ''; // MySQL password $dbname = ''; // MySQL db name $db = mysql_connect($server, $username, $password) or die(mysql_error()); mysql_select_db($dbname) or die(mysql_error()); $sql = 'SELECT c.country FROM ip2nationCountries c, ip2nation i WHERE i.ip < INET_ATON("'.$_SERVER['REMOTE_ADDR'].'") AND c.code = i.country ORDER BY i.ip DESC LIMIT 0,1'; list($countryName) = mysql_fetch_row(mysql_query($sql)); echo $countryName; // Вывести полное название страны ?>

geoPlugin

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

<script src="http://www.geoplugin.net/javascript.gp" type="text/javascript"></script>

После подключения можно вызывать следующие методы:

geoplugin_request() - IP geoplugin_status() - статус (200б 4040 и т. д.) geoplugin_credit() - благодарности сервису MaxMind, упомянутому чуть выше. geoplugin_city() - город geoplugin_region() - область или регион geoplugin_areaCode() - код зоны geoplugin_dmaCode() - американский код из трех цифр, определяющий набор поддерживаемых телеканалов geoplugin_regionCode() - код региона geoplugin_regionName() - название региона geoplugin_countryCode() - двухбуквенный код страны geoplugin_countryName() - название страны на английском языке geoplugin_continentCode() - код континента (например EU - Европа) geoplugin_latitude() - широта geoplugin_longitude() - долгота geoplugin_currencyCode() - трехбуквенный код валюты страны geoplugin_currencySymbol() - символ валюты страны

Также можно не подключать библиотеку, а использовать JSONP:

Достоинство - кроме страны можно получить информацию о валюте и ее код (₴, €, ₽).

Недостаток - запросы по HTTPS платные, подписка стоит €12 в год.

ipinfo.io

Открытый сервис, позволяющий бесплатно делать до 1000 запросов в сутки .

Чтобы вызвать его в js используется код

В ответе вы получите:

"ip" - IP адрес пользователя "hostname" - обратный IP "city" - предположительный город, в котором находится пользователь "region" - регион (область, район) "country" - страна в виде двухбуквенного кода "loc" - координаты широты и долготы "org" - информация о провайдере

Сервис поддерживает HTTPS, можно использовать его на сайтах с поддеpжкой HTTPS. Чтобы избежать проблем с кросс-доменными запросами, которые Chrome ограничивает, можно воспользоваться поддержкой JSONP:

Практически полный клон ipinfo - сервис ipapi.co. Также ограничивает бесплатное использование 1000 запросов в сутки .

freegeoip.net

Сервис, предлагающий открытый HTTP и HTTPS API, позволяющий получить информацию в форматах CSV, XML или JSON.

Для бесплатного использования предлагается 10 000 запросов в час .

Сервис также поддеживает JSONP:

"ip" - непосредственно IP адрес "country_code" - двухбуквенный код страны "country_name" - название страны на английском языке "region_code" - код региона "region_name" - название региона "city" - город "zip_code" - почтовый код (США) "time_zone" - временная зона "latitude"- широта "longitude" - долгота "metro_code" - метро

Вместо выводов

По результатам наблюдений все приведенные сервисы (кроме MaxMind, который в испытаниях не участвовал, и вообще приведен в статье лишь для полноты картины) правильно определили страну и код страны, geoPlugin сумел правильно определить валюту. Только сервис ipinfo правильно определил область, но промахнулся с городом, а ни один другой сервис город и область не определили совсем (вернули null, 0 или пустое значение).

📎📎📎📎📎📎📎📎📎📎