Guión Bash

¿Cómo obtener la ubicación geográfica de tu sistema a partir de un guión Bash?

Puedes encontrar la ubicación geográfica de un sistema Linux remoto usando APIs abiertas y un simple script de bash (guión bash). Geolocalizar un servidor podría ayudarte a rastrearlo en el mundo físico. Asegurándote de que los servidores estén ubicados en puntos de acceso público 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 APIs abiertas. Proporcionadas por ipinfo.co e IP Vigilante y utilizarlos 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; sólo le permite ver el área general de la dirección IP.

Conectarse a un sistema remoto

Estarás ejecutando los siguientes comandos en el servidor Linux u otros sistemas remotos que desees geolocalizar. Por lo que deberás conectarte al servidor y acceder primero a un shell en él. Por ejemplo, puedes conectarte a través de SSH. Podrías ejecutar los comandos en tu sistema local para encontrar tu ubicación, pero probablemente ya sabes dónde está.

Instalar curl y jq

Necesitamos dos herramientas para acceder a la API de geolocalización: curl para hacer peticiones HTTP y jq para procesar los datos JSON que recibimos. Abre un terminal y utiliza apt-get para instalar estas herramientas en sistemas basados en Ubuntu o Debian. En otras distribuciones de Linux. Usa en su lugar la herramienta de instalación de paquetes de tu distribución de Linux.

sudo apt-get install curl jq

Buscar 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 hacer una llamada de API a ipinfo.io en la ventana de tu 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 con la dirección que aparece en el comando anterior.

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

Echemos un vistazo más de cerca a los datos que recibimos de esta llamada.

La API devuelve la ciudad, el país y el continente en el que reside nuestro servidor. También devuelve las coordenadas aproximadas de latitud y longitud. En caso de que queramos dibujar este servidor en un mapa interactivo.

Usaremos «latitude», «longitud», «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 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 directorio /tmp/.

Abre tu editor favorito y crea un script llamado geolocate.sh. Inserte el contenido del script que se muestra a continuación y asegúrate de reemplazar la dirección IP por la tuya propia.

!/bin/sh

OUTPUT_FILE=/tmp/server_location.txt

Agarra la dirección IP pública de este servidor

PUBLIC_IP=`curl -s https://ipinfo.io/ip«

Llama a la API de geolocalización y captura la salida

curl -s https://ipvigilante.com/${PUBLIC_IP} | \
jq ‘.data.latitude,.data.longitude,.data.city_name,.data.country_name’ | | \
mientras se lee -r LATITUDE; do
leer -r LONGITUD
read -r CIUDAD
leer -r PAÍS
echo «${LATITUDE},${LONGITUDE},${CITY},${COUNTRY}» | \
tr –delete \N \N > \
${OUTPUT_FILE}
terminado

Guarda el script y vuelve a la terminal. Haz el script ejecutable desde el terminal, concediendo el permiso de ejecución sobre este fichero.

chmod u+x geolocate.sh

Ahora estás listo para probarlo. Ejecuta el script geolocate.sh y comprueba 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 trabajo de referencia

Vamos a crear una tarea para que nuestro servidor actualice su geolocalización y la guarde en un archivo una vez al día. El trabajo cron diario actualiza un archivo llamado server_location.txt en la carpeta /tmp/ del servidor.

Crear un trabajo cron 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 en el 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 utilizar estos datos para hacer cosas interesantes. Como trazar nuestros servidores en un mapa, así como combinar la geolocalización con los registros de tráfico para ver en qué parte del mundo se encuentran nuestros hotspots de servidores.


¿Tienes alguna pregunta o problema relacionado con el tema del artículo? Queremos ayudarte.

Deja un comentario con tu problema o pregunta. Leemos y respondemos todos los comentarios, aunque a veces podamos tardar un poco debido al volumen que recibimos. Además, si tu consulta inspira la escritura de un artículo, te notificaremos por email cuando lo publiquemos.
*Moderamos los comentarios para evitar spam.

¡Gracias por enriquecer nuestra comunidad con tu participación!

Deja un comentario