Comment obtenir l’emplacement géographique de votre système à partir d’un script Bash

Vous pouvez trouver l’emplacement géographique d’un système Linux distant à l’aide d’API ouvertes et d’un simple script bash. La géolocalisation d’un serveur peut vous aider à le suivre dans le monde physique, en vous assurant que les serveurs sont situés dans des hotspots régionaux.

Chaque serveur sur Internet a une adresse IP publique. Celui-ci est soit directement attribué au serveur, soit attribué à un routeur qui envoie le trafic vers ce serveur. Les adresses IP nous donnent une idée de l’emplacement de ce serveur dans le monde. Nous pouvons obtenir ces données de géolocalisation via deux API ouvertes, fournies par ipinfo.co et IP Vigilante et les utiliser pour voir la ville, l’état et le pays associés à un serveur ou à un autre système distant. Cela ne vous donne pas une position GPS précise; il vous permet simplement de voir la zone générale de l’adresse IP.

Se connecter à un système distant

Vous exécuterez les commandes suivantes sur le serveur Linux ou d’autres systèmes distants que vous souhaitez géolocaliser, vous devez donc vous connecter au serveur et accéder à un shell en premier. Par exemple, vous pouvez vous connecter via SSH. Vous pouvez exécuter les commandes sur votre système local pour trouver son emplacement, mais vous savez probablement déjà où vous vous trouvez!

Installez curl et jq

Nous avons besoin de deux outils pour accéder à l’API de géolocalisation: curl pour effectuer des requêtes HTTP et jq pour traiter les données JSON que nous récupérons. Ouvrez un terminal et utilisez apt-get pour installer ces outils sur des systèmes Ubuntu ou Debian. Sur les autres distributions Linux, utilisez plutôt l’outil d’installation de package de votre distribution Linux.

sudo apt-get install curl jq

Trouvez l’adresse IP publique du serveur

Nous avons également besoin de l’adresse IP publique du serveur avant de pouvoir obtenir les données de géolocalisation. Utilisez curl pour faire un appel API à ipinfo.io dans la fenêtre de votre terminal.

curl https://ipinfo.io/ip

Obtenir des données de localisation à partir de l’API

Maintenant que nous avons l’adresse IP publique du serveur, nous pouvons faire un appel à l’API d’ipvigilante.com pour obtenir les données de géolocalisation. Remplacer avec l’adresse qui est revenue dans la commande précédente.

curl https://ipvigilante.com/

Examinons de plus près les données que nous récupérons de cet appel:

métadonnées affichant les informations de localisation

L’API renvoie la ville, le pays et le continent dans lesquels réside notre serveur. Il renvoie également les coordonnées approximatives de latitude et de longitude, au cas où nous voudrions dessiner ce serveur sur une carte interactive. Nous utiliserons «latitude», «longitude», «city_name» et «country_name» dans notre script. La commande jq comprend comment traiter les données de l’API et extraire ces quatre champs.

Création d’un script pour automatiser l’appel d’API

Nous pouvons créer un script qui saisit les données de géolocalisation et les écrit dans un fichier au format CSV. Les données seront écrites dans un fichier appelé emplacement_serveur.txt dans le répertoire / tmp /. Ouvrez votre éditeur préféré et créez un script nommé geolocate.sh. Insérez le contenu du script ci-dessous et assurez-vous de remplacer l’adresse IP par la vôtre:

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

Enregistrez le script et revenez au terminal. Rendez le script exécutable à partir du terminal, en accordant l’autorisation d’exécution sur ce fichier.

chmod u+x geolocate.sh

Vous êtes maintenant prêt à le tester. Exécutez le script geolocate.sh et vérifiez le contenu du fichier de sortie:

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

exécution du script de géolocalisation

Mise à jour des données de géolocalisation une fois par jour avec une tâche Cron

Créons une tâche cron pour que notre serveur mette à jour sa géolocalisation et l’enregistre dans un fichier une fois par jour. La tâche cron quotidienne met à jour un fichier appelé emplacement_serveur.txt dans le dossier / tmp / du serveur. Créer un travail cron de 24 heures est aussi simple que de placer notre script dans le répertoire /etc/cron.daily. Nous devons utiliser la commande sudo pour copier le fichier en tant qu’utilisateur root, afin d’éviter les problèmes d’autorisation. Exécutez la commande suivante pour copier geolocate.sh dans le répertoire /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Ces modifications sont immédiates et notre script s’exécutera toutes les 24 heures pour mettre à jour le contenu du fichier /tmp/server_location.txt. Nous pouvons utiliser ces données pour faire des choses intéressantes, comme tracer nos serveurs sur une carte ou combiner la géolocalisation avec des journaux de trafic pour voir où se trouvent nos hotspots de serveurs dans le monde.