Переход от IP к геолокации с помощью Python


OR — Моя собственная SAAS без головы — часть 2

В своем предыдущем посте я описал, как я начал разрабатывать свой собственный SAAS и различные решения, которые мне пришлось принять.

Здесь я хочу показать вам, как я (и вы тоже можете!) разработал сервис IP-to-geo с помощью Python.

Справочная информация

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

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

Однако распределение IP имеет тенденцию меняться со временем, что затрудняет точное сопоставление IP с организацией или IP с местоположением.

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

В этом материале я буду использовать базу данных IP free компании Maxmind и покажу вам, как читать ее с помощью Python.
Обратите внимание, что база данных GeoLite — это бесплатная, ограниченная и неточная версия полной базы данных Maxmind, которая требует лицензии.

Кодируйте!

Если вам лень, вы также можете заглянуть в мой блокнот.

Давайте приступим:

  1. Зарегистрируйтесь в MaxMind
  2. Как только вы вошли, перейдите в раздел «скачать базу данных»:
  3. Далее прокрутите вниз и скачайте базу данных «GeoLite City». Убедитесь, что вы скачиваете GZIP, а не CSV-файл.
  4. Распакуйте и поместите файл .mmdb куда-нибудь рядом с вашим кодом.

Далее мы выполним несколько простых действий по кодированию.

Для чтения этой базы данных мы будем использовать собственную библиотеку Maxmind для python:

$ pip install geoip2
Вход в полноэкранный режим Выйти из полноэкранного режима

Мой файл geo.py выглядит следующим образом, и я полагаю, что он довольно прост:

import geoip2.database

# Open the database file, the location of the database needs to match your setup
with geoip2.database.Reader('./files/GeoLite2-City.mmdb') as reader:

    # Query for a specific IP
    response = reader.city('90.190.169.0')
    print(f"Continent: {response.continent.names['en']}")
    print(f"Country: {response.country.names['en']}")
    print(f"City: {response.city.names['en']}")
    print(f"Coordinates: Lat {response.location.latitude} Long {response.location.longitude}")
    print(f"Timezone: {response.location.time_zone}")
Войти в полноэкранный режим Выход из полноэкранного режима

В приведенном выше примере я просто распечатываю некоторые данные, полученные из базы данных Maxmind, но я могу сделать гораздо больше, например, сохранить их в своей БД, использовать для логирования, проверки пользователей, предотвращения кибератак и т.д.


Вы планируете добавить в свое приложение возможность определения местоположения по IP?
Если да, то вы определенно можете пойти вперед и приобрести файл базы данных IP-to-geo от Maxmind (или любой другой фирмы) и внедрить его в свой код.
Преимущества такого подхода в том, что вы получаете надежное и независимое приложение.
Недостатки такого подхода в том, что вам придется покупать лицензию независимо от использования, и вам придется постоянно следить за тем, чтобы файл базы данных постоянно обновлялся в вашей кодовой базе.
Это требует еще одного (микро)сервиса для разработки, поддержки и мониторинга.

Другая разумная альтернатива — использовать API-сервис для запроса IP-адресов к местоположению.
Если вы рассматриваете такой подход, обязательно ознакомьтесь с моим собственным сервисом tooltap.app.


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

Оцените статью
devanswers.ru
Добавить комментарий