
U kunt de geografische locatie van een Linux-systeem op afstand vinden met behulp van open API’s en een eenvoudig bash-script. Door een server te geolokaliseren, kunt u deze in de fysieke wereld volgen, zodat servers zich in regionale hotspots bevinden.
Elke server op internet heeft een openbaar IP-adres. Dit wordt 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, geleverd door ipinfo.co en IP Vigilante, en deze gebruiken om de stad, staat en land te zien die zijn gekoppeld aan een server of ander extern systeem. Dit geeft je geen precieze GPS-locatie; het laat je gewoon het algemene gebied van het IP-adres zien.
Maak verbinding met een systeem op afstand
Je voert de volgende opdrachten uit op de Linux-server of andere externe systemen die je wilt geoloceren, dus je moet eerst verbinding maken met de server en er een shell op openen. 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 curl en jq
We hebben twee tools nodig om toegang te krijgen tot de geolocatie-API: curl om HTTP-verzoeken te maken en jq om de JSON-gegevens die we terugkrijgen te verwerken. Open een terminal en gebruik apt-get om deze tools op Ubuntu of Debian-gebaseerde systemen te installeren. Gebruik op andere Linux-distributies de pakketinstallatietool van je 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 curl om een API-oproep te doen naar ipinfo.io in uw terminalvenster.
curl https://ipinfo.io/ip
Haal locatiegegevens op van de API
Nu we het openbare IP-adres van de server hebben, kunnen we de API van ipvigilante.com aanroepen om de geolocatiegegevens op te halen. Vervangen <your ip address> met het adres dat terugkwam in het vorige commando.
curl https://ipvigilante.com/<your ip address>

Laten we eens nader bekijken welke gegevens we terugkrijgen van deze oproep:

De API retourneert de stad, het land en het continent waarin onze server zich bevindt. Het retourneert ook de geschatte lengte- en breedtegraadcoördinaten, voor het geval we deze server op een interactieve kaart willen tekenen. We gebruiken “breedtegraad”, “lengtegraad”, “stad_naam” en “land_naam” in ons script. De jq commando begrijpt hoe de API-gegevens verwerkt moeten worden en deze vier velden eruit gehaald moeten worden.
Een script maken om de API-oproep te automatiseren
We kunnen een script maken dat de geolocatiegegevens oppakt en naar een bestand in CSV-indeling schrijft. De gegevens worden naar een bestand met de naam 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 door uw eigen IP-adres vervangt:
#!/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
Sla het script op en ga terug naar de terminal. Maak het script uitvoerbaar vanaf de terminal door de uitvoerrechten voor dit bestand te verlenen.
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 zijn geolocatie te laten bijwerken en deze eenmaal per dag in een bestand op te slaan. De dagelijkse cron-taak werkt een bestand bij met de naam server_location.txt in de /tmp/ map van de server. Het maken van een 24-uurs cron-taak is net zo eenvoudig als het plaatsen van ons script in het /etc/cron.daily directory. We moeten de opdracht sudo gebruiken om het bestand te kopiëren als de rootgebruiker, om toestemmingsproblemen 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 het /tmp/server_location.txt het dossier. We kunnen deze gegevens gebruiken om interessante dingen te doen, zoals het uitzetten van onze servers op een kaart en het combineren van geolocatie met verkeerslogboeken om te zien waar ter wereld onze serverhotspots zijn.