Geografickou polohu vzdáleného systému Linux můžete najít pomocí otevřených API a jednoduchého bash skriptu. Geolokace serveru vám může pomoci sledovat jej ve fyzickém světě a zajistit, aby byly servery umístěny v regionálních hotspotech.
Každý server na internetu má veřejnou IP adresu. To je buď přímo přiřazeno k serveru, nebo přiřazeno routeru, který odesílá provoz na tento server. IP adresy nám dávají ponětí o tom, kde se tento server na světě nachází. Tato geolokační data můžeme získat prostřednictvím dvou otevřených API poskytovaných ipinfo.co a IP Vigilante a použít je k zobrazení města, státu a země spojené se serverem nebo jiným vzdáleným systémem. To vám nedává přesnou polohu GPS; jen vám to umožní vidět obecnou oblast IP adresy.
Table of Contents
Připojte se ke vzdálenému systému
Na linuxovém serveru nebo jiných vzdálených systémech, které chcete geolokalizovat, budete spouštět následující příkazy, takže se musíte nejprve připojit k serveru a přistupovat k shellu na něm. Můžete se například připojit přes SSH. Můžete spustit příkazy na vašem místním systému, abyste našli jeho umístění, ale pravděpodobně už víte, kde jste!
Nainstalujte curl a jq
Pro přístup k geolokačnímu API potřebujeme dva nástroje: curl pro vytváření požadavků HTTP a jq pro zpracování dat JSON, která získáváme zpět. Otevřete terminál a pomocí apt-get nainstalujte tyto nástroje do systémů založených na Ubuntu nebo Debianu. V jiných distribucích Linuxu použijte místo toho nástroj pro instalaci balíčků vaší distribuce Linuxu.
sudo apt-get install curl jq
Najděte veřejnou IP adresu serveru
Než získáme geolokační údaje, potřebujeme také veřejnou IP adresu serveru. Pomocí curl proveďte volání API na ipinfo.io v okně terminálu.
curl https://ipinfo.io/ip
Získejte údaje o poloze z API
Nyní, když máme veřejnou IP adresu serveru, můžeme zavolat do API ipvigilante.com a získat geolokační data. Nahradit
curl https://ipvigilante.com/
Podívejme se blíže na to, jaká data z tohoto hovoru získáme:
Rozhraní API vrací město, zemi a kontinent, ve kterém sídlí náš server. Vrací také přibližné souřadnice zeměpisné šířky a délky pro případ, že bychom chtěli tento server zakreslit na interaktivní mapu. V našem skriptu budeme používat „zeměpisnou šířku“, „zeměpisnou délku“, „název_města“ a „název_země“. Příkaz jq rozumí tomu, jak zpracovat data API a extrahovat tato čtyři pole.
Vytvoření skriptu pro automatizaci volání API
Můžeme vytvořit skript, který vezme geolokační data a zapíše je do souboru ve formátu CSV. Data budou zapsána do souboru s názvem server_location.txt v adresáři /tmp/. Otevřete svůj oblíbený editor a vytvořte skript s názvem geolocate.sh. Vložte níže zobrazený obsah skriptu a nezapomeňte nahradit IP adresu svou vlastní:
#!/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
Uložte skript a přejděte zpět do terminálu. Udělejte skript spustitelný z terminálu udělením oprávnění ke spuštění tomuto souboru.
chmod u+x geolocate.sh
Nyní jste připraveni to vyzkoušet. Spusťte skript geolocate.sh a zkontrolujte obsah výstupního souboru:
./geolocate.sh cat /tmp/server_location.txt
Aktualizace geolokačních dat jednou denně pomocí Cron Job
Vytvořme úlohu cron, aby náš server aktualizoval svou geolokaci a uložil ji do souboru jednou denně. Denní úloha cron aktualizuje soubor s názvem server_location.txt ve složce /tmp/ na serveru. Vytvoření 24hodinové úlohy cron je stejně snadné jako vložení našeho skriptu do adresáře /etc/cron.daily. Ke zkopírování souboru jako uživatel root musíme použít příkaz sudo, abychom se vyhnuli problémům s oprávněními. Spuštěním následujícího příkazu zkopírujte geolocate.sh do adresáře /etc/cron.daily.
sudo cp geolocate.sh /etc/cron.daily
Tyto změny jsou okamžité a náš skript se bude spouštět každých 24 hodin, aby aktualizoval obsah souboru /tmp/server_location.txt. Tato data můžeme použít k zajímavým věcem, jako je vykreslování našich serverů na mapě a také kombinování geolokace s protokoly provozu, abychom viděli, kde na světě jsou naše aktivní body serveru.