Sådan får du dit systems geografiske placering fra et Bash-script

Du kan finde den geografiske placering af et eksternt Linux-system ved hjælp af åbne API’er og et simpelt bash-script. Geolokalisering af en server kan hjælpe dig med at spore den i den fysiske verden og sikre, at servere er placeret i regionale hotspots.

Hver server på internettet har en offentlig IP-adresse. Dette er enten direkte tildelt serveren eller tildelt en router, der sender trafik til den pågældende server. IP-adresser giver os et fingerpeg om, hvor serveren er placeret i verden. Vi kan få disse geolokationsdata gennem to åbne API’er, leveret af ipinfo.co og IP Vigilante og bruge dem til at se byen, staten og landet forbundet med en server eller et andet fjernsystem. Dette giver dig ikke en præcis GPS-placering; det lader dig bare se det generelle område af IP-adressen.

Tilslut til et fjernsystem

Du vil køre følgende kommandoer på Linux-serveren eller andre fjernsystemer, du vil geolokalisere, så du skal først oprette forbindelse til serveren og få adgang til en shell på den. For eksempel kan du oprette forbindelse via SSH. Du kan køre kommandoerne på dit lokale system for at finde dets placering, men du ved sikkert allerede, hvor du er!

  Sådan laver du et løb eller ride privat på Strava

Installer curl og jq

Vi har brug for to værktøjer for at få adgang til geolocation API: curl for at lave HTTP-anmodninger og jq for at behandle de JSON-data, som vi får tilbage. Åbn en terminal og brug apt-get til at installere disse værktøjer på Ubuntu eller Debian-baserede systemer. På andre Linux-distributioner skal du bruge din Linux-distributions pakkeinstallationsværktøj i stedet.

sudo apt-get install curl jq

Find serverens offentlige IP-adresse

Vi har også brug for serverens offentlige IP-adresse, før vi kan få geolokationsdataene. Brug curl til at foretage et API-kald til ipinfo.io i dit terminalvindue.

curl https://ipinfo.io/ip

Hent placeringsdata fra API’et

Nu hvor vi har serverens offentlige IP, kan vi foretage et opkald til ipvigilante.com’s API for at få geolokationsdataene. Erstatte med den adresse, der kom tilbage i den forrige kommando.

curl https://ipvigilante.com/

Lad os se nærmere på, hvilke data vi får tilbage fra dette opkald:

  Sådan stopper du Safari fra at starte apps på iPhone og iPad

API’en returnerer byen, landet og kontinentet, hvor vores server er bosat. Det returnerer også de omtrentlige bredde- og længdegradskoordinater, hvis vi ønsker at tegne denne server på et interaktivt kort. Vi bruger “latitude”, “longitude”, “city_name” og “country_name” i vores script. Kommandoen jq forstår, hvordan man behandler API-dataene og trækker disse fire felter ud.

Oprettelse af et script til at automatisere API-kaldet

Vi kan oprette et script, der fanger geolokationsdataene og skriver dem til en fil i CSV-format. Dataene vil blive skrevet til en fil kaldet server_location.txt i /tmp/-mappen. Åbn din yndlingseditor og opret et script ved navn geolocate.sh. Indsæt scriptindholdet vist nedenfor, og sørg for at erstatte IP-adressen med din egen:

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

Gem scriptet og gå tilbage til terminalen. Gør scriptet eksekverbart fra terminalen ved at give tilladelse til at udføre denne fil.

chmod u+x geolocate.sh

Nu er du klar til at teste det. Kør geolocate.sh scriptet og kontroller indholdet af outputfilen:

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

Opdatering af geolokationsdata én gang om dagen med et Cron-job

Lad os oprette et cron-job for at få vores server til at opdatere sin geoplacering og gemme den i en fil en gang om dagen. Det daglige cron-job opdaterer en fil kaldet server_location.txt i mappen /tmp/ på serveren. At oprette et 24-timers cron-job er lige så nemt som at lægge vores script ind i mappen /etc/cron.daily. Vi skal bruge sudo-kommandoen til at kopiere filen som root-bruger for at undgå tilladelsesproblemer. Kør følgende kommando for at kopiere geolocate.sh til mappen /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Disse ændringer er øjeblikkelige, og vores script kører hver 24. time for at opdatere indholdet af filen /tmp/server_location.txt. Vi kan bruge disse data til at gøre interessante ting, såsom at plotte vores servere på et kort samt kombinere geolocation med trafiklogs for at se, hvor i verden vores server-hotspots er.

  Vælg hvilket billede der skal vises, når du tweeter et link