En el siguiente artículo vamos a echar un vistazo a cómo podemos obtener la ubicación geográfica de nuestra dirección IP pública. Esto vamos a poder hacerlo mediante las API abiertas y un script de bash simple, todo ello desde la terminal de Ubuntu. Hoy en día todos los dispositivos conectados a Internet cuentan con una IP, que viene siendo su identificador ante el mundo. Esta dirección es la que utilizaremos para obtener su ubicación.
Cuando navegamos por Internet, cada servidor tiene una dirección IP pública, esta se le asigna directamente al servidor o mediante un enrutador que envía el tráfico de red a ese servidor. Las direcciones IP proporcionan una manera fácil de rastrear la ubicación geográfica del servidor en el mundo. Esto se puede conseguir haciendo uso de dos API proporcionadas por ipinfo.io e ipvigilante.com con las que vamos a poder obtener el país del servidor, el nombre de la ciudad y sus coordenadas geográficas.
En las siguientes líneas vamos a ver cómo obtener la ubicación geográfica de una IP desde la terminal ayudándonos de curl y jq. El principal propósito y uso para cURL es automatizar transferencias de archivos o secuencias de operaciones no supervisadas, mientras que jq es un lenguaje funcional de muy alto nivel con soporte para backtracking y gestión de flujos de datos JSON.
Ubicación geográfica de una IP desde la terminal
Instalar Curl y jq
Para obtener la ubicación geográfica de la dirección IP, vamos a tener que instalar curl y la herramienta de línea de comandos jq para procesar los datos JSON obtenidos de las API de geolocalización. Para instalar ambos, en una terminal (Ctrl+Alt+T) habrá que escribir el comando:
sudo apt install curl jq
Obtener la dirección IP pública del servidor
Antes de obtener la ubicación, es necesario conocer la dirección IP pública del servidor al que nos conectamos. Para esto, usaremos el siguiente comando cURL con el que haremos una solicitud a ipinfo.io desde la terminal (Ctrl+Alt+T) como se muestra a continuación:
curl https://ipinfo.io/ip
Obtén los datos de la ubicación geográfica de la IP de tu sistema gracias a la API
Tras ejecutar el anterior comando obtendremos la dirección IP pública. Una vez que la tengamos, vamos a poder realizar una solicitud a ipvigilante.com para obtener los datos de geolocalización. Para esto utilizaremos el siguiente comando en la terminal (Ctrl+Alt+T). Es importante reemplazar la IP pública por la obtenida con el comando anterior.
curl https://ipvigilante.com/la-dirección-IP
Automatizar la llamada a la API usando Bash Script
Para automatizar el proceso de comunicación con la API vamos a crear una secuencia de comandos dentro de un archivo llamado ipgeolocalizador.sh (el nombre es opcional). Para su creación vamos a poder utilizar cualquier editor para la línea de comandos con el que más cómodo se sienta cada uno.
vim ipgeolocalizador.sh
Cuando se abra el editor, dentro solo hay que pegar la línea que se muestra a continuación:
curl -s https://ipvigilante.com/$(curl -s https://ipinfo.io/ip) | jq '.data.latitude, .data.longitude, .data.city_name, .data.country_name'
Una vez pegada solo queda guardar el archivo y salir del editor. Tras esto habrá que hacer que el script sea ejecutable. Esto lo vamos a hacer escribiendo en la misma terminal:
chmod +x ipgeolocalizador.sh
Llegados a este punto, ya podemos ejecutar el script de la siguiente manera para obtener la ubicación geográfica de la IP pública:
./ipgeolocalizador.sh
La secuencia de comandos anterior muestra el nombre de la ciudad y el país junto con las coordenadas aproximadas de latitud y longitud. La verdad es que desconozco el margen de error que puede tener.
Si no quieres guardar el anterior comando largo dentro de un archivo, también se puede ejecutar ese mismo comando directamente en la terminal (Ctrl+Alt+T):
curl -s https://ipvigilante.com/$(curl -s https://ipinfo.io/ip) | jq '.data.latitude, .data.longitude, .data.city_name, .data.country_name'
En este breve artículo, hemos visto cómo obtener la ubicación geográfica de una IP desde Ubuntu utilizando la terminal y los comandos curl y jq. Se puede obtener más información acerca de jq o sobre cURL en sus correspondientes artículos de Wikipedia.