Kā iegūt sistēmas ģeogrāfisko atrašanās vietu no Bash skripta

Varat atrast attālās Linux sistēmas ģeogrāfisko atrašanās vietu, izmantojot atvērtās API un vienkāršu bash skriptu. Servera ģeogrāfiskās atrašanās vietas noteikšana varētu palīdzēt izsekot tam fiziskajā pasaulē, nodrošinot, ka serveri atrodas reģionālajos karstajos punktos.

Katram serverim internetā ir publiska IP adrese. Tas ir vai nu tieši piešķirts serverim, vai arī maršrutētājam, kas sūta trafiku uz šo serveri. IP adreses sniedz mums nojausmu par to, kur pasaulē atrodas šis serveris. Mēs varam iegūt šos ģeogrāfiskās atrašanās vietas datus, izmantojot divas atvērtas API, ko nodrošina ipinfo.co un IP Vigilante, un izmantot tos, lai redzētu pilsētu, štatu un valsti, kas saistīta ar serveri vai citu attālo sistēmu. Tas nedod jums precīzu GPS atrašanās vietu; tas tikai ļauj jums redzēt vispārējo IP adreses apgabalu.

Izveidojiet savienojumu ar attālo sistēmu

Linux serverī vai citās attālās sistēmās, kurām vēlaties noteikt ģeogrāfisko atrašanās vietu, tiks darbinātas šādas komandas, tāpēc vispirms ir jāizveido savienojums ar serveri un jāpiekļūst tā apvalkam. Piemēram, varat izveidot savienojumu, izmantojot SSH. Varat palaist komandas savā vietējā sistēmā, lai atrastu tās atrašanās vietu, taču jūs, iespējams, jau zināt, kur atrodaties!

  Kā Mac datorā pievienot cilvēkus un uzņēmumus kontaktpersonām

Instalējiet curl un jq

Mums ir nepieciešami divi rīki, lai piekļūtu ģeogrāfiskās atrašanās vietas noteikšanas API: curl, lai veiktu HTTP pieprasījumus, un jq, lai apstrādātu JSON datus, ko mēs saņemam. Atveriet termināli un izmantojiet apt-get, lai instalētu šos rīkus sistēmās, kuru pamatā ir Ubuntu vai Debian. Citos Linux izplatījumos izmantojiet sava Linux izplatīšanas pakotnes instalēšanas rīku.

sudo apt-get install curl jq

Atrodiet servera publisko IP adresi

Lai iegūtu ģeogrāfiskās atrašanās vietas datus, mums ir nepieciešama arī servera publiskā IP adrese. Izmantojiet curl, lai termināļa logā veiktu API izsaukumu uz ipinfo.io.

curl https://ipinfo.io/ip

Iegūstiet atrašanās vietas datus no API

Tagad, kad mums ir servera publiskais IP, mēs varam piezvanīt uz ipvigilante.com API, lai iegūtu ģeogrāfiskās atrašanās vietas datus. Aizvietot ar adresi, kas tika atgriezta iepriekšējā komandā.

curl https://ipvigilante.com/

Sīkāk apskatīsim, kādus datus mēs saņemam no šī zvana:

API atgriež pilsētu, valsti un kontinentu, kurā atrodas mūsu serveris. Tas arī atgriež aptuvenās platuma un garuma koordinātas, ja mēs vēlamies uzzīmēt šo serveri interaktīvā kartē. Mēs savā skriptā izmantosim “platums”, “garums”, “pilsētas_nosaukums” un “valsts_nosaukums”. Komanda jq saprot, kā apstrādāt API datus un izvilkt šos četrus laukus.

Skripta izveide, lai automatizētu API zvanu

Mēs varam izveidot skriptu, kas satver ģeogrāfiskās atrašanās vietas datus un ieraksta tos failā CSV formātā. Dati tiks ierakstīti failā server_location.txt direktorijā /tmp/. Atveriet savu iecienītāko redaktoru un izveidojiet skriptu ar nosaukumu geolocate.sh . Ievietojiet tālāk redzamo skripta saturu un noteikti nomainiet IP adresi ar savu:

#!/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

Saglabājiet skriptu un dodieties atpakaļ uz termināli. Padariet skriptu izpildāmu no termināļa, piešķirot izpildes atļauju šim failam.

chmod u+x geolocate.sh

Tagad esat gatavs to pārbaudīt. Palaidiet skriptu geolocate.sh un pārbaudiet izvades faila saturu:

./geolocate.sh
cat /tmp/server_location.txt

Ģeolokācijas datu atjaunināšana reizi dienā, izmantojot Cron darbu

Izveidosim cron uzdevumu, lai mūsu serveris vienu reizi dienā atjauninātu savu ģeogrāfisko atrašanās vietu un saglabātu to failā. Ikdienas cron darbs atjaunina failu server_location.txt servera mapē /tmp/. 24 stundu cron darba izveide ir tikpat vienkārša kā mūsu skripta ievietošana direktorijā /etc/cron.daily. Mums ir jāizmanto komanda sudo, lai kopētu failu kā root lietotājam, lai izvairītos no problēmām ar atļaujām. Palaidiet šo komandu, lai kopētu geolocate.sh direktorijā /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Šīs izmaiņas ir tūlītējas, un mūsu skripts darbosies ik pēc 24 stundām, lai atjauninātu /tmp/server_location.txt faila saturu. Mēs varam izmantot šos datus, lai veiktu interesantas darbības, piemēram, uzzīmētu mūsu serverus kartē, kā arī apvienotu ģeogrāfisko atrašanās vietu ar satiksmes žurnāliem, lai redzētu, kur pasaulē atrodas mūsu serveru karstie punkti.