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.
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:
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