Finn serverens geografiske plassering med et enkelt bash-skript

Finn den geografiske plasseringen til et eksternt Linux-system

Det er mulig å lokalisere et eksternt Linux-system geografisk ved hjelp av åpne API-er og et enkelt bash-skript. Geolokalisering av servere kan hjelpe med å identifisere hvor de er fysisk plassert, og sikre at de befinner seg i strategiske regionale punkter.

Hver server som er koblet til internett har en offentlig IP-adresse. Denne adressen er enten direkte knyttet til serveren eller til en ruter som sender trafikken videre. IP-adresser gir oss en indikasjon på serverens omtrentlige geografiske plassering. Vi kan få tak i disse geolokaliseringsdataene ved hjelp av to åpne API-er, tilbudt av ipinfo.co og IP Vigilante. Disse dataene kan brukes til å finne byen, fylket og landet som en server eller et annet eksternt system befinner seg i. Det er viktig å merke seg at dette ikke gir en eksakt GPS-posisjon, men heller en indikasjon på det generelle området.

Opprett forbindelse til det eksterne systemet

For å hente ut geolokaliseringsdataene, må kommandoene kjøres på den aktuelle Linux-serveren eller andre eksterne systemer. Det betyr at man først må opprette en tilkobling, for eksempel via SSH, for å få tilgang til kommandolinjen. Du kan også teste kommandoene på ditt lokale system, men du er sannsynligvis allerede klar over hvor det befinner seg!

Installer curl og jq

Vi trenger to verktøy for å kommunisere med geolokaliserings-API-ene: curl for å sende HTTP-forespørsler og jq for å behandle JSON-data som returneres. For systemer basert på Ubuntu eller Debian, kan disse installeres med apt-get. Bruk pakkebehandlingsverktøyet til din Linux-distribusjon for andre systemer.

sudo apt-get install curl jq

Finn serverens offentlige IP-adresse

Vi trenger serverens offentlige IP-adresse før vi kan hente ut geolokaliseringsdata. For å finne denne, kan du bruke curl til å sende en forespørsel til ipinfo.io.

curl https://ipinfo.io/ip

Hent lokasjonsdata fra API

Nå som vi har serverens offentlige IP-adresse, kan vi kontakte ipvigilante.com sitt API for å hente geolokaliseringsdataene. Husk å erstatte med den faktiske IP-adressen som ble returnert fra forrige kommando.

curl https://ipvigilante.com/

La oss se nærmere på dataene som returneres:

API-et returnerer by, land og kontinent der serveren befinner seg, samt tilnærmede bredde- og lengdegradskoordinater. Disse kan brukes til å vise serverens plassering på et kart. I vårt skript, fokuserer vi på feltene «breddegrad», «lengdegrad», «bynavn» og «landnavn». jq håndterer API-dataene og trekker ut disse spesifikke feltene.

Opprett et skript for å automatisere API-kall

Vi kan lage et skript for å automatisk hente geolokaliseringsdataene og lagre dem i en fil i CSV-format. Dataene lagres i en fil som heter server_location.txt i /tmp/-katalogen. Åpne din foretrukne tekstredigerer og opprett et skript som heter geolocate.sh. Sett inn koden nedenfor, og pass på å erstatte IP-adressen med din egen:

#!/bin/sh
    
OUTPUT_FILE=/tmp/server_location.txt

# Hent serverens offentlige IP-adresse
PUBLIC_IP=`curl -s https://ipinfo.io/ip`

# Kall geolokaliserings-API og lagre 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 returner til terminalen. Gjør skriptet kjørbart ved å gi utførelsestillatelse til filen:

chmod u+x geolocate.sh

Du er nå klar til å teste det ut. Kjør skriptet geolocate.sh og sjekk innholdet i utdatafilen:

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

Oppdater geolokaliseringsdata daglig med en Cron-jobb

La oss opprette en cron-jobb for å oppdatere serverens geolokaliseringsdata daglig og lagre det i en fil. Denne jobben oppdaterer en fil kalt server_location.txt i /tmp/-mappen. For å opprette en 24-timers cron-jobb, kan vi legge til skriptet i /etc/cron.daily-katalogen. Husk at vi må bruke sudo for å kopiere filen som root-bruker for å unngå tillatelsesproblemer. Bruk følgende kommando for å kopiere geolocate.sh til /etc/cron.daily-katalogen:

sudo cp geolocate.sh /etc/cron.daily

Disse endringene trer i kraft umiddelbart, og skriptet vil kjøres hver 24. time for å oppdatere innholdet i filen /tmp/server_location.txt. Disse dataene kan brukes til mange formål, for eksempel å plassere serverne på et kart eller å kombinere geolokalisering med trafikklogger for å identifisere serverens hotspots rundt om i verden.