Sådan får du dit systems geografiske placering fra et Bash-script
Du kan finde den geografiske placering af et fjernt Linux-system ved hjælp af åbne API'er og et simpelt bash script. Geolocating en server kan hjælpe dig med at spore det i den fysiske verden, og sikre, at servere er placeret i regionale hotspots.
Hver server på internettet har en offentlig IP-adresse. Dette er enten direkte tildelt serveren eller tildelt til en router, der sender trafik til den pågældende server. IP-adresser giver os et fingerpeg om, hvor den server er placeret i verden. Vi kan få disse geolocation data via to åbne API'er, leveret af ipinfo.co og IP Vigilante, og brug den til at se byen, staten og landet er forbundet med en server eller et andet fjernsystem. Dette giver dig ikke en præcis GPS-placering; det lader dig bare se det generelle område af IP-adressen.
Tilslut til et fjernsystem
Du kører følgende kommandoer på Linux-serveren eller andre fjernsystemer, du vil geolocate, så du skal oprette forbindelse til serveren og få adgang til en shell på den først. For eksempel kan du oprette forbindelse via SSH. Du kan køre kommandoer på dit lokale system for at finde sin placering, men du ved sikkert nok allerede, hvor du er!
Installer krølle og jq
Vi har brug for to værktøjer til at få adgang til geolocation API: krølle
at lave HTTP-anmodninger og JQ
at behandle de JSON data, som vi kommer tilbage. Åbn en terminal og brug apt-get
at installere disse værktøjer på Ubuntu eller Debian-baserede systemer. På andre Linux-distributioner skal du bruge Linux-distributionens pakkeinstallationsværktøj i stedet.
sudo apt-get install krøller jq
Find serverens offentlige IP-adresse
Vi har også brug for serverens offentlige IP-adresse, før vi kan få geolocation-dataene. Brug krølle
at foretage et API-opkald til ipinfo.io i dit terminalvindue.
krølle https://ipinfo.io/ip
Få placeringsdata fra API'en
Nu hvor vi har serverens offentlige IP, kan vi ringe til ipvigilante.com API for at få geolocation data. Erstatte med den adresse, der kom tilbage i den foregående kommando.
curl https://ipvigilante.com/
Lad os se nærmere på, hvilke data vi kommer tilbage fra dette opkald:
API'en returnerer byen, landet og kontinentet, hvor vores server er bosat. Det returnerer også de omtrentlige bredde- og længdegradskoordinater, hvis vi ønsker at tegne denne server på et interaktivt kort. Vi bruger "breddegrad", "længdegrad", "bynavn" og "landnavn" i vores script. Det JQ
kommando forstår, hvordan man behandler API-dataene og udtræk disse fire felter ud.
Oprettelse af et script til automatisering af API-opkaldet
Vi kan oprette et script, der tager fat på geolokationsdataene og skriver det til en fil i CSV-format. Dataene vil blive skrevet til en fil, der hedder server_location.txt
i / Tmp /
vejviser. Åbn din yndlingsredaktør og opret et script, der hedder geolocate.sh
. Indsæt scriptets indhold vist nedenfor, og sørg for at erstatte IP-adressen med din egen:
#! / bin / sh OUTPUT_FILE = / tmp / server_location.txt # Grib denne serveres offentlige IP-adresse PUBLIC_IP = "curl -s https://ipinfo.io/ip" # Ring til geolocation API og fange output curl -s https : //ipvigilante.com/$ PUBLIC_IP | \ jq '.data.latitude, data.longitude, .data.city_name, .data.country_name' | \ mens du læser -r LATITUDE; læs -r LONGITUDE læs -r CITY læs -r COUNTRY echo "$ LATITUDE, $ LONGITUDE, $ CITY, $ COUNTRY" | \ tr - delete \ "> \ $ OUTPUT_FILE er udført
Gem scriptet og gå tilbage til terminalen. Gør scriptet eksekverbart fra terminalen ved at give tilladelsen til at udføre denne fil.
chmod u + x geolocate.sh
Nu er du klar til at teste det ud. Kør geolocate.sh
script og tjek indholdet af outputfilen:
./geolocate.sh cat /tmp/server_location.txt
Opdatering af Geolocation Data En gang om dagen med en Cron Job
Lad os oprette et cronjob for at gøre vores server opdateret sin geolocation og gemme den til en fil en gang om dagen. Det daglige cron-job opdaterer en fil, der hedder server_location.txt
i / Tmp /
mappe på serveren. Oprettelse af et 24-timers cron job er lige så nemt som at sætte vores script ind i /etc/cron.daily
vejviser. Vi skal bruge sudo-kommandoen til at kopiere filen som root-bruger for at undgå tilladelsesproblemer. Kør følgende kommando for at kopiere geolocate.sh
til /etc/cron.daily
vejviser.
sudo cp geolocate.sh /etc/cron.daily
Disse ændringer er øjeblikkelige, og vores script vil køre hver 24. time for at opdatere indholdet af /tmp/server_location.txt
fil. Vi kan bruge disse data til at gøre interessante ting, som f.eks. At plotte vores servere på et kort, samt at kombinere geolocation med trafiklogs for at se, hvor i verden vores server hotspots er.