Jak uzyskać lokalizację geograficzną systemu ze skryptu Bash
Możesz znaleźć położenie geograficzne zdalnego systemu Linux przy użyciu otwartych interfejsów API i prostego skryptu bash. Geolokalizacja serwera może pomóc w śledzeniu go w świecie fizycznym, zapewniając, że serwery znajdują się w regionalnych punktach dostępu.
Każdy serwer w Internecie ma publiczny adres IP. Jest to bezpośrednio przypisane do serwera lub przypisane do routera, który wysyła ruch do tego serwera. Adresy IP dają nam wskazówkę, gdzie znajduje się ten serwer na świecie. Możemy uzyskać te dane geolokalizacyjne za pośrednictwem dwóch otwartych interfejsów API, udostępnianych przez ipinfo.co i IP Vigilante i wykorzystywać je do wyświetlania miasta, stanu i kraju powiązanego z serwerem lub innym systemem zdalnym. To nie daje dokładnej lokalizacji GPS; pozwala zobaczyć ogólny obszar adresu IP.
Połącz się z systemem zdalnym
Będziesz uruchamiać następujące polecenia na serwerze Linux lub innych systemach zdalnych, które chcesz geolokalizować, więc musisz połączyć się z serwerem i uzyskać dostęp do powłoki na nim. Na przykład możesz połączyć się przez SSH. Można 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 interfejsu API geolokalizacji: kędzior
aby wysyłać żądania HTTP i jq
przetwarzać dane JSON, które otrzymujemy. Otwórz terminal i użyj apt-get
zainstalować te narzędzia na systemach Ubuntu lub Debian. W innych dystrybucjach Linuksa użyj zamiast tego narzędzia do instalacji pakietów Linux.
sudo apt-get install curl jq
Znajdź publiczny adres IP serwera
Potrzebujemy również publicznego adresu IP serwera, zanim będziemy mogli uzyskać dane geolokacyjne. Posługiwać się kędzior
wykonać wywołanie 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ć połączenie z API ipvigilante.com, aby uzyskać dane geolokacyjne. Zastąpić z adresem, który powrócił w poprzednim poleceniu.
curl https://ipvigilante.com/
Przyjrzyjmy się, jakie dane otrzymujemy z tego połączenia:
Interfejs API zwraca miasto, kraj i kontynent, w 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ć "szerokości geograficznej", "długości geograficznej", "city_name" i "country_name". The jq
command rozumie, jak przetwarzać dane API i wyodrębnić te cztery pola.
Tworzenie skryptu w celu automatyzacji wywołania interfejsu API
Możemy stworzyć skrypt pobierający dane geolokacyjne i zapisujący go do pliku w formacie CSV. Dane zostaną zapisane do pliku o nazwie server_location.txt
w / tmp /
informator. Otwórz swój ulubiony edytor i utwórz skrypt o nazwie geolocate.sh
. Wstaw zawartość skryptu pokazaną poniżej i pamiętaj, aby zamienić adres IP na własny:
#! / bin / sh OUTPUT_FILE = / tmp / server_location.txt # Chwyć publiczny adres IP tego serwera PUBLIC_IP = "curl -s https://ipinfo.io/ip" # Wywołaj interfejs API geolokalizacji i przechwyć wyjściowy kod -s https : //ipvigilante.com/$ PUBLIC_IP | \ jq '.data.latitude, .data.longitude, .data.city_name, .data.country_name' | \ while read -r LATITUDE; do odczytu -r LONGITUDE czytaj -r CITY read -r KRAJ echo "$ LATITUDE, $ LONGITUDE, $ CITY, $ COUNTRY" | \ tr --delete \ "> \ $ OUTPUT_FILE done
Zapisz skrypt i wróć do terminala. Wykonaj skrypt wykonywalny z terminala, nadając temu plikowi uprawnienia do wykonywania.
chmod u + x geolocate.sh
Teraz możesz go przetestować. Uruchom geolocate.sh
skrypt i sprawdź zawartość pliku wyjściowego:
./geolocate.sh cat /tmp/server_location.txt
Aktualizowanie danych geolokacyjnych raz dziennie przy pomocy zadania Cron
Stwórzmy zadanie cron, aby nasz serwer aktualizował geolokalizację i zapisuj ją do pliku raz dziennie. Codzienne zadanie cron aktualizuje plik o nazwie server_location.txt
w / tmp /
folder serwera. Stworzenie 24-godzinnego zadania cron jest tak proste, jak wpisanie naszego skryptu w /etc/cron.daily
informator. 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 /etc/cron.daily
informator.
sudo cp geolocate.sh /etc/cron.daily
Te zmiany są natychmiastowe, a nasz skrypt będzie uruchamiany co 24 godziny, aby zaktualizować zawartość /tmp/server_location.txt
plik. 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 są nasze hotspoty serwerów.