Блог студии веб-дизайна «Make a Site» Дизайн, верстка, программирование, наполнение и раскрутка сайтов.

«Сейчас я тебя по IP вычислю!»

Определение местоположения пользователя, основываясь на его IP адресе – очень актуальный вопрос в современном интернете. Целей определения адреса по IP может быть сколько угодно, но сегодня мы бы хотели рассмотреть основные способы.

«Сейчас я тебя по IP вычислю!»
Содержание статьи

Что такое IP адрес

body-ipIP адрес (от англ. Internet Protocol Address) – уникальный идентификатор узла в сети, представляющий собой набор четырех десятичных чисел, разделенных точками по определенной маске.

Каждое устройство в глобальной сети должно быть уникально определено специальным IP адресом. В случае, когда сеть является локальной (подсеть), точка доступа, обеспечивающая подключение к интернету всех компьютеров подсети имеет уникальный адрес в глобальной сети, а все компьютеры локальной сети отличаются между собой локальными IP адресами, которые выдаются подключенным устройствам маршрутизатором.

Самым распространенным протоколом является IPv4, в котором длина IP адреса равна 4 байтам (32 бит). Для сравнения, в 6-ой версии протокола IPv6, представляет собой уже 128-битное число, цифры в котором разделяются не точками, а двоеточиями.

Зачем вычислять адрес по IP

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

geolocationЕсли посетитель сайта, например, ищет турник и хочет забрать его самовывозом, не видя смысла платить кругленькую сумму за доставку и ждать курьера 1-2 дня, то ему бы не помешала актуальная информация о наличии необходимого товара на складе. Геотаргетинг как раз и позволяет указывать на сайте информацию, актуальную для региона пользователя.

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

Сопособы определения адреса по IP

radarСпособов существует достаточно много, но мы рассмотрим лишь самые простые и распространенные. То, какой именно выбрать способ, зависит от множества факторов и конечно же от ваших предпочтений. Некоторые способы являются невероятно простыми, но при этом весь механизм определения адреса по IP будет зависеть от третьей стороны – сайта, предоставляющего услугу API.

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

HTTP API – простейший способ определения адреса по IP

Самым простым способом определения адреса пользователя по IP является HTTP API, любезно предоставляемый сторонними сервисами. Главными преимуществами такого способа является простота использования, отсутствие необходимости хранения большого количества данных на своем сервере. Более того, вам не нужно будет получать никакие ключи, настраивать API и т. д. Речь идет именно об HTTP API и все данные передаются по незащищенному соединению.

http-apiГлавным и, наверное, единственным недостатком данного способа является зависимость от третьей стороны. Ни для кого не секрет, что всегда нужно надеяться только на себя. Если же ваш сайт имеет большую посещаемость, а геолокация является его неотъемлемой частью, в случае проблем с работоспособностью третьей стороны, временно прекратят работу и ваши алгоритмы, что, согласитесь, не очень хорошо.

Но все же преимуществ больше, а для минимизации рисков, нужно просто выбрать надежный сервис, который не будет подводить. Одним из таких сервисов является FreeGeoIP, который, к слову, использует знаменитый GeoLite2, созданный в MaxMind. В API Google карт используется аналогичный сервис, поэтому перечисленные сайты можно с уверенностью считать достаточно надежными.

Пример запроса к FreeGeoIP по HTTP протоколу:

http://freegeoip.net/json/176.194.181.238

Данные при этом будут возвращаться в формате JSON и выглядеть следующим образом:

{"ip":"176.194.181.238","country_code":"RU","country_name":"Россия","region_code":"BEL","region_name":"Белгородская область","city":"Белгород","zip_code":"308001","time_zone":"Europe/Moscow","latitude":50.61,"longitude":36.58,"metro_code":0}

Также можно использовать и другие шаблоны:

http://freegeoip.net/csv/176.194.181.238
http://freegeoip.net/xml/176.194.181.238

В таком случае данные будут возвращаться в формате CSV и XML соответственно.

Самым главным моментом в этом способе является получение широты и долготы (latitude и longitude), которые нам потребуются для вывода на экран карты Google или Яндекс с полученным адресом.

Собственная база IP адресов

