Как получить географическое положение вашей системы из сценария Bash

Вы можете найти географическое местоположение удаленной системы Linux с помощью открытых API-интерфейсов и простого сценария bash. Геолокация сервера может помочь вам отслеживать его в физическом мире, гарантируя, что серверы расположены в региональных точках доступа.

Каждый сервер в Интернете имеет общедоступный IP-адрес. Он либо напрямую назначается серверу, либо назначается маршрутизатору, который отправляет трафик на этот сервер. IP-адреса дают нам представление о том, где находится этот сервер в мире. Мы можем получить эти данные о геолокации через два открытых API, предоставляемых ipinfo.co и IP Vigilante, и использовать их для просмотра города, штата и страны, связанных с сервером или другой удаленной системой. Это не дает вам точного местоположения по GPS; он просто позволяет вам видеть общую область IP-адреса.

Подключиться к удаленной системе

Вы будете запускать следующие команды на сервере Linux или других удаленных системах, которые хотите геолокатировать, поэтому сначала вы должны подключиться к серверу и получить доступ к оболочке на нем. Например, вы можете подключиться через SSH. Вы можете запустить команды в своей локальной системе, чтобы найти его местоположение, но вы, вероятно, уже знаете, где находитесь!

Установите curl и jq

Нам нужны два инструмента для доступа к API геолокации: curl для выполнения HTTP-запросов и jq для обработки данных JSON, которые мы получаем обратно. Откройте терминал и используйте apt-get для установки этих инструментов в системах на основе Ubuntu или Debian. В других дистрибутивах Linux используйте вместо этого инструмент установки пакетов вашего дистрибутива Linux.

sudo apt-get install curl jq

Найдите публичный IP-адрес сервера

Нам также понадобится общедоступный IP-адрес сервера, прежде чем мы сможем получить данные о геолокации. Используйте curl для вызова API ipinfo.io в окне терминала.

curl https://ipinfo.io/ip

Получить данные о местоположении из API

Теперь, когда у нас есть общедоступный IP-адрес сервера, мы можем позвонить в API ipvigilante.com, чтобы получить данные о геолокации. Заменить с адресом, который вернулся в предыдущей команде.

curl https://ipvigilante.com/

вывод из команды curl

Давайте подробнее рассмотрим, какие данные мы получаем в результате этого вызова:

метаданные, показывающие информацию о местоположении

API возвращает город, страну и континент, на котором находится наш сервер. Он также возвращает приблизительные координаты широты и долготы, если мы хотим нарисовать этот сервер на интерактивной карте. В нашем скрипте мы будем использовать «широту», «долготу», «название города» и «название страны». Команда jq понимает, как обрабатывать данные API и извлекать эти четыре поля.

Создание сценария для автоматизации вызова API

Мы можем создать скрипт, который собирает данные геолокации и записывает их в файл в формате CSV. Данные будут записаны в файл с именем server_location.txt в каталоге / tmp /. Откройте ваш любимый редактор и создайте скрипт с именем geolocate.sh. Вставьте содержимое скрипта, показанное ниже, и обязательно замените IP-адрес своим:

#!/bin/sh

OUTPUT_FILE=/tmp/server_location.txt

# Grab this server's public IP address
PUBLIC_IP=`curl -s https://ipinfo.io/ip`

# Call the geolocation API and capture the output
curl -s https://ipvigilante.com/${PUBLIC_IP} | 
        jq '.data.latitude, .data.longitude, .data.city_name, .data.country_name' | 
        while read -r LATITUDE; do
                read -r LONGITUDE
                read -r CITY
                read -r COUNTRY
                echo "${LATITUDE},${LONGITUDE},${CITY},${COUNTRY}" | 
                        tr --delete " > 
                        ${OUTPUT_FILE}
        done

Сохраните скрипт и вернитесь в терминал. Сделайте скрипт исполняемым из терминала, предоставив разрешение на выполнение для этого файла.

chmod u+x geolocate.sh

Теперь вы готовы проверить это. Запустите скрипт geolocate.sh и проверьте содержимое выходного файла:

./geolocate.sh
cat /tmp/server_location.txt

запуск скрипта геолокации

Обновление данных геолокации один раз в день с помощью задания Cron

Давайте создадим задание cron, чтобы наш сервер обновлял свою геолокацию и сохранял ее в файл один раз в день. Ежедневное задание cron обновляет файл server_location.txt в папке / tmp / на сервере. Создать 24-часовое задание cron так же просто, как поместить наш скрипт в каталог /etc/cron.daily. Мы должны использовать команду sudo, чтобы скопировать файл от имени пользователя root, чтобы избежать проблем с разрешениями. Выполните следующую команду, чтобы скопировать geolocate.sh в каталог /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Эти изменения вносятся немедленно, и наш сценарий будет запускаться каждые 24 часа для обновления содержимого файла /tmp/server_location.txt. Мы можем использовать эти данные для интересных вещей, таких как нанесение наших серверов на карту, а также объединение геолокации с журналами трафика, чтобы увидеть, где в мире находятся точки доступа наших серверов.