Jak uzyskać lokalizację geograficzną systemu na podstawie skryptu Bash

Możesz znaleźć położenie geograficzne zdalnego systemu Linux za pomocą otwartych interfejsów API i prostego skryptu bash. Geolokalizacja serwera może pomóc w śledzeniu go w świecie fizycznym, zapewniając lokalizację serwerów w regionalnych hotspotach.

Każdy serwer w Internecie ma publiczny adres IP. Jest to albo bezpośrednio przypisywane do serwera, albo przypisywane do routera, który wysyła ruch do tego serwera. Adresy IP dają nam wskazówkę, gdzie na świecie znajduje się ten serwer. Możemy uzyskać te dane geolokalizacyjne za pośrednictwem dwóch otwartych interfejsów API, dostarczonych przez ipinfo.co i IP Vigilante, i użyć ich, aby zobaczyć miasto, stan i kraj powiązany z serwerem lub innym zdalnym systemem. To nie daje dokładnej lokalizacji GPS; pozwala tylko zobaczyć ogólny obszar adresu IP.

Połącz się z systemem zdalnym

Będziesz uruchamiał następujące polecenia na serwerze Linux lub innych zdalnych systemach, które chcesz geolokalizować, więc musisz najpierw połączyć się z serwerem i uzyskać na nim dostęp do powłoki. Na przykład możesz połączyć się przez SSH. Możesz uruchomić polecenia w systemie lokalnym, aby znaleźć jego lokalizację, ale prawdopodobnie już wiesz, gdzie jesteś!

Zainstaluj curl i jq

Potrzebujemy dwóch narzędzi, aby uzyskać dostęp do API geolokalizacji: curl do wysyłania żądań HTTP i jq do przetwarzania danych JSON, które otrzymujemy. Otwórz terminal i użyj apt-get, aby zainstalować te narzędzia w systemach Ubuntu lub Debian. W innych dystrybucjach Linuksa użyj zamiast tego narzędzia do instalacji pakietów dystrybucji Linuksa.

sudo apt-get install curl jq

Znajdź publiczny adres IP serwera

Potrzebujemy również publicznego adresu IP serwera, zanim będziemy mogli uzyskać dane geolokalizacyjne. Użyj curl, aby wywołać API do ipinfo.io w oknie terminala.

curl https://ipinfo.io/ip

Pobierz dane lokalizacji z interfejsu API

Teraz, gdy mamy publiczny adres IP serwera, możemy wykonać wywołanie API ipvigilante.com, aby uzyskać dane geolokalizacyjne. Zastąpić z adresem, który wrócił w poprzednim poleceniu.

curl https://ipvigilante.com/

wyjście z polecenia curl

Przyjrzyjmy się bliżej, jakie dane otrzymujemy z tego połączenia:

metadane pokazujące informacje o lokalizacji

API zwraca miasto, kraj i kontynent, na którym znajduje się nasz serwer. Zwraca również przybliżone współrzędne szerokości i długości geograficznej, na wypadek gdybyśmy chcieli narysować ten serwer na interaktywnej mapie. W naszym skrypcie będziemy używać „latitude”, „longitude”, „city_name” i „country_name”. Komenda jq wie, jak przetwarzać dane API i wyodrębniać te cztery pola.

Tworzenie skryptu w celu zautomatyzowania wywołania API

Możemy stworzyć skrypt, który pobiera dane geolokalizacyjne i zapisuje je do pliku w formacie CSV. Dane zostaną zapisane w pliku o nazwie server_location.txt w katalogu / tmp /. Otwórz swój ulubiony edytor i utwórz skrypt o nazwie geolocate.sh. Wstaw zawartość skryptu pokazaną poniżej i pamiętaj, aby zastąpić adres IP własnym:

#!/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

Zapisz skrypt i wróć do terminala. Uczyń skrypt wykonywalnym z terminala, przyznając uprawnienia do wykonywania tego pliku.

chmod u+x geolocate.sh

Teraz możesz to przetestować. Uruchom skrypt geolocate.sh i sprawdź zawartość pliku wyjściowego:

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

uruchomienie skryptu geolokalizacji

Aktualizowanie danych geolokalizacyjnych raz dziennie za pomocą zadania Cron

Utwórzmy zadanie cron, aby nasz serwer zaktualizował swoją geolokalizację i zapisał go w pliku raz dziennie. Codzienne zadanie cron aktualizuje plik o nazwie server_location.txt w folderze / tmp / na serwerze. Utworzenie 24-godzinnego zadania Cron jest tak proste, jak umieszczenie naszego skryptu w katalogu /etc/cron.daily. Musimy użyć polecenia sudo, aby skopiować plik jako użytkownik root, aby uniknąć problemów z uprawnieniami. Uruchom następujące polecenie, aby skopiować geolocate.sh do katalogu /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Te zmiany są natychmiastowe, a nasz skrypt będzie uruchamiany co 24 godziny, aby zaktualizować zawartość pliku /tmp/server_location.txt. Możemy wykorzystać te dane do robienia interesujących rzeczy, takich jak wykreślanie naszych serwerów na mapie, a także łączenie geolokalizacji z dziennikami ruchu, aby zobaczyć, gdzie na świecie znajdują się nasze hotspoty serwerów.