Nyílt API-k és egy egyszerű bash szkript segítségével megkeresheti egy távoli Linux rendszer földrajzi helyét. A kiszolgáló földrajzi helyének meghatározása segíthet nyomon követni azt a fizikai világban, biztosítva, hogy a szerverek regionális hotspotokon helyezkedjenek el.
Az interneten minden szerver rendelkezik nyilvános IP-címmel. Ez vagy közvetlenül a kiszolgálóhoz van hozzárendelve, vagy egy olyan útválasztóhoz van hozzárendelve, amely forgalmat küld a szerverre. Az IP-címek támpontot adnak nekünk arról, hogy a szerver hol található a világon. Ezeket a földrajzi helyadatokat két nyílt API-n keresztül kaphatjuk meg, amelyeket az ipinfo.co és az IP Vigilante biztosít, és felhasználhatjuk a szerverhez vagy más távoli rendszerhez társított város, állam és ország megtekintéséhez. Ez nem ad pontos GPS-helyzetet; csak az IP-cím általános területét látja.
Tartalomjegyzék
Csatlakozás egy távoli rendszerhez
A következő parancsokat fogja futtatni azon a Linux-kiszolgálón vagy más távoli rendszeren, amelyet földrajzi helyzetbe szeretne helyezni, ezért először csatlakoznia kell a kiszolgálóhoz, és hozzá kell férnie egy shell-hez. Például SSH-n keresztül csatlakozhat. Futtathatja a parancsokat a helyi rendszeren, hogy megtalálja a helyét, de valószínűleg már tudja, hol van!
Telepítse a curl-t és a jq-t
Két eszközre van szükségünk a földrajzi helymeghatározási API eléréséhez: a curl-re a HTTP-kérésekhez és a jq-ra a visszakapott JSON-adatok feldolgozásához. Nyisson meg egy terminált, és az apt-get használatával telepítse ezeket az eszközöket Ubuntu vagy Debian alapú rendszerekre. Más Linux disztribúciók esetén használja inkább a Linux disztribúció csomagtelepítő eszközét.
sudo apt-get install curl jq
Keresse meg a szerver nyilvános IP-címét
Szükségünk van a szerver nyilvános IP-címére is, mielőtt megkapjuk a földrajzi helyadatokat. A curl használatával API-hívást kezdeményezhet az ipinfo.io címre a terminálablakban.
curl https://ipinfo.io/ip
Helyadatok beszerzése az API-ból
Most, hogy megvan a szerver nyilvános IP-címe, felhívhatjuk az ipvigilante.com API-ját, hogy megkapjuk a földrajzi helyadatokat. Cserélje ki
curl https://ipvigilante.com/
Nézzük meg közelebbről, milyen adatokat kapunk vissza ebből a hívásból:
Az API azt a várost, országot és kontinenst adja vissza, ahol a szerverünk található. Visszaadja a hozzávetőleges szélességi és hosszúsági koordinátákat is, arra az esetre, ha ezt a szervert interaktív térképre szeretnénk rajzolni. A szkriptünkben a „szélesség”, „hosszúság”, „város_neve” és „ország_neve” kifejezéseket fogjuk használni. A jq parancs megérti, hogyan kell feldolgozni az API-adatokat és kivonni ezt a négy mezőt.
Szkript létrehozása az API-hívás automatizálásához
Létrehozhatunk egy szkriptet, amely megragadja a földrajzi helyadatokat, és CSV formátumban fájlba írja. Az adatok a /tmp/ könyvtárban található server_location.txt fájlba kerülnek. Nyissa meg kedvenc szerkesztőjét, és hozzon létre egy geolocate.sh nevű szkriptet. Illessze be az alább látható szkript tartalmát, és cserélje ki az IP-címet a sajátjára:
#!/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
Mentse el a szkriptet, és térjen vissza a terminálhoz. Tegye végrehajthatóvá a szkriptet a terminálról úgy, hogy ehhez a fájlhoz megadja a végrehajtási engedélyt.
chmod u+x geolocate.sh
Most készen áll a tesztelésre. Futtassa a geolocate.sh szkriptet, és ellenőrizze a kimeneti fájl tartalmát:
./geolocate.sh cat /tmp/server_location.txt
A földrajzi helymeghatározási adatok napi egyszeri frissítése Cron-munkával
Hozzunk létre egy cron feladatot, hogy a szerverünk frissítse a földrajzi elhelyezkedését, és naponta egyszer mentse el egy fájlba. A napi cron feladat frissíti a szerver /tmp/ mappájában található server_location.txt fájlt. Egy 24 órás cron-feladat létrehozása olyan egyszerű, mintha a szkriptünket az /etc/cron.daily könyvtárba helyeznénk. A sudo parancsot kell használnunk a fájl másolásához root felhasználóként, hogy elkerüljük az engedélyekkel kapcsolatos problémákat. Futtassa a következő parancsot a geolocate.sh fájl /etc/cron.daily könyvtárba másolásához.
sudo cp geolocate.sh /etc/cron.daily
Ezek a változtatások azonnaliak, és a szkriptünk 24 óránként lefut, hogy frissítse a /tmp/server_location.txt fájl tartalmát. Ezeket az adatokat érdekes dolgokra használhatjuk fel, például a szervereinket térképen ábrázolhatjuk, valamint a földrajzi helymeghatározást a forgalmi naplókkal kombinálhatjuk, hogy megtudjuk, hol vannak a világban szervereink hotspotjaink.