Come ottenere la posizione geografica del sistema da uno script Bash

Puoi trovare la posizione geografica di un sistema Linux remoto utilizzando API aperte e un semplice script bash. La geolocalizzazione di un server potrebbe aiutarti a rintracciarlo nel mondo fisico, assicurando che i server si trovino in hotspot regionali.

Ogni server su Internet ha un indirizzo IP pubblico. Questo viene assegnato direttamente al server o assegnato a un router che invia il traffico a quel server. Gli indirizzi IP ci danno un’idea di dove si trova quel server nel mondo. Possiamo ottenere questi dati di geolocalizzazione tramite due API aperte, fornite da ipinfo.co e IP Vigilante e utilizzarli per vedere la città, lo stato e il paese associati a un server o altro sistema remoto. Questo non ti dà una posizione GPS precisa; ti permette solo di vedere l’area generale dell’indirizzo IP.

Connettiti a un sistema remoto

Eseguirai i seguenti comandi sul server Linux o su altri sistemi remoti che desideri geolocalizzare, quindi devi prima connetterti al server e accedere a una shell su di esso. Ad esempio, potresti connetterti tramite SSH. Potresti eseguire i comandi sul tuo sistema locale per trovare la sua posizione, ma probabilmente sai già dove ti trovi!

Installa curl e jq

Abbiamo bisogno di due strumenti per accedere all’API di geolocalizzazione: curl per effettuare richieste HTTP e jq per elaborare i dati JSON che recuperiamo. Apri un terminale e usa apt-get per installare questi strumenti su sistemi basati su Ubuntu o Debian. Su altre distribuzioni Linux, utilizza invece lo strumento di installazione del pacchetto della tua distribuzione Linux.

sudo apt-get install curl jq

Trova l’indirizzo IP pubblico del server

Abbiamo anche bisogno dell’indirizzo IP pubblico del server prima di poter ottenere i dati di geolocalizzazione. Usa curl per effettuare una chiamata API a ipinfo.io nella finestra del tuo terminale.

curl https://ipinfo.io/ip

Ottieni dati sulla posizione dall’API

Ora che abbiamo l’IP pubblico del server, possiamo fare una chiamata all’API di ipvigilante.com per ottenere i dati di geolocalizzazione. Sostituire con l’indirizzo che è tornato nel comando precedente.

curl https://ipvigilante.com/

Diamo uno sguardo più da vicino a quali dati otteniamo da questa chiamata:

metadati che mostrano le informazioni sulla posizione

L’API restituisce la città, il paese e il continente in cui risiede il nostro server. Restituisce anche le coordinate approssimative di latitudine e longitudine, nel caso in cui desideriamo disegnare questo server su una mappa interattiva. Useremo “latitude”, “longitude”, “city_name” e “country_name” nel nostro script. Il comando jq comprende come elaborare i dati API ed estrarre questi quattro campi.

Creazione di uno script per automatizzare la chiamata API

Possiamo creare uno script che cattura i dati di geolocalizzazione e li scrive su un file in formato CSV. I dati verranno scritti in un file denominato server_location.txt nella directory / tmp /. Apri il tuo editor preferito e crea uno script chiamato geolocate.sh. Inserisci il contenuto dello script mostrato di seguito e assicurati di sostituire l’indirizzo IP con il tuo:

#!/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

Salva lo script e torna al terminale. Rendi lo script eseguibile dal terminale, concedendo il permesso di esecuzione su questo file.

chmod u+x geolocate.sh

Ora sei pronto per provarlo. Esegui lo script geolocate.sh e controlla il contenuto del file di output:

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

eseguendo lo script di geolocalizzazione

Aggiornamento dei dati di geolocalizzazione una volta al giorno con un Cron Job

Creiamo un cron job per fare in modo che il nostro server aggiorni la sua geolocalizzazione e lo salvi in ​​un file una volta al giorno. Il cron job quotidiano aggiorna un file denominato server_location.txt nella cartella / tmp / del server. Creare un cron job di 24 ore è facile come inserire il nostro script nella directory /etc/cron.daily. Dobbiamo usare il comando sudo per copiare il file come utente root, per evitare problemi di autorizzazione. Eseguire il comando seguente per copiare geolocate.sh nella directory /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Queste modifiche sono immediate e il nostro script verrà eseguito ogni 24 ore per aggiornare il contenuto del file /tmp/server_location.txt. Possiamo utilizzare questi dati per fare cose interessanti, come tracciare i nostri server su una mappa e combinare la geolocalizzazione con i registri del traffico per vedere dove si trovano i nostri hotspot dei server nel mondo.