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.