Cum să obțineți locația geografică a sistemului dvs. dintr-un script Bash

Localizarea geografică a unui sistem Linux aflat la distanță poate fi realizată utilizând interfețe API publice și un script bash simplu. Această metodă permite monitorizarea serverelor, asigurându-ne că acestea sunt amplasate strategic în puncte cheie regionale.

Fiecare server conectat la internet posedă o adresă IP publică. Aceasta este alocată direct serverului sau unui router care gestionează traficul către el. Adresele IP oferă indicii despre localizarea serverului pe glob. Datele de geolocație pot fi obținute prin intermediul a două API-uri deschise, oferite de ipinfo.co și IP Vigilante, permițându-ne să identificăm orașul, regiunea și țara asociate unui server sau sistem la distanță. Trebuie menționat că această metodă nu oferă o localizare GPS exactă, ci indică zona generală a adresei IP.

Conectarea la un Sistem de la Distanță

Pentru a geolocaliza un server Linux sau alt sistem de la distanță, comenzile următoare trebuie executate pe acel sistem. În primul rând, este necesară o conexiune la server și acces la un shell, de exemplu, prin SSH. Deși este posibilă rularea comenzilor și pe sistemul local pentru a-i afla locația, aceasta este, de obicei, cunoscută.

Instalarea utilitarelor curl și jq

Pentru accesarea API-urilor de geolocație, sunt necesare două instrumente: curl, pentru efectuarea cererilor HTTP, și jq, pentru procesarea datelor JSON primite ca răspuns. Acestea pot fi instalate deschizând un terminal și folosind apt-get pentru sistemele bazate pe Ubuntu sau Debian. Pentru alte distribuții Linux, se va folosi instrumentul de instalare specific distribuției.

sudo apt-get install curl jq

Identificarea adresei IP publice a serverului

Înainte de a obține datele de geolocație, este necesară aflarea adresei IP publice a serverului. Se poate utiliza comanda curl pentru a efectua un apel API către ipinfo.io, direct în fereastra terminalului.

curl https://ipinfo.io/ip

Colectarea datelor de localizare prin API

Odată ce se cunoaște adresa IP publică a serverului, se poate apela API-ul ipvigilante.com pentru a obține datele de geolocație. Trebuie să înlocuiți expresia <your ip=”” address=””> cu adresa IP obținută anterior.

curl https://ipvigilante.com/

Analizând datele returnate de acest apel, se poate observa că:

API-ul returnează informații precum orașul, țara și continentul unde se află serverul. De asemenea, oferă coordonatele aproximative de latitudine și longitudine, utile pentru a marca serverul pe o hartă interactivă. Pentru scriptul nostru, vom utiliza câmpurile „latitudine”, „longitudine”, „nume_oraș” și „nume_țară”. Utilitarul jq este capabil să proceseze datele API și să extragă aceste patru câmpuri specific.

Automatizarea procesului cu un script

Un script poate fi creat pentru a extrage automat datele de geolocație și a le salva într-un fișier CSV. Datele vor fi stocate în fișierul server_location.txt din directorul /tmp/. Deschideți editorul preferat și creați un fișier numit geolocate.sh, adăugați conținutul prezentat mai jos și asigurați-vă că înlocuiți adresa IP.

#!/bin/sh
OUTPUT_FILE=/tmp/server_location.txt

# Obține adresa IP publică a serverului
PUBLIC_IP=`curl -s https://ipinfo.io/ip`

# Apeleză API-ul de geolocație și salvează rezultatul
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

Salvați scriptul și reveniți la terminal. Faceți scriptul executabil, acordându-i permisiunea de execuție.

chmod u+x geolocate.sh

Acum, puteți testa scriptul. Rulați geolocate.sh și verificați conținutul fișierului de ieșire:

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

Actualizarea periodică a datelor cu o lucrare Cron

Pentru a actualiza automat locația geografică a serverului zilnic, putem crea o lucrare Cron. Aceasta va actualiza fișierul server_location.txt din directorul /tmp/ al serverului. Pentru a crea o lucrare Cron de 24 de ore, adăugăm scriptul în directorul /etc/cron.daily. Pentru a evita problemele de permisiune, este necesară folosirea comenzii sudo pentru a copia fișierul ca utilizator root. Rulați următoarea comandă pentru a copia geolocate.sh în directorul /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Aceste modificări vor fi efectuate imediat, iar scriptul va rula o dată la fiecare 24 de ore, actualizând conținutul fișierului /tmp/server_location.txt. Aceste date pot fi folosite, de exemplu, pentru a vizualiza serverele pe o hartă sau pentru a analiza zonele de trafic ale serverelor, combinând geolocația cu jurnalele de trafic.