Методы определения местоположения пользователя
Время на прочтение
10 мин
Количество просмотров 164K
Предисловие
Всем, кто когда-либо занимался написанием систем авторизации/регистрации пользователей, наверняка приходилось задаваться вопросом: «А как узнать о пользователе больше информации?». Для чего это нужно? В большинстве случаев, для идентификации
именно этого
пользователя. Иногда — для предоставления каких-либо дополнительных возможностей и информации, в зависимости от различных социальных параметров, или, быть может, местополжения пользователя или региона проживания. Иногда, например, для проведения какого-либо скоринга. В этой статье речь пойдёт об определении географического положения пользователя.
Эффективные методы определения
Можно придумать массу методов получения георгафического положения пользователя интернета. И все эти методы будут обладать своим набором плюсов и минусов, будут более или менее эффективны, в зависимости от применения. Сейчас я опишу только те методы, которыми на данный момент пользуется проект, в котором я учавствую, т.е. те, которые я непосредственно использую. За время существования проекта по ним уже собралось достаточно статистики, из которой можно сделать некоторые выводы.
1. Данные из соц. сетей
На сегодняшний день крайне популярным стало использовать для авторизации (или в качестве дополнительной информации) аккаунты всевозможных социальных сетей и блогов, что позволяет использовать данные из них. Авторизовав пользователя таким образом, можно получить достаточно много информации о нём. Правда вот о достоверности её говорить не приходится, ведь многие указывают в соц. сетях не «действительное», а «желаемое», либо вообще первое, что пришло в голову. Отсеять подобные вещи обычно и есть основная задача для разработчика. Для этого необходимо получить информацию обо всех друзьях пользователя и сверить общие данные. Можно, например, найти наиболее часто встречаемое место проживания у коллег/однокурсников/одноклассников/друзей пользователя (в синей соц. сети, например, это делать очень удобно), и, на основе этих данных, выяснить настоящий регион, область, город и даже район города, где живёт/работает/учится пользователь.
Также, в некоторых соц. сетях, доступно получение непосредственных координат пользователя, если он онлайн. Точность этих данных, в некоторых случаях, оставляет желать лучшего, но, как минимум, район города, где находится пользователь, определить можно достаточно достоверно.
Плюсы:
- Относительно высокая точность, при использовании моделей скоринга на основе данных друзей
- У большинства пользователей есть аккаунты в соц. сетях
- Можно проверить полученные данные на достоверность, используя данные друзей
Минусы:
- Сложность реализации, т.к. необходимо изучать API нескольких соц. сетей, составлять и реализовывать модели для анализа полученных данных
- Необходимость в наличии действующего аккаунта в соц. сети у пользователя (я считаю, что, несмотря на распространённость, требовать подобные данные от пользователя, всё же, нельзя)
- Низкая скорость работы, если учитывать анализ с использованием данных друзей
Реализацию, к сожалению, предоставить не могу ибо «секрет фирмы».
2. Данные GeoIP
Наверное, самый простой и доступный каждому способ, однако, для РФ на сегодня, зачастую неточный.
Почему?
Дело в том, что на данный момент большинство существоваших ранее провайдеров регионального уровня было раскуплено и поглощено операторами федерального уровня. И чем же это плохо? А вот чем. Представьте себе ситуацию — в городе «Н» существовало 5 мелких провайдеров. Каждый работал в своём районе города, и соответственно, имел свой пул IPv4 адресов. И даже динамически выданный «белый» IP можно было примерно привязать к определённому району города. Теперь приходит провайдер федерального уровня и покупает все 5 мелких провайдеров с их пулами адресов. Затем он приводит их сеть к некоему общему виду всех сетей этого федерального провайдера. Что мы имеем в итоге? У этого федерального провайдера есть огромное количество клиентов и огромное количество пулов IP, используемых, в зависимости от потребностей, в том или ином регионе. Тоесть теперь адрес, принадлежавший ранее пулу мелкого местного провайдера, может быть выдан клиенту из совершенно другого города, просто потому, что этот пул адресов теперь используется для всех клиентов этого провайдера. А вот сообщать кому и из какой области выдан этот IP никто, естественно, не будет. Тем более, что завтра он может быть выдан ещё кому-то.
Также, никто не помешает пользователю использовать, например, прокси или VPN для выхода в интернет от имени другого IP. В этом случае GeoIP становится абсолютно бесполезным, ибо получит информацию именно об этом прокси или VPN-сервере. То же самое происходит, если провайдер предоставляет своим клиентам доступ в интернет через NAT (а в свете проблем с количством свободных IPv4 адресов это встречается всё чаще и чаще), правда в этом случае, обычно, хотябы можно получить район, область или город.
Такчто полагаться полностью на данные GeoIP всё-таки можно не всегда, хотя этот способ очень удобен — ведь мы получаем информацию практически мгновенно. Для этого, обычно, используется заранее скачанная локальная база данных.
Плюсы:
- Легко использовать, есть множество реализаций на различных языках
- Высокая точность (за некоторым исключением, см. выше)
- Быстрота работы (практически мгновенное получение результата — ведь это всего 1 запрос к базе)
Минусы:
- Необходимость поддерживать базу IP в актуальном состоянии
- Отсутствие возможности проверить достоверность полученных данных (только запросами к нескольким базам)
- Достаточно большой процент ошибочных данных для РФ на данный момент (см. выше)
Описывать «как это сделать» смыла особого не вижу, ибо в сети, и, в т.ч. на хабре, полно подробных описаний. Для получения данных GeoIP существует множество бесплатных библиотек и инструментов. Например, для PHP можно использовать расширение geoip.
3. Использование JavaScript Geolocation API
Достаточно полезный и эффективный метод, но только для мобильных устройств. В случае же со стационарным компьютером — полезен не более чем GeoIP. Дело в том, что в случае мобильного устройства (современный смартфон, планшет и т.д.) будут использоваться все доступные для этого устройства и разрешённые пользователем средства определения местоположения, включая позиционирование по GPS, Wi-Fi и данным от вышек сотовой связи. А вот в случае с домашним ПК, у которого, в большинстве случаев, нет ни мобильной сети (в случае наличия GSM/3G модема данные от него не используются), ни GPS, мы сможем узнать только данные GeoIP, которые нам радостно и сообщит JS. А по поводу их точности я уже писал выше. Хотя, пренебрегать данным способом я бы не стал — ведь всё большее количество людей используют планшеты и телефоны для выхода в интернет.
В итоге данный способ имеет достаточно узкий спектр применения — мобильные устройства. Или если достаточно примерных данных по GeoIP.
Плюсы:
- Легко реализовать, множество документации и примеров в интернете
- Точный, т.к. может использоваться как позиционирование по сотовым вышкам, Wi-Fi, GPS
- Быстрый, т.к. для определения положения используется ПО со стороны клиента
Минусы:
- На домашних ПК поддерживается не во всех браузерах
- Требует разрешений пользователя
- Фактически, применим только к мобильным устройствам
- Относительно легко подделать данные
Примеры реализации можно посмотреть здесь или здесь.
4. Определение через услуги типа «локатор» от мобильных операторов
Я думаю, некоторые из читающих слышали про эти услуги, кто-то даже пользуется ими, а кому-то приходится их использовать в корпоративной среде. Я говорю об услугах, подобных «Локатор»’у от «яичной» компании и «Координатам» от жёлто-полосатой. Да, эти услуги изначально предназначены для конечных пользователей, но… Что мешает использовать их нам? Положительных моментов при использовании этого способа немного, зато каких — это высокая точность и почти 100% достоверность данных. Зато есть неприятные моменты. Во-первых — эти услуги платные. Во-вторых — необходимость использования номера мобильного телефона при регистрации и требование отправить бесплатную смс на короткий номер… Такое поведение может отпугнуть многих. Да и время получения информации по смс немалое (в рамках веб-приложения). Но, в некоторых случаях, информация подобного рода, да ещё и достоверная, просто необходима. Тем более что этот метод можно использовать как замену подтверждения кодом из смс какого-либо действия. Да и подделать информацию, получаемую таким способом, практически невозможно.
Пример рабочей реализации приводить не буду по тем же соображениям, что и в первом случае, но вкратце опишу как это делается чуть ниже.
Плюсы:
- Высокая достоверность данных, почти 100%
- Высокая точность, вне зависимости от испоьзуемого устройства и способа выхода в интернет
- Автоматически подтверждает номер мобильного телефона
Минусы:
- Сложность в реализации и поддержке
- Низкая скорость, т.к. требуется время на отправку/приём смс и ответ от пользователя
- Не бесплатен (тарифы у операторов на эту услугу весьма «прожорливые»)
- Необходимо согласие пользователя
Как сделать
Нам понадобятся:
- Старый моб. телефон с кабелем, либо 3G/GSM модем, по одному на каждого оператора
- Сим карты этих операторов
- Некий ПК, желательно с *nix на борту (можно и Windows с cygwin), который будет выполнять функцию эдакого «гео-шлюза»
- Немного терпения и времени
- smstools3
1) В зависимости от ОС, инструкции могут отличаться, но общий смысл неизменен — необходимо скачать и установить из репозитория ПО пакет SMSTools
На Gentoo это выглядит так:
Если вам нужна статистика отправленных/полученных смс, то:
nogood-work ~ # echo "app-mobilephone/smstools stats" > /etc/portage/package.use/smstools.use
либо (если у вас все USE-флаги в одном файле):
nogood-work ~ # echo "app-mobilephone/smstools stats" >> /etc/portage/package.use
Затем ставим из портажа сам smstools:
nogood-work ~ # emerge -v smstools
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild N ~] app-mobilephone/smstools-3.1.15 USE="-stats" 0 kB
...
nogood-work ~ #
На FreeBSD так:
root@kenny:/usr/ports # cd /usr/ports/comms/smstools3
root@kenny:/usr/ports/comms/smstools3 # make install clean
Для статистики в опциях просто выбрать «STATS»
Можно собрать и из исходников, если для вашей системы нет готового пакета:
nogood-work ~ # wget http://smstools3.kekekasvi.com/packages/smstools3-3.1.15.tar.gz
nogood-work ~ # tar -zxvf smstools3-3.1.15.tar.gz -C /usr/local/src
nogood-work ~ # cd /usr/local/src/smstools3
nogood-work ~ # make
nogood-work ~ # make install
2) Подключаем модем(ы) и проверяем появились ли устройства последовательного порта в /dev
Для Gentoo:
nogood-work ~ # ls /dev |grep ttyUSB
ttyUSB0
ttyUSB1
ttyUSB2
nogood-work ~ #
Может появиться несколько портов. Обычно нас интересует ttyUSB0, если модем 1. Если больше — то подключаем по очереди. И вот перый из появившихся портов наш.
Для FreeBSD:
root@kenny:~ # ls /dev |grep cuau
cuau0
cuau0.init
cuau0.lock
cuau1
cuau1.init
cuau1.lock
root@kenny:~ #
Смысл тот же — первый из нескольких появившихся — наш.
3) Настраиваем SMSTools
smsd.conf может находится как в /etc/ так и в /usr/local/etc/ в зависимости от вашего дистрибутива. Приводим его к подобному виду:
#Список активных "модемов". Если вы планируете использовать
#несколько операторов, то, соответственно, перечисляем здесь
#модемы для каждого оператора, у меня только для одного
devices = GSM1
#Куда писать логи. Если закомментировать то по-умолчанию
#пишет в syslog. Но в этом случае не получится использовать
#такую классную вещь, как smart_logging.
logfile = /var/log/smsd/smsd.log
#Уровень ошибок.
loglevel = notice
#Хранить входящие в UTF-8. Работает не со всеми модемами, но лучше включить
incoming_utf8 = yes
#Записывать историю перекодировок в логах. На всякий случай включаем.
log_charconv = yes
#Наличие даты в имени файла. Вообще кому как удобно,
#но с этой опцией файлы легче находить по времени
date_filename = 1
#Приоритет получения смс перед отправкой
receive_before_send = yes
#Очень полезная, на мой взгляд, функция. Суть в том, что в лог
#по-умолчанию пишутся сообщения с уровнем, указанным выше.
#А вот в случае ошибки создаётся файлик с изменённым именем
#из logfile вида <name>_trouble.log в который пишется всё с уровнем debug
smart_logging = yes
#Ну и настройка каталогов спулера
failed = /var/spool/sms/failed
sent = /var/spool/sms/sent
phonecalls = /var/spool/sms/calls
stats = /var/spool/sms/stats
#А вот настройка для модема. Лучше искать под конкретную модель.
[GSM1]
#Имя COM-порта
device = /dev/ttyUSB0
#Использовать ли для приёма СМС
incoming = yes
#Способ проверки памяти СМС. Подробности лучше глянуть на оф. сайте.
check_memory_method = 2
#Обязательно закомментить, т.к. иначе не видать нам русского языка
#decode_unicode_text = yes
#Могут понадобится для вашего модема. Вот это лучше погуглить.
#init = AT+CSCS="UCS2"
#init2 = AT+CSCS="UCS2"
#Автоматически собирать смс из нескольких частей. Крайне рекомендую.
internal_combine = yes
#Сбрасывать входящие звонки. А зачем они нам?
hangup_incoming_call = yes
#Скрипт для обработки событий. Содержимое будет ниже.
eventhandler = /etc/smsd/trsms.sh
#Скрипт для обработки USSD команд. Я не использовал, но можно
#использовать для получения остатка на балансе.
#eventhandler_ussd =
#Номер. Если будете использовать несколько модемов указывать надо.
#По нему определяется через какой модем отправлять смс.
number = 79185568942
#Что делать со входящими звонками - определять номер. Необязательно.
phonecalls = clip
#Отчёт о доставке. Нам не нужен.
#report = yes
#Для моего модема нужно было включить, чтобы небыло ошибок в логе.
signal_quality_ber_ignore = yes
4) Создаём файлик trsms.sh (обработчик событий)
#!/bin/bash
status="$1"
file="$2"
case "$1" in
RECEIVED)
header=`head -12 $file | grep -e "^From: " -e "^Sent: " -e "^Received: "`
from=`head -12 $file | grep -e "^From: " | awk '{print $2}'`
if grep "Alphabet: UCS2" $file > /dev/null > /dev/null; then
message=`tail -n +14 $file | iconv -f UCS-2BE -t UTF-8`
else
message=`tail -n +14 $file`
fi
#echo -e "$message" | mail -s "Incoming SMS from +$from" admin@yourhost.ru
echo -e "$headern$messagen" >> /var/log/smsd/sms.log
if echo $message | grep "Запрос на авторизацию отправлен абоненту" > /dev/null > /dev/null; then
abon=`echo $message | awk 'BEGIN{ FS = "абоненту " } $2 { print substr($2, 2, 11) }'`
echo -e "n> Запросt$abon" >> /var/log/smsd/location.log
fi
if echo $message | grep " находится по адресу " > /dev/null > /dev/null; then
abon=`echo $message | awk 'BEGIN{ FS = "Абонент " } $2 { print substr($2, 2, 11) }'`
adres=`echo $message | awk 'BEGIN{ FS = "адресу " } $2 { print substr($2,0,index($2, " в радиусе")) }'`
region=`echo $adres | awk 'BEGIN{ FS = ", " } $1 {print $1}'`
echo -e "n> Ответt$abont$adrestРЕГИОН: $region" >> /var/log/smsd/location.log
fi
;;
esac
Это пример с минимальным функционалом. Пишет в лог запросы и полученные ответы для «яичного» оператора. По-хорошему ещё надо добавить условие по номеру, с которого пришло сообщение, на основе переменной from. В нём же можно будет определять и оператора. Номера у разных операторов, как правило, разные.
Не забываем дать права на запуск пользователю, из под которого будет работать smsd.
5) Запускаем демон smsd и добавляем его в автозагрузку
Для Gentoo:
nogood-work ~ # /etc/init.d/smsd start
nogood-work ~ # rc-update add smsd default
Для FreeBSD:
root@kenny:~ # echo "smsd_enable="YES"" >> rc.conf
root@kenny:~ # service smsd start
Смотрим логи. Если всё хорошо и нет сообщений об ошибках, то переходим к следующему шагу.
6) Пробуем отправить смс на свой телефон
nogood-work ~ # sendsms 79xxxxxxxxx 'текст'
Если смс прошло успешно — можно пробовать отправить смс на заветный номер услуги с соответствующим текстом, а затем проверить логи.
Далее можно будет просто вызывать из вашего скрипта команду sendsms <номер> "<текст>"
и проверять, например, по крону наличие ответа по нужному номеру в файле с логами смс.
Заключение
Каждый из этих способов подходит для каких-то определённых целей и условий, и вам решать, что именно использовать. Конечно, здесь рассмотрены далеко не все способы определения местоположения. Я описал только те, что опробовал сам и считаю наиболее эффективными. Также, для достижения большей эффективности, я бы рекомендовал комбинировать их. Так это делается в нашем проекте. На этом всё. Надеюсь кому-нибудь данная информация окажется полезной.
Проверьте доступность домена
Проверьте, доступно ли доменное имя для регистрации или нет, с помощью нашего инструмента поиска доменов.
Найти владельца домена и информацию о нем
Используйте информационный инструмент WHOIS, чтобы узнать владельца домена, местоположение, ip-адрес и другую информацию.
Узнать срок действия домена
Ищете доменное имя, на которое вы хотите претендовать? Узнайте, когда срок действия домена истечет, с помощью наших инструментов whois и поиска.
Как мне найти географическое местоположение веб-сайта?
Используйте наш инструмент для привязки домена к местоположению только для определения IP-местоположения доменных имен. Если вы хотите выполнить поиск IP-адреса и определить местоположение IP-адреса, пожалуйста, используйте наш инструмент для привязки IP к местоположению или более сложный поиск по IP и поиск по Whois.
Поиск местоположения веб-сайта.
Проверьте географическое местоположение, в котором был размещен веб-сайт, и получите подробную информацию, такую как город, страна и регион.
Поиск местоположения домена или веб-сайта.
Наш инструмент определения местоположения веб-сайта полностью бесплатен в использовании, и мы не сохраняем какие-либо ваши данные на наших серверах.
Что такое поиск местоположения домена?
IP-адрес или интернет-протокол — это метод, с помощью которого данные отправляются с компьютера с другого компьютера в Интернете, каждое устройство должно иметь хост, который, по крайней мере, имеет уникальный IP-адрес, а также домены, каждый домен в Интернете должен иметь IP-адрес.
Как мне найти местоположение IP-адреса или домена?
Чтобы найти местоположение IP / домена, вы можете использовать инструменты поиска IP и определения местоположения домена.
Кто размещает веб-сайт?
Узнайте, кто размещает ваш или чей-либо другой веб-сайт. Получите информацию об IP-адресе веб-сайта, серверах имен и многом другом.
Найди меня
Как определить местоположение посетителя сайта
Предугадывать желания клиента уже недостаточно — теперь хорошо бы знать заранее, где он находится. Для этого придется немного пошпионить. Чего не сделаешь, чтобы повысить качество пользовательского опыта. Хорошая новость: клиенты сами не против делиться своим местоположением, если понимают, в чем польза. Расскажем, кому и зачем нужна геолокация посетителей сайта, какими способами ее добыть на десктопе и мобильных, и как не заблудиться в процессе.
Каким сайтам необходима геолокация пользователей
Геолокация гостей сайта — хлеб насущный для всей электронной коммерции. Особенно если речь о компаниях с филиалами в нескольких регионах. Опираясь на местоположение пользователя, сайт показывает только релевантную информацию: контакты офисов в его городе, наличие товара на складе, ближайшие пункты выдачи, цены на товары и доставку с учетом региона и т. д.
Для бизнеса, который расположен только в одном городе, нужна более точная локация пользователя — в идеале адрес, но подойдет и примерный радиус. Так можно быстро выдать список удобных точек, в которых есть выбранный товар. Например, подсказать, из какой аптеки поблизости забрать заказ.
Без геолокации не обойтись: агрегаторам и информационным порталам, которые помогают найти ближайшие магазины, рестораны, кинотеатры и другие объекты; такси и курьерским доставкам.
Конечно, можно просто попросить клиента указать свой адрес вручную. Но автоматизация процесса делает опыт взаимодействия с вашим сайтом приятнее.
Варианты определения геолокации посетителя страницы
Чем меньше пользователь сделал кликов на сайте, тем он довольнее. Поэтому самым идеальным вариантом определения был бы автоматический. Если бы такой способ обладал высокой точностью, то превратился бы в страшный сон параноика — кликаешь по ссылке, а на другом конце знают номер твоего дома.
Несмотря на big data и то, что корпорации уже знают про нас больше, чем мы про себя сами, приватность геолокации пока свято охраняется. Это не прихоть отдельных компаний, а международный стандарт. Поэтому без согласия пользователя доступен только один автоматический вариант — определение локации по IP. Он же — самый приблизительный из возможных.
Все, кто угрожает оппонентам в комментариях вычислить их по IP, лукавят. Таким образом, по открытым данным, можно определить только регион или город гостя страницы. Но и тут иногда бывают осечки.
Как работает автоматическая геолокация по IP
IP-адрес — это уникальный адрес в определенной сети. Когда пользователь переходит на сайт, в качестве его IP-адреса выступает IP-адрес провайдера, через которого он зашел в интернет. Существуют базы IP-адресов, в которых информация об адресах связана с их предполагаемым местоположением. Сайт с определением локации «на входе» автоматически обращается к этой базе, а она в ответ предполагает регион или город посетителя. В некоторых случаях система ошибается, например, если у пользователя включен VPN. Поэтому лучше перестраховаться и спросить, правильно ли вы определили город, а также добавить опцию выбора из списка.
Отлично, если вы объясните, зачем вообще задаете такой вопрос. Так делают редко, но те, кто делают — молодцы.
Сразу указали, что от региона зависит стоимость. Полезно: посетитель сразу понимает, что ваш интерес не праздный
Если не разобраться сразу с городом, то клиент может увидеть телефоны из другого региона или обмануться наличием товара на складе. В таком случае он либо просто уйдет, либо запутается и расстроится.
Стоит ли пользоваться встроенными модулями для CMS
Для автоматического определения локации предлагают встроенные модули почти для всех CMS. Например, множество вариантов для Битрикс. Обещают пользу и удобство, но по факту такой модуль может сломать вам сайт. Даже если технически всё будет безопасно, то одним плагином вы все равно не обойдетесь. Понадобится интерфейс для подтверждения города и его замены; прописанная логика поведения сайта для разных городов — иногда нужно поменять только телефоны и адреса, а иногда — содержание большей части страниц. Без программиста всё это не организовать.
Определение локации по данным Geolocation API
Теперь мы выходим на дорогу данных, которые без разрешения пользователя не получить. Автоматически более точные данные о местоположении не передаются, посетитель сам должен «подписаться» под тем, что не возражает поделиться своей геолокацией.
Пользоваться этой технологией можно и с десктопа, но особой точности не ждите. Ноутбук или стационарный компьютер обычно сами не знают о своем местоположении, поэтому согласие пользователя мало что изменит — передавать-то особо нечего. Вы получите примерно те же сведения, что и при автоматическом определении по IP.
Все свои возможности Geolocation API раскрывает только с мобильного устройства (подойдет смартфон или планшет). Здесь при получении согласия посетителя, вы сможете определить его геолокацию с точностью до дома. Вариантов «вычисления» координат несколько — через вышки сотовой связи поблизости (Cell ID), по данным от WIFI или GPS. Чтобы получить максимально точную геопозицию пользователя, имеет смысл проверять данные по убыванию точности:
Сначала GPS. Если у пользователя он включен или сохранились актуальные данные о местоположении, то локация определяется именно так. Точность на высоте — GPS делится конкретными координатами пользователя, а не пытается угадать, где же он.
Включен Wi-Fi — адрес вычисляется по его положению. Запрос идет к базам данных Wi-Fi. Точность ниже, чем в первом варианте. Локацию можно определить в радиусе 100 метров.
Мобильные станции помогают, когда нет других данных. Упор тоже на базы вышек мобильной связи. Здесь радиус еще шире — около километра.
IP-адрес выручает, если с данными совсем скромно. Вы получите очень приблизительную догадку о том, где базируется посетитель сайта — город или (если повезет) район.
Подвох с Geolocation API в одном: надо сделать так, чтобы пользователь захотел поделиться этими данными с вами. Важно дать посетителю сайта понять, что вы не просто из любопытства проверяете, где он отсиживается, а хотите таким образом облегчить его жизнь. Помогут несколько советов.
Не запрашивайте локацию сразу же после перехода на сайт. Человек только заглянул к вам, еще не понял, что происходит, а вы уже с порога: «ну, давай, выкладывай свой адрес». Такие настойчивые попытки сблизиться отпугивают. Скорее всего посетитель на автомате нажмет отказ.
Рив Гош посылает запрос автоматически при переходе на сайт. Пользователь еще даже не успел познакомиться с товаром
Задавайте вопрос о геолокации в контексте, полезном пользователю. Если посетитель пока просто читает статью, не стоит атаковать его запросами.
Аптека пытается узнать локацию посетителя, пока тот читать статью про боль в горле
К геолокации стоит обращаться, когда клиент совершает действие, в котором она будет полезна. Например, переходит к выбору пункта выдачи заказа из корзины. Тут-то вы ему сразу и намекнете, что если маякнуть свое расположение, то возиться с адресом не придется, все ближайшие точки как на ладони.
ПроАптека отправляет запрос на геолокацию только из корзины, а потом показывает все ближайшие точки выдачи заказа
Отказов будет меньше, если вы разместите очевидную кнопку, например «найти меня» или «найти поблизости». Нажав на нее, пользователь сам совершит действие, говорящее о том, что он заинтересован передать вам свой адрес.
Аптека по умолчанию предлагает выбрать из списка пунктов, а для более точной локации — нажать на кнопку в правом нижнем углу
А вот более очевидный вариант
Обязательно давайте возможность ввести адрес вручную. Даже самые точные варианты определения локации могут дать сбой. Если вы не дадите легкую возможность исправить адрес или найти себя на карте самостоятельно, то можете потерять клиента на этапе оформления заказа.
Чтобы проще реализовать ввод адреса, пользуются API карт, чаще всего Яндекса или Гугла, или специальными базами данных — например, ДаДата. Так пользователь сможет найти себя на карте, указать точку или подобрать нужное место.
BoxBerry предлагает найти на карте подходящий пункт
От браузера к более mobile-friendly решению: геолокация в PWA
Самый «родной» инструмент для определения геолокации — мобильное приложение. Пользователю удобно и просто ориентироваться в интерфейсе, а вам достаточно получить разрешение всего один раз. Но создать приложение, а потом привлечь туда достаточную аудиторию — это задача со звездочкой. Если вы хотите сэкономить себе время, нервы и деньги, но при этом попробовать что-то более mobile-friendly, чем обычный браузер, — знакомьтесь с PWA.
PWA (Progressive Web App) — технология, позволяющая по сути преобразовать ваш сайт в приложение. А установить его потом можно прямо из браузера, минуя магазины с их требованиями и ограничениями.
При переходе на ваш сайт посетитель увидит призыв установить PWA. Сделать это можно в один клик.
Гугл предлагает установить PWA для разработчиков
После установки у пользователя появится ярлык на рабочем столе, он сможет получать уведомления, а вы получите доступ к аппаратным средствам гаджета. Технология кроссплатформенная, поэтому вы создаете одно приложение, подходящее сразу для всех устройств и операционок.
Запрос для определения геолокации идет к тем же данным, что и в нативном приложении из магазина.
С технологией PWA работают крупные мировые бренды, периодически отчитываясь о повышении конверсии. Например, почитайте кейс Lancome или посмотрите видеоотзыв с результатами от Forbes.
Выделим аргументы «за» и «против» PWA.
Итоги: какой вариант определения геолокации выбрать
Сегодня мы поговорим о том, как сделать геолокацию по IP адресу на сайте, т.е. определение местоположения посетителей, при этом я расскажу, наверное, о самом простом способе реализации этой задачи, который подходит разработчикам.
Начну я с вопроса, а зачем вообще нужен такой функционал на сайте?
Содержание
- Зачем нужно определять местоположение посетителей?
- Как определять местоположение посетителей?
- API геолокации по IP адресу – обзор сервиса IPWHOIS.IO
- Как работать с IPWHOIS.IO?
Зачем нужно определять местоположение посетителей?
Большинство современных сайтов, в частности интернет-магазины, сервисы и даже обычные корпоративные ресурсы ориентированы на достаточно большую аудиторию, которая нередко располагается по всему миру. При этом для каждой страны сайт должен отображать соответствующий контент, например, язык, цены, валюту и многое другое. Даже относительно одной страны, контент для каждого региона достаточно часто нужно отображать разный. Допустим, у того же самого интернет-магазина может быть несколько филиалов, которые расположены в разных регионах, и чтобы посетителю показывать наличие товаров в филиале, территориально относящемуся к конкретному посетителю, нужно знать местоположение этого посетителя.
Также определять местоположение посетителей требуется и для фильтрации трафика, например, чтобы отфильтровать ботов или нежелательный трафик.
Таким образом, геолокация на сайте нужна для того, чтобы настроить отображение контента в зависимости от местоположения посетителя или фильтрации трафика.
Как определять местоположение посетителей?
Существует несколько различных способов определения местоположения по IP адресу, сегодня я расскажу о способе, который подходит разработчикам, ведь он подразумевает использование API, т.е. программного интерфейса, в нашем случае интернет сервиса. К основным плюсам такого способа можно отнести:
- Простота интеграции функционала в свое приложение;
- Отсутствие необходимости настраивать локальные библиотеки GeoIP.
Во многих популярных CMS, включая и WordPress, и Joomla, есть различные плагины, модули и компоненты, которые, так или иначе, используют данные о местоположении посетителя. Функционал в подобных компонентах и плагинах в большинстве случаев как раз и использует API интерфейс для определения местоположения посетителя. Поэтому если Вы хотите реализовать свой виджет, плагин, модуль или компонент, который должен работать с данными геолокации, то использование API будет наиболее простым решением.
Принцип использования API для реализации геолокации следующий: Вы определяете IP адрес посетителя, затем делаете обычный GET запрос к интернет сервису, который позволяет определять местоположение по IP адресу, и у которого есть API интерфейс, а в качестве параметра Вы как раз и передаете IP адрес посетителя. В ответ он Вам возвращает данные о геолокации, обычно в формате XML или JSON, Вам, в свою очередь, остается обработать полученные данные.
API геолокации по IP адресу – обзор сервиса IPWHOIS.IO
Теперь давайте поговорим о сервисах, у которых есть интерфейс, позволяющий определять местоположение по IP адресу, точнее, сегодня я хочу рассказать Вам всего об одном таком сервисе – это IPWHOIS.IO, основная функция которого – это как раз API геолокации по IP адресу.
Основные особенности IPWHOIS.IO:
- Обновление данных в режиме реального времени – Вы всегда будете получать только актуальную информацию, при этом самостоятельно Вам ничего не нужно обновлять;
- Быстрая работа — серверы IPWHOIS.io расположены по всему миру, что позволяет обрабатывать запросы максимально быстро;
- Безопасная работа – взаимодействие с сервисом происходит по защищенному протоколу HTTPS;
- Поддержка IPv4 и IPv6 – в качестве параметра Вы можете предавать адреса и IPv4, и IPv6;
- Поддержка JSON, XML и Newline – сервис может возвращать данные в нескольких форматах на Ваш выбор, это может быть JSON, XML или Newline;
- Доступно бесплатное использование – сервис позволяет обрабатывать до 1000 запросов в день абсолютно бесплатно, если у Вас небольшой проект, то Вам за использование этого сервиса даже платить не нужно.
Как работать с IPWHOIS.IO?
Сейчас давайте я покажу, как происходит взаимодействие с этим сервисом. Кстати, этот сервис Вы можете использовать и для простого определения местоположения по IP адресу, иными словами, если Вам нужно получить информацию об IP адресе, т.е. геолокацию, Вы можете зайти на IPWHOIS.IO, ввести нужный IP адрес и в ответ получить всю необходимую информацию. Для начала давайте я покажу, как это делается, т.е. как узнать местоположение по IP адресу, разработчики таким способом могут просто проверить работу сервиса.
Переходим на сайт сервиса https://ipwhois.io/ и вводим в специальное поле нужный IP адрес. По умолчанию отображается информация о Вашем IP адресе, другими словами, чтобы получить информацию о Вашем собственном местоположении по IP адресу, достаточно просто перейти на сайт этого сервиса.
Для того чтобы узнать местоположение по какому-то чужому IP, как я уже сказал, вводим IP в поле и нажимаем кнопку поиска.
Чтобы получить точно такую же информацию, но уже, например, в формате JSON можно послать следующий GET запрос
http://free.ipwhois.io/json/8.8.4.4
где
- free.ipwhois.io — адрес интерфейса, для бесплатного использования он такой;
- json – формат возвращаемых данных, если указать XML, то, соответственно, данные вернутся в формате XML;
- 8.8.4.4 – IP адрес, местоположение которого нужно узнать.
В данном случае в ответ Вы получите следующие данные (формат JSON):
{ "ip": "8.8.4.4", "success": true, "type": "IPv4", "continent": "North America", "continent_code": "NA", "country": "United States", "country_code": "US", "country_flag": "https://cdn.ipwhois.io/flags/us.svg", "country_capital": "Washington", "country_phone": "+1", "country_neighbours": "CA,MX,CU", "region": "Virginia", "city": "Ashburn", "latitude": 39.0437567, "longitude": -77.4874416, "asn": "AS15169", "org": "Level 3 Communications", "isp": "Level 3 Communications", "timezone": "America/New_York", "timezone_name": "Eastern Standard Time", "timezone_dstOffset": 0, "timezone_gmtOffset": -18000, "timezone_gmt": "GMT -5:00", "currency": "US Dollar", "currency_code": "USD", "currency_symbol": "$", "currency_rates": 1, "currency_plural": "US dollars" }
Что означает каждый из этих параметров, Вы можете найти в документации, если вкратце, то:
- ip — Запрашиваемый IP адрес;
- success — Статус операции;
- message — Сообщение в случае ошибки (success = false);
- type — Тип IP адреса (IPv4 или IPv6);
- continent — Название континента;
- country — Название страны;
- region — Регион;
- city – Город;
- isp — Имя провайдера;
- currency_code — Код валюты страны.
Как видите, сервис возвращает кроме данных о местоположении еще и дополнительную информацию об этом месте, например, используемая на этой территории валюта, что позволяет Вам автоматически определять валюту, которую необходимо использовать при взаимодействии с конкретным посетителем.
У меня все, надеюсь, этот сервис поможет Вам сделать геолокацию на сайте или в своем приложении, пока!
От определения региона до получения точного адреса.
Люди могут врать. Говорить, что пошли в гости к маме, а сами в это время едут на «Сапсане» в Питер по личным делам. Или «официально» быть в командировке, а на самом деле отсиживаться в соседнем доме. Также бывают ситуации, когда хорошо бы знать, где находится человек (к примеру, дома он или нет), а спрашивать его об этом как-то неудобно.
Чтобы узнать, где находится человек надо послать ему ссылку (письмом, по Skype, через Telegram) и сделать так, чтобы он по ней перешел (дополнить ее убеждающим текстом). Ведь когда мы заходим на некий сайт, то автоматически даем владельцу данные о своем IP-адресе (по которому вычисляется город) или точные географические координаты, если по неосторожности дадим разрешение на сбор информации о местоположении.
Разберем подробнее, как это работает.
Создаем сайт
Чтобы создать сайт для «разведки» не нужно платить деньги за хостинг. Подойдет любая блог-платформа, на которой можно редактировать html-код. Например:
- WordPress.com
- livejournal.com
- Blogger
Или бесплатный конструктор сайтов:
- Wix
- Yola
- Weebly.com
Естественно, если у вас уже есть сайт, то вы можете использовать его.
Вставляем на страницу код счетчика
1. Идем на metrika.yandex.ru и нажимаем на кнопку Добавить счетчик.
2. Придумываем имя для счетчика и указываем ссылку на сайт.
3. Проверяем настройки и следим, чтобы часовой пояс совпадал с нашим.
4. Проверяем включен ли Вебвизор.
5. Копируем html-код счетчика и вставляем его на страницу, ссылку на которую будем посылать в письме.
Как заинтересовать жертву?
У каждого человека есть индивидуальный круг предметов, которые трогают его за душу и не дают пройти мимо. Это могут быть котики, Звездные войны, автоматизирующие скрипты, ретроспективы или что-то другое. Но есть некоторые темы, которые интересуют всех:
- Собственная персона («Я тут в блоге про тебя написал, почитай пожалуйста»)
- Секс («Как думаешь интимные подробности в этом тексте не слишком шокирующие?»)
- Pokemon GO
Если привязать к ним ссылку, то скорее всего человек не поленится перейти по ней.
Что покажет Вебвизор?
Теперь на вкладке «Вебвизор» в Метрике нам доступна информация о каждом посетителе, который заходил на страницы, в которые встроен код. Для нашей ситуации лучше, если кроме жертвы на них никто ходить не будет и мы сможем с уверенностью утверждать, что это именно ее посещение. Если щелкнуть на кнопочку i в самом правом конце строки c отметками о конкретном заходе на сайт, то можно узнать:
- Операционную систему посетителя;
- Браузер посетителя;
- Страну и регион посетителя.
Метрика часто ошибается с городом. К примеру, я точно знаю, что посетитель из Чусового, а Вебвизор показывает, что он из Соликамска. Также данные бывают неверными, если жертва использует VPN.
Более точный способ
C помощью HTML 5 Geolocation API можно узнать точные координаты человека, если на его гаджете включен GPS. Чтобы посмотреть как это работает, перейдите по этой ссылке и разрешите сайту узнать ваше текущее местоположение:
тест
Проверить правильность координат, можно набрав их через запятую в поиске Яндекс.Карт. В моем случае (GPS MacBook) местоположение определилось с ошибкой в 5 метров.
Проблема в том, что эти координаты видны только самой жертве. Можно сделать так, чтобы они ajax-запросом записывались в базу данных или файл на сервере. Но для этого нужен платный хостинг с поддержкой PHP (на рельсах и ноде это тоже, наверное, получится) и немного опыта.
Любой владелец сайта может собирать данные об адресах посетителей (которые привыкли на все просьбы нажимать да), если достаточно сильно захочет. Автоматически преобразовывать координаты в реальные адреса можно с помощью Яндекс.Геокодера.
Но Такой способ выходит за рамки этой статьи. Нам нужно, чтобы владелец любой страницы на бесплатном хостинге мог узнать чужие координаты.
Поэтому применим социнженерию. Перейдите по этой ссылке и полюбуйтесь на феечек Винкс. Обратите внимание на то, что в левом нижнем углу мелким шрифтом написаны ваши координаты (если вы разрешили сайту узнать свое местоположение):
На снимке экрана, при приближении их можно легко прочитать. А человек, который делал этот снимок, скорее всего, их не заметит (на картинках иногда встречаются непонятные номера и это нормально).
Как получить от жертвы принтскрин?
Можно попросить показать, как в ее браузере смотрится сайт: «Представляешь, вставил в блог форму для проведения опроса, а у меня она не отображается, все проверил, должна работать. Скажи, ты ее видишь?» «Да? Cерьезно, не верю. Пришли принсткрин» или наоборот «Как не видишь? Да ты прикалываешься?». Или попросить показать «Как смотрится верстка при твоем разрешении экрана». Готовый рецепт дать сложно, все зависит от тематики сайта, текущей ситуации и ваших отношений с жертвой.
Есть шанс, что человек почует неладное, когда картинка с феечками попросит данные о местоположении. Лучше посылать человеку для создания принтскрина страницу «Обо мне» или «О компании», на которой будет карта с вашим адресом (ее можно создать с помощью конструктора карт). Нормально, когда Яндекс.Карты спрашивают о местоположении и всплывающее окно не вызовет подозрений.
Страницу на основе которой будет создан принсткрин с координатами можно создать на основе исходного кода этого примера. Посмотреть его можно нажав сочетания клавиш Command+U/Ctrl+U
Статьи на тему любительской разведки и сбора данных:
- Как извлечь максимум информации из детализации звонков
- Что интересного можно собрать, получив доступ к чужому браузеру на 5 минут
- Что интересного можно собрать, получив доступ к чужому Mac на минуту
- 12 способов разыскать владельца сайта и узнать все про него
- 9 сервисов для поиска информации в соцсетях
- 10 веб-сервисов для анализа фотографий
- 20 фишек, как узнать все про любой сайт
- 15 фишек для сбора информации о человеке в интернете
- Как снять девушку в сети
(3 голосов, общий рейтинг: 4.67 из 5)
🤓 Хочешь больше? Подпишись на наш Telegram.
iPhones.ru
От определения региона до получения точного адреса. Люди могут врать. Говорить, что пошли в гости к маме, а сами в это время едут на «Сапсане» в Питер по личным делам. Или «официально» быть в командировке, а на самом деле отсиживаться в соседнем доме. Также бывают ситуации, когда хорошо бы знать, где находится человек (к примеру,…
- хаки