Aplicación de escritorio que nos devuelve el país al que pertenece una IP

Buscar el país de una IP

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.

Sobre mi

Trabajo en el desarrollo de webs profesionales desde hace más de 25 años.
También me dedico a mis proyectos personales.

Últimas notas publicadas

Categorías

Scroll al inicio