Як отримати географічне розташування вашої системи зі сценарію 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, скористайтеся менеджером пакетів, призначеним для вашої системи.

sudo apt-get install curl jq

Визначення публічної IP-адреси сервера

Перш ніж звертатися до даних геолокації, нам потрібна публічна IP-адреса сервера. Скористайтеся curl для запиту до API ipinfo.io у терміналі.

curl https://ipinfo.io/ip

Отримання даних про місцезнаходження з API

Маючи публічну IP-адресу, ми можемо надіслати запит до API ipvigilante.com для отримання даних про географічне розташування. Замініть `` на IP-адресу, отриману в результаті попередньої команди.

curl https://ipvigilante.com/

Давайте розглянемо детальніше, які дані повертає цей запит:

API надає інформацію про місто, країну та континент, де розміщено сервер. Крім цього, він повертає приблизні географічні координати (широту та довготу), які можна використовувати для відображення сервера на карті. У нашому скрипті ми будемо використовувати «широту», «довготу», «назву міста» та «назву країни». Інструмент jq дозволяє обробляти дані, отримані від API, та виокремлювати необхідні поля.

Створення скрипту для автоматизації запитів до API

Ми створимо скрипт, який автоматично отримує дані про геолокацію та записує їх у файл у форматі CSV. Інформація буде збережена у файл server_location.txt, що знаходиться у каталозі /tmp/. Відкрийте текстовий редактор та створіть новий файл з іменем geolocate.sh. Скопіюйте в нього наведений нижче код, обов’язково замінивши IP-адресу на вашу.

#!/bin/sh

OUTPUT_FILE=/tmp/server_location.txt

# Отримання публічної IP-адреси сервера
PUBLIC_IP=`curl -s https://ipinfo.io/ip`

# Запит до API геолокації та збір результатів
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 та перевірте вміст файлу server_location.txt.

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

Автоматичне оновлення даних геолокації за допомогою Cron

Налаштуємо завдання cron, щоб сервер автоматично оновлював дані про геолокацію та зберігав їх у файл щодня. Завдання cron буде оновлювати файл server_location.txt у каталозі /tmp/. Для цього нам потрібно скопіювати скрипт до каталогу /etc/cron.daily. Оскільки це вимагає прав адміністратора, скористаємося командою sudo. Виконайте наведену нижче команду, щоб скопіювати geolocate.sh до каталогу /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Зміни вступлять в силу негайно, і скрипт буде виконуватися кожні 24 години, оновлюючи файл /tmp/server_location.txt. Ці дані можна використовувати для різноманітних цілей, наприклад, для відображення серверів на карті або для аналізу геолокації у поєднанні з логами трафіку.