Ваш Интернет IP-адрес: 100.26.176.182 | Здесь будет информация о Вашем локальном IP-адресе, а эта строчка будет заменена. | Вы IT-шник? А знаете как определить IP-адрес пользователя в локальной сети используя HTML5 и JavaScript? Возможно Вам так же будет интересно чем может закончиться суд по иску программиста к "IT-компании" по поводу незаконного увольнения на примере ООО "Софт Навигатор" в городе Иваново.

PHP скрипт определения названия города и региона через IP адрес через запрос к серверу IpGeoBase

У сервиса IpGeoBase с 22 ноября 2019 по 25 ноября наблюдались проблемы - сервис висел. В результате чего определение IP адреса не работало и скрипт находящийся сейчас в втором листинге приводил к подвисанию ответа сайта примерно на 5 секунд. За несколько лет наблюдений за IpGeoBase это первое такое провисание. Тем не менее будет рассмотрен вариант использования какого либо аналогичного сервиса и скрипты будут доработаны для избежания зависаний на случай если проблемы у сервисов повторятся. Так же в листинге ниже представляю вариант определения geo встроенными классами Bitrix без использования IpGeoBase.

Так же 25 ноября пробовал собрать свою базу из нескольких доступных в Интернет(использовал https://apps.db.ripe.net/db-web-ui/api/whois/search?abuse-contact=true&ignore404=true&managed-attributes=true&resource-holder=true&flags=B&offset=0&limit=20&query-string=88.85.172.134 и гео класс встроенный в Bitrix) столкнулся с ситуацией, что в разных базах может быть разная информация о стране IP адреса, так например для IP-адреса 55.55.12.16 SupexGeo в Bitrix считает что страна США, а ripe.net что США. Тем не менее то что получилось доступно по адресу https://blog.ivru.net/geo/?ip=88.85.172.134, не торопитесь использовать поскольку названия полей как и адрес этого API может быть изменён. На текущий момент это бета версия.

PHP скрипт определяет информацию по текущему IP адресу клиента выполняющего запрос к серверу PHP.

Есть ещё вот такой URL для получения информации о IP адресе в формате JSON http://ipinfo.io/185.252.144.107/geo (для указанного IP адреса информация определена не корректно, на самом деле этот IP адрес относится к Финляндии, арендуется Российским хостинг оператором)

Ещё есть API от 2ip.ua, но бесплатно по ним только 10 запросов в день, адреса api https://api.2ip.ua/provider.json?ip=88.85.172.134 и https://api.2ip.ua/geo.json?ip=88.85.172.134 на скрине ниже пример данных которые возвращают указанные API. Для IP адреса 88.85.172.134 информация о городе возвращена не совсем корректно. Область указана верно - Ивановская, а вот город, который указан как "Гаврилов Посад" - указан не верно. Откуда взята данная информация не понятно, например tracert показывает адрес pppoe-landeh-88-85-172-143.ivnet.ru, то есть якобы IP относится к городу Верхний Ландех, который так же находится в Ивановской области и эта информация так же не корректна. На самом деле IP адрес является статическим и относится к городу Фурманов(так же Ивановской области).

2ip.ua пример работы JSON API получения гео информации и информации о провайдере

Ещё в репозитории REMI для CentOs 7 можно выполнив команду yum install php-pecl-geoip установить стандартную штуку для работы с GEO в PHP. По идее работать с ней можно например следующим образом: var_dump(geoip_record_by_name($_SERVER["REMOTE_ADDR"])); как именно пока не выяснил, поскольку кроме установки указанной библиотеки ещё требуется скачать базу данных с адресами, чего я пока не делал. Предположительно файл базы данных городов скачивается по ссылке https://dev.maxmind.com/geoip/geoip2/geolite2/

Создаем MySQL таблицу для хранения гео-информации о IP-адресе.

Класс для работы с гео-данными в bitrix (файл nikolaevevgeIpGeo.php)

Пример работы с классом nikolaevevgeIpGeo в bitrix.

Так же начал писать библиотеку определения географии по IP адресу для CMS Joomla, WordPress и Bitrix или без CMS.

Сейчас библиотека не поддерживает соединение с базой данных в отсутствии CMS. Для Wordpress Bitrix и Joomla уже работает, при этом скажу что это Beta версия и в планах доработка а так же создание документации по методам. Код библиотеки в листинге ниже обновлен 05.12.2019.

Предварительные тесты скорости работы библиотеки

Проведённые тесты скорости работы показали на joomla версии 3.9.19 и PHP 5.4.16 следующие результаты: запрос информации у серера ipgeobase примерно 0.12 секунды, первый запрос к базе данных используя фреймворк Joomla примерно 0.0072 секунды(имеется ввиду если фреймворк ещё не выполнял каких либо запросов к бд), если же запросы к базе через фраймворк уже выполнялись, то запрос информации о IP-адресе из базы даных примерно 0.00055 секунды, если выполнить повторый запрос информации о IP-адресе в рамках той же PHP сессии, то данные будут получены из массива библиотеки примерно за 0.000035секунды. Тесты проводились на виртуальном сервере(технология виртуализации KVM) 2 ядра Xeon 2.4 и 2 Gb оперативной памяти. Пинг от виртуального сервера на котором проводилось тестирование до ipgeobase составляет примерно 3 мс. При этом записей в таблице базы данных с IP-адресами к которой осуществлялись запросы было примерно 10 штук.

Комментарии

Если у Вас возникли вопросы, Вы можете задать их в форме ниже. В частности если Ваш вопрос по Bitrix и что то не получается - можно спросить. Ваш e-mail не публикуется, при этом я отвечу на него если будет что то по теме. Писать необходимо для людей - избегайте сленга, пишите орфографически правильно.

Имя:
E-mail:
Текст комментария:

Вы так же можете прочитать следующие статьи: