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.
Indholdsfortegnelse
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!
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
curl https://ipvigilante.com/
Lad os se nærmere på, hvilke data vi får tilbage fra dette opkald:
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.