Как получить географическое положение вашей системы из сценария Bash
Вы можете найти географическое местоположение удаленной системы Linux, используя открытые API и простой сценарий bash. Геолокация сервера может помочь вам отслеживать его в физическом мире, гарантируя, что серверы расположены в региональных точках доступа.
Каждый сервер в Интернете имеет общедоступный IP-адрес. Это либо напрямую назначается серверу, либо назначается маршрутизатору, который отправляет трафик на этот сервер. IP-адреса дают нам представление о том, где в мире находится этот сервер. Мы можем получить эти данные геолокации через два открытых API, предоставляемых ipinfo.co и IP Vigilante, и использовать их для просмотра города, штата и страны, связанных с сервером или другой удаленной системой. Это не дает вам точного местоположения GPS; он просто позволяет вам увидеть общую область IP-адреса.
Подключиться к удаленной системе
Вы будете запускать следующие команды на сервере Linux или других удаленных системах, которые вы хотите геолокировать, поэтому вы должны сначала подключиться к серверу и получить доступ к оболочке на нем. Например, вы можете подключиться через SSH. Вы можете запустить команды в своей локальной системе, чтобы найти его местоположение, но вы, вероятно, уже знаете, где находитесь!
Установите завиток и 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, чтобы получить данные геолокации. Замените <ваш IP-адрес>
адресом, который вернулся в предыдущей команде.
curl https://ipvigilante.com/<your ip address>
Давайте подробнее рассмотрим, какие данные мы получаем от этого вызова:
API возвращает город, страну и континент, на котором находится наш сервер. Он также возвращает приблизительные координаты широты и долготы, если мы хотим нарисовать этот сервер на интерактивной карте. В нашем скрипте мы будем использовать \широту, \долготу, \название_города и \название_страны. Команда jq
понимает, как обрабатывать данные API и извлекать эти четыре поля.
Создание скрипта для автоматизации вызова API
Мы можем создать скрипт, который собирает данные геолокации и записывает их в файл в формате CSV. Данные будут записаны в файл с именем server_location.txt
в каталоге /tmp/
. Откройте свой любимый редактор и создайте скрипт с именем gelocate.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
Теперь вы готовы проверить это. Запустите скрипт gelocate.sh
и проверьте содержимое выходного файла:
./geolocate.sh cat /tmp/server_location.txt
Обновление данных геолокации один раз в день с помощью задания Cron
Давайте создадим задание cron, чтобы наш сервер обновлял свою геолокацию и сохранял ее в файл один раз в день. Ежедневное задание cron обновляет файл с именем server_location.txt
в папке /tmp/
на сервере. Создать 24-часовое задание cron так же просто, как поместить наш скрипт в каталог /etc/cron.daily
. Мы должны использовать команду sudo, чтобы скопировать файл от имени пользователя root, чтобы избежать проблем с правами доступа. Выполните следующую команду, чтобы скопировать gelocate.sh
в каталог /etc/cron.daily
.
sudo cp geolocate.sh /etc/cron.daily
Эти изменения вступают в силу немедленно, и наш скрипт будет запускаться каждые 24 часа для обновления содержимого файла /tmp/server_location.txt
. Мы можем использовать эти данные, чтобы делать интересные вещи, например отображать наши серверы на карте, а также объединять геолокацию с журналами трафика, чтобы увидеть, где в мире находятся точки доступа наших серверов.