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

Contenu

Carte du monde avec le concept de connexions internet

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 pourrait vous aider à le suivre dans le monde physique, s'assurer que les serveurs sont situés dans des points d'accès régionaux.

Chaque serveur Internet a une adresse IP publique. Ceci est mappé directement sur le serveur ou est mappé sur un routeur qui envoie le trafic à ce serveur. Les adresses IP nous donnent une idée de l'endroit où se trouve ce serveur dans le monde. Nous pouvons obtenir ces données de géolocalisation via deux API ouvertes, fournis 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; vous permet uniquement 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 d'abord vous connecter au serveur et entrer un shell. Par exemple, peut se connecter via SSH. Vous pouvez exécuter les commandes sur votre système local pour trouver votre emplacement, Mais vous savez probablement déjà où vous êtes!

Installer curl et jq

Nous avons besoin de deux outils pour entrer dans l'API de géolocalisation: curl faire des requêtes HTTP et jq pour traiter les données JSON que nous obtenons. Ouvrez un terminal et utilisez apt-get pour installer ces outils sur des systèmes basés sur Ubuntu ou Debian. Sur d'autres distributions Linux, utilisez l'outil d'installation de paquet de votre distribution Linux.

sudo apt-get installer curl jq

Trouver 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. Utilisation curl pour faire un appel API à ipinfo.io dans la fenêtre de votre terminal.

boucle https://ipinfo.io/ip

Obtenir les données de localisation de l'API

Maintenant que nous avons l'IP publique du serveur, on peut faire un appel à l'API ipvigilante.com pour obtenir les données de géolocalisation. Remplacer <your ip address> avec l'adresse que vous avez retournée dans la commande précédente.

boucle https://ipvigilante.com/<votre adresse IP>

sortie de la commande curl

Regardons de plus près les données que nous obtenons de cet appel:

métadonnées affichant les informations de localisation

L'API renvoie la ville, le pays et le continent où 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”, “nombre_ciudad” et “nombre_país” dans notre script. Les jq La commande comprend comment traiter les données de l'API et extraire ces quatre champs.

Créer un script pour automatiser l'appel d'API

Nous pouvons créer un script qui prend les données de géolocalisation et les écrit dans un fichier au format CSV. Les données seront écrites dans un fichier appelé server_location.txt dans le /tmp/ annuaire. Ouvrez votre éditeur préféré et créez un script appelé 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' | 
        en lecture -r LATITUDE; do
                read -r LONGITUDE
                read -r CITY
                read -r COUNTRY
                echo "${LATITUDE},${LONGUEUR},${VILLE},${PAYS}" | 
                        tr --supprimer " > 
                        ${OUTPUT_FILE}
        terminé

Enregistrez le script et revenez au terminal. Rendre le script exécutable à partir du terminal, octroi de l’autorisation d’exécution sur ce fichier.

chmod u+x geolocate.sh

Vous êtes maintenant prêt à l’essayer. Exécutez le geolocate.sh script et vérifier 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 au moins une fois par jour avec une tâche cron

Créez un travail cron pour notre serveur afin de mettre à jour votre géolocalisation et de l’enregistrer dans un fichier au moins une fois par jour. Le travail cron quotidien met à jour un fichier appelé server_location.txt dans le /tmp/ dossier du serveur. Créer une tâche cron 24 heures est aussi simple que de mettre notre script dans le /etc/cron.daily annuaire. Nous devons utiliser la commande sudo pour copier le fichier en tant qu'utilisateur root, pour éviter les problèmes d'autorisation. Exécutez la commande suivante pour copier geolocate.sh Al /etc/cron.daily annuaire.

sudo cp geolocate.sh /etc/cron.daily

Ces changements sont immédiats et notre script s'exécutera tous les 24 heures pour mettre à jour le contenu du /tmp/server_location.txt Record. Nous pouvons utiliser ces données pour faire des choses sympas, comment tracer nos serveurs sur une carte, ainsi que de combiner la géolocalisation avec les enregistrements de trafic pour voir où dans le monde se trouvent les points d'accès de nos serveurs.

setTimeout(fonction(){
!fonction(F,b,e,v,m,t,s)
{si(f.fbq)revenir;n=f.fbq=fonction(){n.callMethod?
n.callMethod.apply(m,arguments):n.queue.push(arguments)};
si(!f._fbq)f._fbq=n;n.push=n;n.chargé=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertAvant(t,s) } (window, document,'scénario',
'https://connect.facebook.net/en_US/fbevents.js’);
fbq('init', « 335401813750447 »);
fbq('Piste', « Page View »);
},3000);

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.