lunes, 25 de marzo de 2019

Cómo obtener la ubicación geográfica de un sistema desde un script de Bash

Puedes encontrar la ubicación geográfica de un sistema Linux remoto utilizando API’s abiertas y un simple script bash. Geolocalizar un servidor podría ayudarte a rastrearlo en el mundo físico, asegurando que los servidores estén ubicados en puntos de acceso regionales.




Cada servidor en Internet tiene una dirección IP pública . Esto se asigna directamente 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 usarlas para ver la ciudad, el estado y el país asociados con un servidor u otro sistema remoto. Esto no te da una ubicación GPS precisa; simplemente te permite ver el área general de la dirección IP.
como localizar un servidor
Conectarse a un sistema remoto
Ejecutarás los siguientes comandos en el servidor Linux u otros sistemas remotos que desees geolocalizar, por lo que debes conectarte al servidor y acceder primero a una shell. Por ejemplo, puedes conectarte a través de SSH. Puedes ejecutar los comandos en tu sistema local para encontrar tu ubicación, pero probablemente ya sepas dónde se encuentra.

Instalar curl y jq
Necesitamos dos herramientas para acceder a la API de geolocalización: curl para realizar solicitudes HTTP y   jq para procesar los datos JSON que obtenemos. Abre la terminal y usa apt-get para instalar estas herramientas en sistemas basados ​​en Ubuntu o Debian. En otras distribuciones de Linux, debes usar la herramienta de instalación de paquetes de tu distribución de Linux en lugar de estos comandos.
sudo apt-get install curl jq

Encontrar la dirección IP pública del servidor
También necesitamos la dirección IP pública del servidor antes de poder obtener los datos de geolocalización. Usa curl para realizar una llamada a la API a ipinfo.io en la ventana de la 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. Reemplaza < tu dirección ip>con la dirección que obtuviste en el comando anterior.

curl https://ipvigilante.com/<tu dirección ip>

Echemos un vistazo más de cerca a los datos que obtenemos de esta llamada:
localizar servidor por ip
La API devuelve la ciudad, el país y el continente en el que reside nuestro servidor. También devuelve las coordenadas de latitud y longitud aproximadas, en caso de que queramos dibujar este servidor en un mapa interactivo. Usaremos “latitude”, “longitude”, “city_name” y “country_name” en nuestro script. El   comando jq entiende 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 capture 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 directorio /tmp/. Abre tu editor favorito y crea un script llamado geolocate.sh. Inserta el contenido del script que se muestra a continuación y asegúrate de reemplazar la dirección IP con la tuya:

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

Guarda el script y regresa a la terminal. Has el script ejecutable desde la terminal, otorgando el permiso de ejecución en este archivo.

chmod u+x geolocate.sh

Ahora estás listo para probarlo. Ejecuta el script geolocate.sh y verifica el contenido del archivo de salida: 
./geolocate.sh

cat /tmp/server_location.txt

Actualización de los datos de geolocalización una vez al día con un Cron Job
Vamos a crear un cron job para hacer que nuestro servidor actualice su geolocalización y guardarlo en un archivo una vez al día. El cron job diario actualiza un archivo llamado server_location.txt en la carpeta /tmp/ del servidor. Crear un cron job de 24 horas es tan fácil como poner nuestro script en el directorio /etc/cron.daily. Debemos usar el comando sudo para copiar el archivo como usuario root, para evitar problemas de permisos. Ejecuta el siguiente comando para copiar geolocate.sh al directorio /etc/cron.daily.


sudo cp geolocate.sh /etc/cron.daily

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

¿Te ha sido útil el post? Por favor compártelo en las redes sociales.        


Fuente: How to Geek

No hay comentarios.:

Publicar un comentario

Tu opinión es importante para mí, porque me ayuda a mejorar. Si te gustó el articulo o tienes alguna sugerencia, déjame tu comentario con tu nombre para poder responderte tan pronto como pueda.