Startpagina » hoe » De geografische locatie van uw systeem opvragen via een basisscript

    De geografische locatie van uw systeem opvragen via een basisscript

    Toria / Shutterstock.com

    U kunt de geografische locatie van een extern Linux-systeem vinden met behulp van open API's en een eenvoudig bash-script. Het geolokaliseren van een server kan u helpen het te volgen in de fysieke wereld, en ervoor te zorgen dat servers zich in regionale hotspots bevinden.

    Elke server op internet heeft een openbaar gericht IP-adres. Dit is ofwel direct toegewezen aan de server of toegewezen aan een router die verkeer naar die server stuurt. IP-adressen geven ons een idee waar die server zich in de wereld bevindt. We kunnen deze geolocatiegegevens verkrijgen via twee open API's, geboden door ipinfo.co en IP Vigilante en gebruiken deze om de stad, staat en het land te bekijken die aan een server of ander extern systeem zijn gekoppeld. Dit geeft u geen nauwkeurige GPS-locatie; het laat je gewoon het algemene gedeelte van het IP-adres zien.

    Maak verbinding met een systeem op afstand

    U voert de volgende opdrachten uit op de Linux-server of andere externe systemen die u wilt geolokaliseren, dus u moet eerst verbinding maken met de server en daar toegang toe krijgen. U kunt bijvoorbeeld verbinding maken via SSH. Je zou de commando's op je lokale systeem kunnen uitvoeren om de locatie te vinden, maar je weet waarschijnlijk al waar je bent!

    Installeer krul en jq

    We hebben twee hulpprogramma's nodig om toegang te krijgen tot de geolocatie-API: Krul om HTTP-verzoeken te doen en  jQ om de JSON-gegevens te verwerken die we terug krijgen. Open een terminal en gebruik  apt-get om deze tools te installeren op Ubuntu- of Debian-gebaseerde systemen. Gebruik op andere Linux-distributies in plaats daarvan de pakketinstallatietool van uw Linux-distributie.

    sudo apt-get install curl jq

    Zoek het openbare IP-adres van de server

    We hebben ook het openbare IP-adres van de server nodig voordat we de geolocatiegegevens kunnen ophalen. Gebruik Krul om een ​​API-aanroep te doen naar ipinfo.io in uw terminalvenster.

    krullen https://ipinfo.io/ip

    Haal locatiegegevens op vanuit de API

    Nu we het openbare IP-adres van de server hebben, kunnen we een oproep doen naar de API van ipvigilante.com om de geolocatiegegevens op te halen. Vervangen met het adres dat terugkwam in het vorige commando.

    krullen https://ipvigilante.com/

    Laten we eens nader bekijken welke gegevens we terug krijgen van deze oproep:

    De API retourneert de stad, het land en het continent, waar onze server zich bevindt. Het geeft ook de coördinaten voor de lengte- en breedtegraad als resultaat, voor het geval we deze server op een interactieve kaart willen tekenen. We gebruiken "latitude", "longitude", "city_name," en "country_name" in ons script. De  jQ command begrijpt hoe de API-gegevens moeten worden verwerkt en deze vier velden eruit moeten halen.

    Een script maken om de API-aanroep te automatiseren

    We kunnen een script maken dat de geolocatiegegevens vastlegt en naar een bestand schrijft in CSV-indeling. De gegevens worden naar een bestand met de naam geschreven server_location.txt in de / Tmp / directory. Open uw favoriete editor en maak een script met de naam geolocate.sh . Voeg de onderstaande scriptinhoud in en zorg ervoor dat u het IP-adres vervangt door uw eigen IP-adres:

    #! / bin / sh OUTPUT_FILE = / tmp / server_location.txt # Pak het openbare IP-adres van de server PUBLIC_IP = "curl -s https://ipinfo.io/ip" # Roep de geolocatie-API op en leg de uitvoerkrul vast -s https : //ipvigilante.com/$ PUBLIC_IP | \ jq '.data.latitude, .data.longitude, .data.city_name, .data.country_name' | \ while read -r LATITUDE; lees -r LONGITUDE read -r CITY read -r COUNTRY echo "$ LATITUDE, $ LONGITUDE, $ CITY, $ COUNTRY" | \ tr --verwijderen \ "> \ $ OUTPUT_FILE voltooid 

    Sla het script op en ga terug naar de terminal. Maak het script uitvoerbaar vanaf de terminal, door de execute permissie te verlenen voor dit bestand.

    chmod u + x geolocate.sh

    Nu ben je klaar om het uit te testen. Voer de ... uit geolocate.sh script en controleer de inhoud van het uitvoerbestand:

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

    De geolocatiegegevens eenmaal per dag bijwerken met een Cron-taak

    Laten we een cron-taak maken om onze server de geolocatie bij te werken en deze eenmaal per dag op te slaan in een bestand. De dagelijkse cron-taak werkt een bestand bij met de naam server_location.txt in de / Tmp / map van de server. Het creëren van een 24-uurs cron-taak is net zo eenvoudig als het plaatsen van ons script in de /etc/cron.daily directory. We moeten de opdracht sudo gebruiken om het bestand als de rootgebruiker te kopiëren, om machtigingsproblemen te voorkomen. Voer de volgende opdracht uit om te kopiëren geolocate.sh naar de /etc/cron.daily directory.

    sudo cp geolocate.sh /etc/cron.daily

    Deze wijzigingen zijn onmiddellijk en ons script wordt elke 24 uur uitgevoerd om de inhoud van de update bij te werken /tmp/server_location.txt het dossier. We kunnen deze gegevens gebruiken om interessante dingen te doen, zoals het plotten van onze servers op een kaart en het combineren van geolocatie met verkeerslogboeken om te zien waar ter wereld onze serverhotspots zijn.