Je kunt de geografische locatie van een extern Linux-systeem 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 rechtstreeks toegewezen aan de server, of toegewezen aan een router die verkeer naar die server stuurt. IP-adressen geven ons een idee over 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 systeem op afstand. Dit geeft je geen precieze GPS-locatie; het laat je alleen het algemene gebied van het IP-adres zien.
Verbinding maken met een extern systeem
Je voert de volgende opdrachten uit op de Linux-server of andere externe systemen die je wilt geolokaliseren, dus je moet verbinding maken met de server en er eerst 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 doen en jq om de JSON-gegevens te verwerken die we terugkrijgen. 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 het pakketinstallatieprogramma van uw Linux-distributie.
sudo apt-get install curl jq
Vind het openbare IP-adres van de server
We hebben ook het openbare IP-adres van de server nodig voordat we de geolocatiegegevens kunnen krijgen. Gebruik curl om een API-aanroep naar ipinfo.io te doen in uw terminalvenster.
curl https://ipinfo.io/ip
Locatiegegevens ophalen van de API
Nu we het openbare IP-adres van de server hebben, kunnen we de API van ipvigilante.com bellen om de geolocatiegegevens op te halen. Vervangen
curl https://ipvigilante.com/
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 geeft ook de geschatte breedte- en lengtegraadcoördinaten terug, voor het geval we deze server op een interactieve kaart willen tekenen. We gebruiken ‘latitude’, ‘longitude’, ‘city_name’ en ‘country_name’ in ons script. Het jq-commando begrijpt hoe de API-gegevens moeten worden verwerkt en deze vier velden eruit kunnen worden gehaald.
Een script maken om de API-aanroep te automatiseren
We kunnen een script maken dat de geolocatiegegevens pakt en naar een bestand in CSV-indeling schrijft. De gegevens worden weggeschreven naar een bestand met de naam server_location.txt in de /tmp/ directory. Open je favoriete editor en maak een script met de naam geolocate.sh . Voeg de onderstaande scriptinhoud in en vervang het IP-adres door uw eigen:
#!/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 uitvoermachtiging voor dit bestand te verlenen.
chmod u+x geolocate.sh
Nu ben je klaar om het uit te testen. Voer het script geolocate.sh uit en controleer de inhoud van het uitvoerbestand:
./geolocate.sh cat /tmp/server_location.txt
De geolocatiegegevens één keer per dag bijwerken met een cron-taak
Laten we een cron-taak maken om onze server de geolocatie te laten bijwerken en deze eenmaal per dag in een bestand op te slaan. De dagelijkse cron-taak werkt een bestand met de naam server_location.txt bij 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 de directory /etc/cron.daily. We moeten de opdracht sudo gebruiken om het bestand als rootgebruiker te kopiëren, om problemen met machtigingen te voorkomen. Voer de volgende opdracht uit om geolocate.sh naar de directory /etc/cron.daily te kopiëren.
sudo cp geolocate.sh /etc/cron.daily
Deze wijzigingen zijn onmiddellijk van kracht en ons script wordt elke 24 uur uitgevoerd om de inhoud van het bestand /tmp/server_location.txt bij te werken. 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.