Si queremos saber a que país pertenece una IP dada podemos consultar en cualquiera de las muchas webs que nos dan esta información, pero cuando es una necesidad constante por nuestro trabajo puede llegar a ser un incordio.
Conocer país de una IP por la terminal
Existe un servicio que nos da gratuitamente ipinfo.io con el cual y a través del comando curl
, podemos preguntar por el país de la IP. Su estructura es la siguiente:
curl http://ipinfo.io/34.127.83.212
Y nos devuelve un JSON tal que así:
{
"ip": "34.127.83.212",
"hostname": "212.83.127.34.bc.googleusercontent.com",
"city": "The Dalles",
"region": "Oregon",
"country": "US",
"loc": "45.5946,-121.1787",
"org": "AS396982 Google LLC",
"postal": "97058",
"timezone": "America/Los_Angeles",
"readme": "https://ipinfo.io/missingauth"
}%
Este servicio, aunque antes permitía innumerables peticiones ahora ha cerrado un poco el grifo, realmente solo pide que te des de alta (gratuitamente) y uses una API para seguir con las peticiones que tendrás que usar con el siguiente formato:
curl ipinfo.io/8.8.8.8?token=xxxxxxxxxxxxxx
Esto, se puede automatizar de muchas maneras, pero mi necesidad era simplemente obtener el país por lo que decidí hacer un pequeño script en Python y tkinter para posteriormente compilarla y tener una aplicación en el escritorio.
Aplicación en Python para conocer el país de una IP
En el siguiente script uso las librerías subprocess
, json
, tkinter
y pycountry.
Si quieres usar el script tal cual solo tienes que darte de alta en ipinfo.io, y cambias las X del token de la séptima línea por el que te corresponda.
Al ejecutarlo te abrirá una ventana del sistema donde te pide la IP y te devuelve el país. A partir de aquí cambia lo que te convenga y adáptalo a tus necesidades.
import subprocess
import json
import pycountry
import tkinter as tk
def obtener_info_ip(ip):
comando = 'curl "ipinfo.io/{}/?token=XXXXXXXXXX"'.format(ip)
resultado = subprocess.run(comando, shell=True, capture_output=True, text=True)
if resultado.returncode == 0:
respuesta_json = json.loads(resultado.stdout)
codigo_pais = respuesta_json.get('country')
pais = pycountry.countries.get(alpha_2=codigo_pais)
if pais:
nombre_pais = pais.name
return nombre_pais
else:
return 'Código de país desconocido: {}'.format(codigo_pais)
else:
return 'Error al obtener la información de la IP'
def mostrar_resultado():
ip = entrada_ip.get()
nombre_pais = obtener_info_ip(ip)
label_resultado.config(text='País: {}'.format(nombre_pais))
def borrar_resultado():
entrada_ip.delete(0, tk.END)
label_resultado.config(text='')
# Crear la ventana
ventana = tk.Tk()
ventana.title('Obtener País por IP')
ventana.geometry('400x120')
# Crear elementos de la interfaz
label_ip = tk.Label(ventana, text='Ingrese una dirección IP:')
label_ip.pack()
entrada_ip = tk.Entry(ventana)
entrada_ip.pack()
label_resultado = tk.Label(ventana, text='')
label_resultado.pack()
boton_frame = tk.Frame(ventana)
boton_frame.pack()
boton_obtener = tk.Button(boton_frame, text='Obtener', command=mostrar_resultado)
boton_obtener.pack(side=tk.LEFT)
boton_borrar = tk.Button(boton_frame, text='Borrar', command=borrar_resultado)
boton_borrar.pack(side=tk.LEFT)
# Iniciar el bucle principal de la ventana
ventana.mainloop()
Aplicación de escritorio para conocer la IP de un país
Por último si quieres compilar el resultado final y tener la aplicación en tu escritorio puedes instalar `pyinstaller’.
pip install pyinstaller
Y en el mismo directorio donde tenemos nuestro script ejecutamos:
pyinstaller --onefile --windowed nombre_script.py
Nos creará un directorio llamado dist donde habrá puesto la aplicación llamada nombre_script.app para MacOS.
Copiamos o movemos este archivo .app al escritorio (o donde quieras) y ya tenemos nuestra aplicación a mano.