Jak získat geografickou polohu vašeho systému z Bash skriptu

Zjištění geografické polohy serveru Linux pomocí skriptu

Chcete-li zjistit, kde se fyzicky nachází váš vzdálený server s Linuxem, můžete využít veřejně dostupná API a jednoduchý skript v Bash. Lokalizace serveru může být užitečná pro sledování jeho umístění v reálném světě a optimalizaci umístění serverů v regionálních uzlech.

Každý server připojený k internetu má svou veřejnou IP adresu. Tato adresa je buď přímo přiřazena serveru, nebo routeru, který přesměrovává provoz na tento server. IP adresy poskytují informace o přibližném umístění serveru na Zemi. Tyto geolokační údaje lze získat pomocí dvou otevřených API, konkrétně od ipinfo.co a IP Vigilante. Získané informace umožňují zjistit město, region a zemi, se kterými je daný server spojen. Je důležité poznamenat, že nezískáte přesné GPS souřadnice, ale pouze obecnou oblast odpovídající dané IP adrese.

Přístup ke vzdálenému systému

Následující příkazy je nutné spouštět na linuxovém serveru nebo jiném vzdáleném systému, jehož polohu chcete zjistit. Proto je nejdříve nutné se k tomuto serveru připojit a získat přístup k jeho shellu. Nejčastěji se k serverům připojujeme pomocí protokolu SSH. Příkazy lze spustit i na vašem lokálním systému pro zjištění jeho polohy, ale pravděpodobně již znáte své umístění!

Instalace nástrojů curl a jq

Pro komunikaci s geolokačními API potřebujeme dva nástroje: curl pro odesílání HTTP požadavků a jq pro zpracování dat ve formátu JSON, která nám API vrací. V terminálu nainstalujte tyto nástroje pomocí apt-get na systémech založených na Ubuntu nebo Debianu. V jiných distribucích Linuxu použijte k instalaci správce balíčků vaší distribuce.

sudo apt-get install curl jq

Zjištění veřejné IP adresy serveru

Před získáním geolokačních dat potřebujeme znát veřejnou IP adresu serveru. Pomocí nástroje curl odešlete dotaz na API ipinfo.io z terminálu:

curl https://ipinfo.io/ip

Získání dat o poloze z API

Nyní, když máme veřejnou IP adresu serveru, můžeme odeslat dotaz na API ipvigilante.com a získat geolokační údaje. Nahraďte adresou, kterou jste získali v předchozím kroku.

curl https://ipvigilante.com/

Podívejme se blíže na strukturu dat, která získáme:

API vrací město, zemi a kontinent, kde se server nachází. Také poskytuje přibližné zeměpisné souřadnice (zeměpisnou šířku a délku), pokud bychom chtěli server zobrazit na interaktivní mapě. Ve skriptu budeme používat pole "latitude", "longitude", "city_name" a "country_name". Příkaz jq umí zpracovat data z API a extrahovat z nich právě tato čtyři pole.

Vytvoření skriptu pro automatizaci volání API

Můžeme vytvořit skript, který automaticky získá geolokační data a uloží je do souboru ve formátu CSV. Data budou zapisována do souboru server_location.txt v adresáři /tmp/. Otevřete libovolný textový editor a vytvořte skript s názvem geolocate.sh. Vložte do něj následující obsah, přičemž nezapomeňte nahradit IP adresu svojí vlastní:

#!/bin/sh

OUTPUT_FILE=/tmp/server_location.txt

# Získání veřejné IP adresy serveru
PUBLIC_IP=`curl -s https://ipinfo.io/ip`

# Volání geolokačního API a zachycení výstupu
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

Uložte skript a vraťte se do terminálu. Udělte skriptu právo spouštění:

chmod u+x geolocate.sh

Nyní je skript připraven ke spuštění. Spusťte skript geolocate.sh a zkontrolujte obsah výstupního souboru:

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

Automatická aktualizace dat pomocí Cron Job

Nastavíme úlohu Cron, která zajistí, že server bude jednou denně aktualizovat svou geolokaci a ukládat ji do souboru. Denní úloha Cron bude aktualizovat soubor server_location.txt ve složce /tmp/ na serveru. Vytvoření úlohy Cron spouštěné každých 24 hodin je jednoduché. Stačí zkopírovat náš skript do adresáře /etc/cron.daily. Pro kopírování souboru jako uživatel root musíme použít příkaz sudo, aby nedošlo k problémům s oprávněními. Spusťte následující příkaz pro zkopírování geolocate.sh do /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Tyto změny jsou okamžité a skript se bude spouštět každých 24 hodin, aby aktualizoval obsah souboru /tmp/server_location.txt. Tato data můžeme dále využít k zajímavým účelům, jako je například zobrazení serverů na mapě a kombinování geolokace s daty o provozu, abychom lépe pochopili, odkud pochází největší aktivita na serveru.