Cómo obtener la ubicación geográfica de su sistema a partir de un script Bash

Contenidos

Mapa del mundo con el concepto de conexiones a internet

Puede hallar la ubicación geográfica de un sistema Linux remoto usando API abiertas y un simple script bash. La geolocalización de un servidor podría ayudarlo a rastrearlo en el mundo físico, asegurando que los servidores estén ubicados en puntos de acceso regionales.

Cada servidor de Internet dispone de una dirección IP pública. Esto se asigna de forma directa al servidor o se asigna a un enrutador que envía tráfico a ese servidor. Las direcciones IP nos dan una pista sobre dónde se encuentra ese servidor en el mundo. Podemos obtener estos datos de geolocalización a través de dos API abiertas, proporcionadas por ipinfo.co e IP Vigilante y usarlos para ver la ciudad, el estado y el país asociados con un servidor u otro sistema remoto. Esto no le da una ubicación GPS precisa; solo le posibilita ver el área general de la dirección IP.

Conectarse a un sistema remoto

Ejecutará los siguientes comandos en el servidor Linux u otros sistemas remotos que desee geolocalizar, por lo que primero debe conectarse al servidor y ingresar a un shell. A modo de ejemplo, puede conectarse a través de SSH. Puede ejecutar los comandos en su sistema local para hallar su ubicación, ¡pero probablemente ya sepa dónde se encuentra!

Instalar curl y jq

Necesitamos dos herramientas para ingresar a la API de geolocalización: curl para realizar solicitudes HTTP y jq para procesar los datos JSON que obtenemos. Abra una terminal y use apt-get para instalar estas herramientas en sistemas basados ​​en Ubuntu o Debian. En otras distribuciones de Linux, utilice la herramienta de instalación de paquetes de su distribución de Linux.

sudo apt-get install curl jq

Encuentre la dirección IP pública del servidor

Además necesitamos la dirección IP pública del servidor antes de que podamos obtener los datos de geolocalización. Utilizar curl para realizar una llamada API a ipinfo.io en la ventana de su terminal.

curl https://ipinfo.io/ip

Obtener datos de ubicación de la API

Ahora que tenemos la IP pública del servidor, podemos hacer una llamada a la API de ipvigilante.com para obtener los datos de geolocalización. Reemplazar <your ip address> con la dirección que regresó en el comando anterior.

curl https://ipvigilante.com/<your ip address>

salida del comando curl

Echemos un vistazo más de cerca a los datos que obtenemos de esta llamada:

metadatos que muestran información de ubicación

La API devuelve la ciudad, el país y el continente en los que reside nuestro servidor. Además devuelve las coordenadas aproximadas de latitud y longitud, en caso de que queramos dibujar este servidor en un mapa interactivo. Usaremos «latitud», «longitud», «nombre_ciudad» y «nombre_país» en nuestro script. los jq El comando comprende cómo procesar los datos de la API y extraer estos cuatro campos.

Creación de un script para automatizar la llamada a la API

Podemos crear un script que tome los datos de geolocalización y los escriba en un archivo en formato CSV. Los datos se escribirán en un archivo llamado server_location.txt en el /tmp/ directorio. Abra su editor favorito y cree un script llamado geolocate.sh . Inserte el contenido del script que se muestra a continuación y asegúrese de reemplazar la dirección IP con la suya propia:

#!/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

Guarde el script y vuelva a la terminal. Haga que el script sea ejecutable desde la terminal, otorgando el permiso de ejecución en este archivo.

chmod u+x geolocate.sh

Ahora estás listo para probarlo. Ejecutar el geolocate.sh script y verifique el contenido del archivo de salida:

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

ejecutando el script de geolocalización

Actualización de los datos de geolocalización al menos una vez al día con un trabajo cron

Creemos un trabajo cron para que nuestro servidor actualice su geolocalización y lo guarde en un archivo al menos una vez al día. El trabajo cron diario actualiza un archivo llamado server_location.txt en el /tmp/ carpeta del servidor. Crear un trabajo cron de 24 horas es tan simple como poner nuestro script en el /etc/cron.daily directorio. Debemos utilizar el comando sudo para copiar el archivo como usuario root, para evitar problemas de permisos. Ejecute el siguiente comando para copiar geolocate.sh al /etc/cron.daily directorio.

sudo cp geolocate.sh /etc/cron.daily

Estos cambios son inmediatos y nuestro script se ejecutará cada 24 horas para actualizar el contenido del /tmp/server_location.txt expediente. Podemos utilizar estos datos para hacer cosas interesantes, como trazar nuestros servidores en un mapa, así como combinar la geolocalización con registros de tráfico para ver en qué parte del mundo se encuentran los puntos de acceso de nuestros servidores.

setTimeout(function(){
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, document,’script’,
‘https://connect.facebook.net/en_US/fbevents.js’);
fbq(‘init’, ‘335401813750447’);
fbq(‘track’, ‘PageView’);
},3000);

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.