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

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.

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!

  Co je to Smarthome?

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 s adresou, která se vrátila v předchozím příkazu.

curl https://ipvigilante.com/

Podívejme se blíže na to, jaká data z tohoto hovoru získáme:

  Jak graficky upravovat textové soubory na Linuxu pomocí gedit

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.

  Nejlepší alternativy k soukromému přístupu k internetu (PIA) v roce 2020