Puteți găsi locația geografică a unui sistem Linux la distanță folosind API-uri deschise și un script bash simplu. Geolocalizarea unui server vă poate ajuta să îl urmăriți în lumea fizică, asigurându-vă că serverele sunt situate în hotspot-uri regionale.
Fiecare server de pe internet are o adresă IP publică. Acesta este fie atribuit direct serverului, fie atribuit unui router care trimite trafic către acel server. Adresele IP ne oferă un indiciu despre unde se află acel server în lume. Putem obține aceste date de geolocalizare prin două API-uri deschise, furnizate de ipinfo.co și IP Vigilante și le putem folosi pentru a vedea orașul, statul și țara asociate cu un server sau alt sistem la distanță. Acest lucru nu vă oferă o locație GPS precisă; vă permite doar să vedeți zona generală a adresei IP.
Cuprins
Conectați-vă la un sistem de la distanță
Veți rula următoarele comenzi pe serverul Linux sau pe alte sisteme de la distanță pe care doriți să le geolocați, așa că mai întâi trebuie să vă conectați la server și să accesați un shell de pe acesta. De exemplu, vă puteți conecta prin SSH. Ai putea rula comenzile pe sistemul tău local pentru a-i găsi locația, dar probabil că știi deja unde te afli!
Instalați curl și jq
Avem nevoie de două instrumente pentru a accesa API-ul de geolocalizare: curl pentru a face solicitări HTTP și jq pentru a procesa datele JSON pe care le primim înapoi. Deschideți un terminal și utilizați apt-get pentru a instala aceste instrumente pe sistemele bazate pe Ubuntu sau Debian. Pe alte distribuții Linux, utilizați instrumentul de instalare a pachetelor din distribuția dvs. Linux.
sudo apt-get install curl jq
Găsiți adresa IP publică a serverului
De asemenea, avem nevoie de adresa IP publică a serverului înainte de a putea obține datele de geolocalizare. Utilizați curl pentru a efectua un apel API către ipinfo.io în fereastra terminalului dvs.
curl https://ipinfo.io/ip
Obțineți date despre locație din API
Acum că avem IP-ul public al serverului, putem efectua un apel la API-ul ipvigilante.com pentru a obține datele de geolocalizare. A inlocui
curl https://ipvigilante.com/
Să aruncăm o privire mai atentă la ce date primim din acest apel:
API-ul returnează orașul, țara și continentul în care se află serverul nostru. De asemenea, returnează coordonatele aproximative de latitudine și longitudine, în cazul în care dorim să desenăm acest server pe o hartă interactivă. Vom folosi „latitudine”, „longitudine”, „nume_oraș” și „nume_țară” în scriptul nostru. Comanda jq înțelege cum să proceseze datele API și să extragă aceste patru câmpuri.
Crearea unui script pentru a automatiza apelul API
Putem crea un script care preia datele de localizare geografică și le scrie într-un fișier în format CSV. Datele vor fi scrise într-un fișier numit server_location.txt în directorul /tmp/. Deschideți editorul preferat și creați un script numit geolocate.sh. Introduceți conținutul scriptului afișat mai jos și asigurați-vă că înlocuiți adresa IP cu adresa dvs.:
#!/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
Salvați scriptul și reveniți la terminal. Faceți scriptul executabil de pe terminal, acordând permisiunea de execuție pe acest fișier.
chmod u+x geolocate.sh
Acum sunteți gata să-l testați. Rulați scriptul geolocate.sh și verificați conținutul fișierului de ieșire:
./geolocate.sh cat /tmp/server_location.txt
Actualizarea datelor de geolocalizare o dată pe zi cu o lucrare Cron
Să creăm un job cron pentru ca serverul nostru să-și actualizeze locația geografică și să-l salveze într-un fișier o dată pe zi. Lucrarea cron zilnică actualizează un fișier numit server_location.txt în folderul /tmp/ al serverului. Crearea unui job cron de 24 de ore este la fel de ușoară ca și introducerea scriptului nostru în directorul /etc/cron.daily. Trebuie să folosim comanda sudo pentru a copia fișierul ca utilizator root, pentru a evita problemele de permisiune. Rulați următoarea comandă pentru a copia geolocate.sh în directorul /etc/cron.daily.
sudo cp geolocate.sh /etc/cron.daily
Aceste modificări sunt imediate, iar scriptul nostru va rula la fiecare 24 de ore pentru a actualiza conținutul fișierului /tmp/server_location.txt. Putem folosi aceste date pentru a face lucruri interesante, cum ar fi reprezentarea serverelor noastre pe o hartă, precum și combinarea geolocalizării cu jurnalele de trafic pentru a vedea unde din lume se află hotspot-urile serverelor noastre.