Hvordan få systemets geografiske plassering fra et Bash-skript

Du kan finne den geografiske plasseringen til et eksternt Linux-system ved å bruke åpne APIer og et enkelt bash-skript. Geolokalisering av en server kan hjelpe deg med å spore den i den fysiske verden, og sikre at servere er plassert i regionale hotspots.

Hver server på internett har en offentlig IP-adresse. Dette er enten direkte tilordnet serveren, eller tilordnet en ruter som sender trafikk til den serveren. IP-adresser gir oss en pekepinn om hvor serveren befinner seg i verden. Vi kan få disse geolokaliseringsdataene gjennom to åpne APIer, levert av ipinfo.co og IP Vigilante og bruke dem til å se byen, staten og landet knyttet til en server eller et annet eksternt system. Dette gir deg ikke en nøyaktig GPS-posisjon; den lar deg bare se det generelle området for IP-adressen.

Koble til et eksternt system

Du vil kjøre følgende kommandoer på Linux-serveren eller andre eksterne systemer du vil geolokalisere, så du må koble til serveren og få tilgang til et skall på den først. Du kan for eksempel koble til via SSH. Du kan kjøre kommandoene på ditt lokale system for å finne plasseringen, men du vet sannsynligvis allerede hvor du er!

  Slik ser du Game of Thrones siste sesong online

Installer curl og jq

Vi trenger to verktøy for å få tilgang til geolocation API: curl for å lage HTTP-forespørsler og jq for å behandle JSON-dataene som vi får tilbake. Åpne en terminal og bruk apt-get for å installere disse verktøyene på Ubuntu eller Debian-baserte systemer. På andre Linux-distribusjoner, bruk Linux-distribusjonens pakkeinstallasjonsverktøy i stedet.

sudo apt-get install curl jq

Finn serverens offentlige IP-adresse

Vi trenger også serverens offentlige IP-adresse før vi kan få geolokaliseringsdataene. Bruk curl for å foreta et API-kall til ipinfo.io i terminalvinduet.

curl https://ipinfo.io/ip

Få plasseringsdata fra API

Nå som vi har den offentlige IP-en til serveren, kan vi ringe til ipvigilante.coms API for å få geolokaliseringsdataene. Erstatte med adressen som kom tilbake i forrige kommando.

curl https://ipvigilante.com/

La oss se nærmere på hvilke data vi får tilbake fra denne samtalen:

  Hvordan åpne ASPX-filer

API-en returnerer byen, landet og kontinentet der serveren vår befinner seg. Den returnerer også de omtrentlige bredde- og lengdegradskoordinatene, i tilfelle vi ønsker å tegne denne serveren på et interaktivt kart. Vi bruker «breddegrad», «lengdegrad», «bynavn» og «landnavn» i skriptet vårt. jq-kommandoen forstår hvordan man behandler API-dataene og trekker ut disse fire feltene.

Opprette et skript for å automatisere API-kallet

Vi kan lage et skript som tar tak i geolokaliseringsdataene og skriver dem til en fil i CSV-format. Dataene vil bli skrevet til en fil kalt server_location.txt i /tmp/-katalogen. Åpne favorittredigeringsprogrammet ditt og lag et skript kalt geolocate.sh. Sett inn skriptinnholdet vist nedenfor, og pass på å 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

Lagre skriptet og gå tilbake til terminalen. Gjør skriptet kjørbart fra terminalen ved å gi kjøringstillatelsen til denne filen.

chmod u+x geolocate.sh

Nå er du klar til å teste den ut. Kjør geolocate.sh-skriptet og sjekk innholdet i utdatafilen:

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

Oppdatering av geolokaliseringsdata én gang om dagen med en Cron-jobb

La oss lage en cron-jobb for å få serveren vår til å oppdatere geolokaliseringen og lagre den i en fil en gang om dagen. Den daglige cron-jobben oppdaterer en fil kalt server_location.txt i /tmp/-mappen på serveren. Å lage en 24-timers cron-jobb er like enkelt som å legge skriptet vårt inn i /etc/cron.daily-katalogen. Vi må bruke sudo-kommandoen for å kopiere filen som root-bruker, for å unngå tillatelsesproblemer. Kjør følgende kommando for å kopiere geolocate.sh til katalogen /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Disse endringene er umiddelbare, og skriptet vårt kjøres hver 24. time for å oppdatere innholdet i filen /tmp/server_location.txt. Vi kan bruke disse dataene til å gjøre interessante ting, for eksempel å plotte serverne våre på et kart, samt kombinere geolokalisering med trafikklogger for å se hvor i verden serverens hotspots er.

  Slik legger du til flytskjemaer og diagrammer i Google Docs eller Slides