Установка базы IP адресов на свой сервер позволяет полностью исключить зависимость от третьей стороны и выполнять все вычислительные операции локально. Это и является гланым преимуществом данного способа.

ip-databaseОднако, есть довольно много недостатков, которые могут заставить усомниться в целесообразности данного решения. Главный недостаток – найти и скачать хорошую базу IP адресов довольно проблематично, особенно если речь идет о бесплатном скачивании.

На «Хабре» есть статья 2013 года с русскоязычной GeoIP базой данных стран и городов, которая на данный момент немного устарела (хоть к ней и прилагается обновление), а усердные поиски достойной альтернативы ни к чему действительно интересному не привели.

Возвращаясь к сервису, обладающему лучшей на данной момент базой IP адресов, можно сказать, что они предоставляют услугу, называемую «GeoIP2 Downloadable Databases», но услуга, к сожалению, является платной, а стоимость базы в долларах при нынешнем курсе делает цены практически неподъемными, а вместе с этим и целесообразность установки базы адресов на свой сервер ставится под сомнение в целом.

Отображение адреса на карте Google или Яндекс

Иногда, после того, как адрес уже определен, можно просто вывести его на экран в текстовом виде, например, Россиия, Москва, а можно и показать этот адрес на карте. Все зависит от задач и целей, которые преследуются на сайте или в приложении.

Как ни странно, Google и Яндекс предоставляют разработчикам возможность встраивания карт на сайт с использованием API (не путать с конструкторами карт, в которых изначально задается конкретный адрес в качестве начала координат).

API Google и Яндекс карт позволяет подставлять необходимые значения и принимать их за начало координат, что собственно и требуется в рамках этой статьи.

Использование API Google карт

google-mapsВ первую очередь, хотелось бы рассмотреть API Google карт, т. к. этот сервис считается более мощным, чем аналогичный, предоставляемый «зеркалом рунета» (речь о Яндексе).

Для разработчиков Google создал специальный раздел, называемый «Google Maps Javascript API». Вам нужно получить ключ и встроить полученный код на свой сайт, внимательно изучив документацию.

Пример кода, отвечающего за отображение нужного места карты довольно прост. Как видно из примера, переменная center отвечает за то, какая область карты будет считаться началом отсчета. Эта переменная принимает два значения, с помощью которых можно с точностью определить нужный адрес на карте – широта и долгота. Эти значения мы получали в примере чуть выше в формате JSON, обратившись по HTTP к API бесплатного сервиса FreeGeoIP.

function initMap() {
	// Create a map object and specify the DOM element for display.
	var map = new google.maps.Map(document.getElementById('map'), {
		center: {lat: -34.397, lng: 150.644},
		scrollwheel: false,
		zoom: 8
	});
}

Подставляем широту и долготу в функцию initMap() и получаем местоположение пользователя в наглядном виде, на Google карте.

Использование API Яндекс карт

yandex-mapsИспользования API Яндекс карт для получения необходимого результата ничем не отличается от рассмотренного чуть выше аналогичного способа для Google.

Страница для получения всей необходимой информация, ключей и настроек – https://tech.yandex.ru/maps/jsapi/.

Во избежании недоразумений, перед установкой карт на свой сайт или приложение, рекомендуется внимательно ознакомиться с условиями использования API Яндекс карт.

Конфиденциальность данных

confidentialityВ большинстве случаев вы сможете определить адрес пользователя с точностью до города или населенного пункта. Точный адрес рассмотренные сервисы вам дать не смогут, т. к. данная информация является конфиденциальной.

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

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

Поэтому призываем вас соблюдать законы как в оффлайне, так и в сети и не слишком сильно надеяться на «анонимность» даже при использовании специальных прокси-серверов и т.д.





Предыдущая статья:
Правильная 404 ошибка – страница не найдена

Читайте также:
Оценка стоимости сайта - калькулятор стоимости от сервиса Telderi.ru

Возможно, вам это интересно:



Блог студии веб-дизайна «Make a Site».
Дизайн, верстка, программирование, наполнение и раскрутка сайтов.

Текущий проект: «Stream Booster» — раскрутка Twitch и YouTube каналов

Студия веб-дизайна «Make a site»