Πώς να αποκτήσετε τη γεωγραφική θέση του συστήματός σας από ένα σενάριο Bash

Μπορείτε να βρείτε τη γεωγραφική θέση ενός απομακρυσμένου συστήματος Linux χρησιμοποιώντας ανοιχτά API και ένα απλό σενάριο bash. Ο γεωγραφικός εντοπισμός ενός διακομιστή θα μπορούσε να σας βοηθήσει να τον παρακολουθήσετε στον φυσικό κόσμο, διασφαλίζοντας ότι οι διακομιστές βρίσκονται σε τοπικά hotspot.

Κάθε διακομιστής στο Διαδίκτυο έχει μια δημόσια διεύθυνση IP. Αυτό είτε εκχωρείται απευθείας στον διακομιστή είτε εκχωρείται σε έναν δρομολογητή που στέλνει κίνηση σε αυτόν τον διακομιστή. Οι διευθύνσεις IP μας δίνουν μια ιδέα για το πού βρίσκεται αυτός ο διακομιστής στον κόσμο. Μπορούμε να λάβουμε αυτά τα δεδομένα γεωγραφικής τοποθεσίας μέσω δύο ανοιχτών API, που παρέχονται από το ipinfo.co και το IP Vigilante και να τα χρησιμοποιήσουμε για να δούμε την πόλη, την πολιτεία και τη χώρα που σχετίζονται με έναν διακομιστή ή άλλο απομακρυσμένο σύστημα. Αυτό δεν σας δίνει μια ακριβή τοποθεσία GPS. απλά σας επιτρέπει να δείτε τη γενική περιοχή της διεύθυνσης IP.

Συνδεθείτε σε ένα απομακρυσμένο σύστημα

Θα εκτελείτε τις ακόλουθες εντολές στον διακομιστή Linux ή σε άλλα απομακρυσμένα συστήματα που θέλετε να εντοπίσετε γεωγραφικά, επομένως πρέπει πρώτα να συνδεθείτε στον διακομιστή και να αποκτήσετε πρόσβαση σε ένα κέλυφος σε αυτόν. Για παράδειγμα, μπορείτε να συνδεθείτε μέσω SSH. Θα μπορούσατε να εκτελέσετε τις εντολές στο τοπικό σας σύστημα για να βρείτε τη θέση του, αλλά πιθανότατα γνωρίζετε ήδη πού βρίσκεστε!

  Πώς να δημιουργήσετε συντομεύσεις επιφάνειας εργασίας στο Ubuntu

Εγκαταστήστε το curl και το jq

Χρειαζόμαστε δύο εργαλεία για να αποκτήσουμε πρόσβαση στο API γεωγραφικής τοποθεσίας: το curl για την υποβολή αιτημάτων HTTP και το jq για την επεξεργασία των δεδομένων JSON που λαμβάνουμε πίσω. Ανοίξτε ένα τερματικό και χρησιμοποιήστε το apt-get για να εγκαταστήσετε αυτά τα εργαλεία σε συστήματα που βασίζονται στο Ubuntu ή στο Debian. Σε άλλες διανομές Linux, χρησιμοποιήστε αντί αυτού το εργαλείο εγκατάστασης πακέτων της διανομής σας Linux.

sudo apt-get install curl jq

Βρείτε τη δημόσια διεύθυνση IP του διακομιστή

Χρειαζόμαστε επίσης τη δημόσια διεύθυνση IP του διακομιστή για να μπορέσουμε να λάβουμε τα δεδομένα γεωγραφικής θέσης. Χρησιμοποιήστε το curl για να πραγματοποιήσετε μια κλήση API στο ipinfo.io στο παράθυρο του τερματικού σας.

curl https://ipinfo.io/ip

Λάβετε δεδομένα τοποθεσίας από το API

Τώρα που έχουμε τη δημόσια IP του διακομιστή, μπορούμε να καλέσουμε το API του ipvigilante.com για να λάβουμε τα δεδομένα γεωγραφικής θέσης. Αντικαθιστώ με τη διεύθυνση που επέστρεψε στην προηγούμενη εντολή.

curl https://ipvigilante.com/

