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.
Sommario:
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
curl https://ipvigilante.com/
Diamo uno sguardo più da vicino a quali dati otteniamo da questa chiamata:
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
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.