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, który jest albo bezpośrednio przypisywany do serwera, albo przypisywany do routera, który wysyła ruch do tego serwera. Adresy IP dają nam wskazówkę, gdzie na świecie znajduje się dany serwer. Możemy uzyskać te dane geolokalizacyjne za pośrednictwem dwóch otwartych interfejsów API, dostarczonych przez ipinfo.co i IP Vigilante, aby zobaczyć miasto, stan i kraj powiązany z serwerem lub innym zdalnym systemem. To nie daje dokładnej lokalizacji GPS, ale 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 zdalnych systemach, które chcesz geolokalizować, więc musisz najpierw połączyć się z serwerem i uzyskać 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 danej 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 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ąp
curl https://ipvigilante.com/
Przyjrzyjmy się bliżej, jakie dane otrzymujemy z tego połączenia:
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
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.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.