Ας ρίξουμε μια πιο προσεκτική ματιά στα δεδομένα που λαμβάνουμε από αυτήν την κλήση:

  Πώς να χρησιμοποιήσετε το Instant Hotspot στο iPhone, το iPad ή το Mac σας

Το API επιστρέφει την πόλη, τη χώρα και την ήπειρο, στην οποία βρίσκεται ο διακομιστής μας. Επιστρέφει επίσης τις κατά προσέγγιση συντεταγμένες γεωγραφικού πλάτους και μήκους, σε περίπτωση που θέλουμε να σχεδιάσουμε αυτόν τον διακομιστή σε έναν διαδραστικό χάρτη. Θα χρησιμοποιήσουμε “γεωγραφικό πλάτος”, “γεωγραφικό μήκος”, “όνομα_πόλης” και “όνομα_χώρας” στο σενάριό μας. Η εντολή jq κατανοεί τον τρόπο επεξεργασίας των δεδομένων API και εξαγωγής αυτών των τεσσάρων πεδίων.

Δημιουργία σεναρίου για την αυτοματοποίηση της κλήσης API

Μπορούμε να δημιουργήσουμε ένα σενάριο που συλλαμβάνει τα δεδομένα γεωγραφικής θέσης και τα γράφει σε ένα αρχείο σε μορφή CSV. Τα δεδομένα θα εγγραφούν σε ένα αρχείο που ονομάζεται server_location.txt στον κατάλογο /tmp/. Ανοίξτε τον αγαπημένο σας επεξεργαστή και δημιουργήστε ένα σενάριο με το όνομα geolocate.sh. Εισαγάγετε τα περιεχόμενα του σεναρίου που εμφανίζονται παρακάτω και φροντίστε να αντικαταστήσετε τη διεύθυνση IP με τη δική σας:

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

Αποθηκεύστε το σενάριο και επιστρέψτε στο τερματικό. Κάντε το σενάριο εκτελέσιμο από το τερματικό, παραχωρώντας το δικαίωμα εκτέλεσης σε αυτό το αρχείο.

chmod u+x geolocate.sh

Τώρα είστε έτοιμοι να το δοκιμάσετε. Εκτελέστε το σενάριο geolocate.sh και ελέγξτε τα περιεχόμενα του αρχείου εξόδου:

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

Ενημέρωση των δεδομένων γεωγραφικής θέσης μία φορά την ημέρα με μια Cron Job

Ας δημιουργήσουμε μια εργασία cron για να κάνουμε τον διακομιστή μας να ενημερώνει τη γεωγραφική του τοποθεσία και να την αποθηκεύει σε ένα αρχείο μία φορά την ημέρα. Η καθημερινή εργασία cron ενημερώνει ένα αρχείο που ονομάζεται server_location.txt στο φάκελο /tmp/ του διακομιστή. Η δημιουργία μιας 24ωρης εργασίας cron είναι τόσο εύκολη όσο η τοποθέτηση του σεναρίου μας στον κατάλογο /etc/cron.daily. Πρέπει να χρησιμοποιήσουμε την εντολή sudo για να αντιγράψουμε το αρχείο ως χρήστη root, για να αποφύγουμε προβλήματα αδειών. Εκτελέστε την ακόλουθη εντολή για να αντιγράψετε το geolocate.sh στον κατάλογο /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Αυτές οι αλλαγές είναι άμεσες και το σενάριό μας θα εκτελείται κάθε 24 ώρες για να ενημερώνει τα περιεχόμενα του αρχείου /tmp/server_location.txt. Μπορούμε να χρησιμοποιήσουμε αυτά τα δεδομένα για να κάνουμε ενδιαφέροντα πράγματα, όπως να σχεδιάσουμε τους διακομιστές μας σε έναν χάρτη καθώς και να συνδυάσουμε γεωγραφική θέση με αρχεία καταγραφής κυκλοφορίας για να δούμε πού στον κόσμο βρίσκονται τα hotspot του διακομιστή μας.

  Ενεργοποιήστε ένα πλέγμα στην οθόνη για να τακτοποιήσετε τα Windows πιο εύκολα