Geografsku lokaciju udaljenog Linux sistema možete utvrditi korišćenjem javno dostupnih API-ja i jednostavne bash skripte. Lociranje servera može biti od koristi za praćenje njegovog fizičkog položaja, osiguravajući da se serveri nalaze na željenim regionalnim lokacijama.
Svaki server povezan na internet poseduje javnu IP adresu. Ova adresa se dodeljuje direktno serveru ili ruteru koji usmerava saobraćaj ka serveru. IP adrese pružaju informacije o približnoj lokaciji servera u svetu. Ovi geolokacijski podaci mogu se pribaviti putem dva otvorena API-ja, koje pružaju ipinfo.co i IP Vigilante. Ovi API-ji omogućavaju uvid u grad, državu i zemlju povezanu sa serverom ili drugim udaljenim sistemom. Važno je napomenuti da se ne dobija precizna GPS lokacija, već samo opšta oblast IP adrese.
Uspostavljanje veze sa udaljenim sistemom
Sledeće komande će se izvršavati na Linux serveru ili drugim udaljenim sistemima čiju lokaciju želite da utvrdite, stoga je potrebno prvo se povezati sa serverom i pristupiti njegovoj komandnoj liniji. Primer za povezivanje je SSH. Komande za pronalaženje lokacije mogu se izvršiti i na lokalnom sistemu, ali je njegova lokacija obično poznata.
Instalacija curl i jq
Za pristup API-jima za geolokaciju potrebna su dva alata: curl za slanje HTTP zahteva i jq za obradu JSON podataka. Otvorite terminal i koristite apt-get za instalaciju ovih alata na Ubuntu ili Debian sistemima. Za druge Linux distribucije, koristite odgovarajući alat za instalaciju paketa.
sudo apt-get install curl jq
Pronalaženje javne IP adrese servera
Pre pribavljanja geolokacijskih podataka, neophodno je utvrditi javnu IP adresu servera. U terminalu, koristite curl za upućivanje API poziva ka ipinfo.io.
curl https://ipinfo.io/ip
Dobijanje podataka o lokaciji putem API-ja
Kada se pribavi javna IP adresa servera, moguće je uputiti poziv API-ju ipvigilante.com radi dobijanja podataka o geolokaciji. Zameni tekst
curl https://ipvigilante.com/
Detaljnije pogledajmo podatke koji se dobijaju iz ovog poziva:
API vraća grad, zemlju i kontinent na kojem se server nalazi. Takođe, vraća približne koordinate geografske širine i dužine, za potrebe iscrtavanja servera na interaktivnoj mapi. U skripti će se koristiti „latitude“, „longitude“, „city_name“ i „country_name“. Komanda jq omogućava obradu API podataka i izdvajanje ovih ključnih polja.
Kreiranje skripte za automatizaciju API poziva
Može se kreirati skripta koja prikuplja geolokacijske podatke i zapisuje ih u CSV formatu. Podaci će biti upisani u datoteku nazvanu server_location.txt u direktorijumu /tmp/. Otvorite omiljeni editor i kreirajte skriptu pod nazivom geolocate.sh. U skriptu unesite sadržaj prikazan ispod, uz obaveznu zamenu IP adrese svojom:
#!/bin/sh OUTPUT_FILE=/tmp/server_location.txt # Preuzimanje javne IP adrese servera PUBLIC_IP=`curl -s https://ipinfo.io/ip` # Pozivanje API-ja za geolokaciju i preuzimanje rezultata 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
Nakon čuvanja skripte, vratite se na terminal. Učinite skriptu izvršnom, dodeljivanjem odgovarajuće dozvole za izvršavanje.
chmod u+x geolocate.sh
Sada je skripta spremna za testiranje. Pokrenite geolocate.sh skriptu i proverite sadržaj izlazne datoteke:
./geolocate.sh cat /tmp/server_location.txt
Ažuriranje geolokacijskih podataka jednom dnevno putem Cron posla
Napravimo cron posao koji će svakodnevno ažurirati geolokaciju servera i sačuvati je u datoteku. Dnevni cron posao će ažurirati datoteku server_location.txt u /tmp/ direktorijumu servera. Kreiranje 24-časovnog cron posla postiže se postavljanjem skripte u /etc/cron.daily direktorijum. Koristite sudo komandu za kopiranje datoteke kao root korisnik, kako bi se izbegli problemi sa dozvolama. Pokrenite sledeću komandu za kopiranje geolocate.sh u /etc/cron.daily direktorijum.
sudo cp geolocate.sh /etc/cron.daily
Ove promene stupaju na snagu odmah, a skripta će se izvršavati svakih 24 sata i ažurirati sadržaj datoteke /tmp/server_location.txt. Ovi podaci se mogu koristiti za različite svrhe, kao što je iscrtavanje servera na mapi, ili kombinovanje geolokacije sa podacima o saobraćaju radi utvrđivanja žarišnih tačaka servera u svetu.