Geolocalizar un servidor con bash

Geolocalizar un servidor con un script bash.

Puede parecer una tontería, pero geolocalizar un servidor diariamente te ayudara a comprobar que efectivamente se encuentra físicamente donde tu lo contrataste.

Es un buen método para asegurarnos que los servidores o vps están siempre ubicados en los puntos de acceso regionales que necesitamos.

Conozco un caso de un servidor contratado en París, y a los quince días apareció en Londres, curioso.

Es imposible que una dirección ip te aporte un dato super preciso, pero si que te dirán la ciudad donde esta localizada o por lo menos la región.

Para poder geolocalizar un servidor o vps nosotros usaremos dos API abiertas, en este caso nos las proporcionan:

Recuerda que los datos recopilados no nos mostraran una ubicación GPS exacta, pero… por lo menos veremos el área de situación física.

Vemos como geolocalizar un servidor.

Geolocalizar un servidor con bash 1

 

Geolocalizar un servidor con bash

Accedemos a la consola / terminal de nuestro servidor, e instalamos las herramientas requeridas.

En Debian, Ubuntu y derivados:

sudo apt-get install curl jq

En Centos, Rhel y derivados:
sudo yum install curl jq

Ahora extraemos la ip publica del servidor desde «ipinfo«.
curl https://ipinfo.io/ip

Una vez tengas la ip publica del server, llamamos a la API de «ipvigilante» para obtener los datos de geolocalización (no te olvides de insertar la ip que obtuvimos con el comando anterior).
curl https://ipvigilante.com/la-ip-publica-del-servidor

Ejemplo de respuesta valida…

{«status»:»success»,»data»:{«ipv4″:»37.187.78.186″,»continent_name»:»Europe»,»country_name»:»France»,»subdivision_1_name»:null,»subdivision_2_name»:null,»city_name»:null,»latitude»:»48.85820″,»longitude»:»2.33870″}}

Como ejemplo, lo convertimos a código para verlo como humano (no aparece la ciudad por una restricción del servidor).

Geolocalizar un servidor con bash 2

 

Los datos son validos, así que vamos a crear el script bash para automatizar el proceso.

La información se guardara como «csv» en el archivo «geoip_locate.txt» que localizaras en la carpeta «/tmp«.

Creamos el archivo.

nano geoiplocate.sh

Copia y pega lo siguiente:
#!/bin/sh

OUTPUT_FILE=/tmp/geoip_locate.txt

# Capturar la ip publica del servidor
PUBLIC_IP=`curl -s https://ipinfo.io/ip`

# LLama a la API y captura la respuesta.
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 archivo y cierra el editor.

 

Le concedemos permisos al script:

chmod u+x geoiplocate.sh

Lo ejecutamos manualmente y comprobamos el resultado.
./geoiplocate.sh

cat /tmp/geoip_locate.txt

Como punto final puedes crear una tarea cron que se ejecute el script una vez al día.
sudo cp geoiplocate.sh /etc/cron.daily

 

Si crees que este script es útil, compártelo.

 

Agregar comentario