Sie können den geografischen Standort eines entfernten Linux-Systems mithilfe offener APIs und eines einfachen Bash-Skripts ermitteln. Die Geolokalisierung eines Servers könnte Ihnen dabei helfen, ihn in der physischen Welt zu verfolgen und sicherzustellen, dass sich die Server an regionalen Hotspots befinden.
Jeder Server im Internet hat eine öffentlich zugängliche IP-Adresse. Diese wird entweder direkt dem Server oder einem Router zugewiesen, der Datenverkehr an diesen Server sendet. IP-Adressen geben uns einen Hinweis darauf, wo sich dieser Server auf der Welt befindet. Wir können diese Geolokalisierungsdaten über zwei offene APIs abrufen, die von ipinfo.co und IP Vigilante bereitgestellt werden, und sie verwenden, um die Stadt, den Bundesstaat und das Land anzuzeigen, die mit einem Server oder einem anderen Remote-System verbunden sind. Dies gibt Ihnen keinen genauen GPS-Standort; es lässt Sie nur den allgemeinen Bereich der IP-Adresse sehen.
Inhaltsverzeichnis
Verbinden mit einem Remote-System
Sie führen die folgenden Befehle auf dem Linux-Server oder anderen Remote-Systemen aus, die Sie geolokalisieren möchten. Sie müssen sich also zuerst mit dem Server verbinden und auf eine Shell darauf zugreifen. Sie können beispielsweise eine Verbindung über SSH herstellen. Sie könnten die Befehle auf Ihrem lokalen System ausführen, um seinen Standort zu finden, aber Sie wissen wahrscheinlich bereits, wo Sie sich befinden!
curl und jq . installieren
Wir benötigen zwei Tools, um auf die Geolocation-API zuzugreifen: curl, um HTTP-Anfragen zu stellen, und jq, um die JSON-Daten zu verarbeiten, die wir zurückerhalten. Öffnen Sie ein Terminal und verwenden Sie apt-get, um diese Tools auf Ubuntu- oder Debian-basierten Systemen zu installieren. Verwenden Sie bei anderen Linux-Distributionen stattdessen das Paketinstallationstool Ihrer Linux-Distribution.
sudo apt-get install curl jq
Finden Sie die öffentliche IP-Adresse des Servers
Wir benötigen auch die öffentliche IP-Adresse des Servers, bevor wir die Geolokalisierungsdaten abrufen können. Verwenden Sie curl, um in Ihrem Terminalfenster einen API-Aufruf an ipinfo.io zu tätigen.
curl https://ipinfo.io/ip
Abrufen von Standortdaten von der API
Da wir nun die öffentliche IP des Servers haben, können wir die API von ipvigilante.com aufrufen, um die Geolokalisierungsdaten abzurufen. Ersetzen
curl https://ipvigilante.com/
Sehen wir uns einmal genauer an, welche Daten wir von diesem Aufruf erhalten:
Die API gibt die Stadt, das Land und den Kontinent zurück, in dem sich unser Server befindet. Es gibt auch die ungefähren Breiten- und Längenkoordinaten zurück, falls wir diesen Server auf einer interaktiven Karte zeichnen möchten. Wir verwenden in unserem Skript „Breitengrad“, „Längengrad“, „Stadtname“ und „Landesname“. Der Befehl jq versteht es, die API-Daten zu verarbeiten und diese vier Felder zu extrahieren.
Erstellen eines Skripts zur Automatisierung des API-Aufrufs
Wir können ein Skript erstellen, das die Geolokalisierungsdaten erfasst und in eine Datei im CSV-Format schreibt. Die Daten werden in eine Datei namens server_location.txt im Verzeichnis /tmp/ geschrieben. Öffnen Sie Ihren bevorzugten Editor und erstellen Sie ein Skript namens geolocate.sh . Fügen Sie den unten gezeigten Skriptinhalt ein und achten Sie darauf, die IP-Adresse durch Ihre eigene zu ersetzen:
#!/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
Speichern Sie das Skript und gehen Sie zurück zum Terminal. Machen Sie das Skript vom Terminal aus ausführbar, indem Sie die Ausführungsberechtigung für diese Datei erteilen.
chmod u+x geolocate.sh
Jetzt können Sie es testen. Führen Sie das Skript geolocate.sh aus und überprüfen Sie den Inhalt der Ausgabedatei:
./geolocate.sh cat /tmp/server_location.txt
Aktualisieren der Geolokalisierungsdaten einmal täglich mit einem Cron-Job
Lassen Sie uns einen Cron-Job erstellen, damit unser Server seine Geolocation aktualisiert und einmal täglich in einer Datei speichert. Der tägliche Cron-Job aktualisiert eine Datei namens server_location.txt im Ordner /tmp/ des Servers. Das Erstellen eines 24-Stunden-Cronjobs ist so einfach wie das Ablegen unseres Skripts in das Verzeichnis /etc/cron.daily. Wir müssen den sudo-Befehl verwenden, um die Datei als Root-Benutzer zu kopieren, um Berechtigungsprobleme zu vermeiden. Führen Sie den folgenden Befehl aus, um geolocate.sh in das Verzeichnis /etc/cron.daily zu kopieren.
sudo cp geolocate.sh /etc/cron.daily
Diese Änderungen erfolgen sofort und unser Skript wird alle 24 Stunden ausgeführt, um den Inhalt der Datei /tmp/server_location.txt zu aktualisieren. Wir können diese Daten verwenden, um interessante Dinge zu tun, wie zum Beispiel unsere Server auf einer Karte darzustellen oder die Geolokalisierung mit Verkehrsprotokollen zu kombinieren, um zu sehen, wo auf der Welt sich unsere Server-Hotspots befinden.