IPInfo.io desde Bash, Python y GUI (Python TKinter) para Windows y Debian

Existen muchos métodos y servicios para obtener información sobre una dirección IP. En esta entrada utilizaremos el servicio que ofrece IPInfo.io.

Explicaremos como utilizar su servicio desde BASHPython y mediante el uso de una APP de escritorio desarrollada por nosotros escrita en Python TKinter para Windows y Debian.


Qué es IPInfo.io

Fundada en 2013 por Ben Dowling, exingeniero de Facebook, es una fuente de información para Geolcalización e información detallada de direccionamiento IP. Dispone de cuentas de pago y gratuitas, siendo el límite para esta última de 1K consultas al día o 50K consultas al mes. También permite realizar consultas sin cuenta alguna creada, tal y como indican en este enlace, pero recomiendan crear una cuenta sin coste.

Para obtener una cuenta gratuita nos tendremos que registrar en su Web y una vez accedamos a nuestar cuenta obtener el Token para enviar las consultas.

Los resultados son recibidos en formato JSON, como veremos a continuación.


Uso desde BASH

Podemos hacer uso de la consola de BASH para realizar consultas.

  • Sin token:
curl https://ipinfo.io/8.8.8.8/json
 {
   "ip": "8.8.8.8",
   "hostname": "dns.google",
   "anycast": true,
   "city": "Mountain View",
   "region": "California",
   "country": "US",
   "loc": "37.4056,-122.0775",
   "org": "AS15169 Google LLC",
   "postal": "94043",
   "timezone": "America/Los_Angeles",
   "readme": "https://ipinfo.io/missingauth"
 }
  • Con Token, se dispone de varias formas de enviar consultas. Recuerda indicar el Token de tu cuenta:
TOKEN='nuestro_token'

# Basic Auth
curl -u $TOKEN: https://ipinfo.io/8.8.8.8
 {
   "ip": "8.8.8.8",
   "hostname": "dns.google",
   "anycast": true,
   "city": "Mountain View",
   "region": "California",
   "country": "US",
   "loc": "37.4056,-122.0775",
   "org": "AS15169 Google LLC",
   "postal": "94043",
   "timezone": "America/Los_Angeles"
 }

# Bearer Token
curl -H "Authorization: Bearer $TOKEN" https://ipinfo.io/8.8.8.8
 {
   "ip": "8.8.8.8",
   "hostname": "dns.google",
   "anycast": true,
   "city": "Mountain View",
   "region": "California",
   "country": "US",
   "loc": "37.4056,-122.0775",
   "org": "AS15169 Google LLC",
   "postal": "94043",
   "timezone": "America/Los_Angeles"
 }

# Token query parameter in URL
curl https://ipinfo.io/8.8.8.8/?token=$TOKEN
 {
   "ip": "8.8.8.8",
   "hostname": "dns.google",
   "anycast": true,
   "city": "Mountain View",
   "region": "California",
   "country": "US",
   "loc": "37.4056,-122.0775",
   "org": "AS15169 Google LLC",
   "postal": "94043",
   "timezone": "America/Los_Angeles"
 }

Uso desde Python

También podemos hacer uso del lenguaje Python para enviar las consultas, mediante la librería requests.

  • Sin token:
>>> improt requests
>>> response = requests.get('https://ipinfo.io/8.8.8.8/json')
>>> response.json()
{'org': 'AS15169 Google LLC', 'readme': 'https://ipinfo.io/missingauth', 'ip': '8.8.8.8', 'timezone': 'America/Los_Angeles', 'city': 'Mountain View', 'country': 'US', 'anycast': True, 'region': 'California', 'loc': '37.4056,-122.0775', 'hostname': 'dns.google', 'postal': '94043'}         
  • Con Token, se dispone de varias formas de enviar consultas. Recuerda indicar el Token de tu cuenta:
>>> import requests
>>> from requests.auth import HTTPBasicAuth
>>> TOKEN='nuestro_token'  
       
# Basic Auth
>>> response = requests.get('https://ipinfo.io/8.8.8.8', auth=HTTPBasicAuth(TOKEN,''))
>>> response.json()
{'org': 'AS15169 Google LLC', 'ip': '8.8.8.8', 'timezone': 'America/Los_Angeles', 'city': 'Mountain View', 'country': 'US', 'anycast': True, 'region': 'California', 'loc': '37.4056,-122.0775', 'hostname': 'dns.google', 'postal': '94043'}         

# Bearer Token
>>> response = requests.get('https://ipinfo.io/8.8.8.8', headers={'Authorization': 'Bearer {}'.format(TOKEN)})
>>> response.json()
{'org': 'AS15169 Google LLC', 'ip': '8.8.8.8', 'timezone': 'America/Los_Angeles', 'city': 'Mountain View', 'country': 'US', 'anycast': True, 'region': 'California', 'loc': '37.4056,-122.0775', 'hostname': 'dns.google', 'postal': '94043'}         
 
# Token query parameter in URL
>>> response = requests.get('https://ipinfo.io/8.8.8.8/?token={}'.format(TOKEN))
>>> response.json()
{'org': 'AS15169 Google LLC', 'ip': '8.8.8.8', 'timezone': 'America/Los_Angeles', 'city': 'Mountain View', 'country': 'US', 'anycast': True, 'region': 'California', 'loc': '37.4056,-122.0775', 'hostname': 'dns.google', 'postal': '94043'}         

GUI «IPInformation»

También podemos hacer uso de una interfaz gráfica mediante el uso de una aplicación gráfica que hemos desarrollado con Python TKinter, llamada IPInformation en su versión v1.0 para 64 bits, para entornos Windows y Linux Debian, la cual podemos descargar en los siguientes enlaces:

El programa es muy sencillo de utilizar, permitiendo búsquedas de IPs concretas (/32), utilizando una cuenta gratuita (opción con Token) o una consulta sin cuenta alguna creada. También permite exportar el resultado a PDF o copiar en el portapapeles.

Inicio del programa

Un ejemplo de consulta podemos verlo en la siguiente imagen:

Resultado de búsqueda

Con la tecla ESC cerramos las ventanas emergentes y el programa.

Windows

En Windows disponemos de un instalardor muy sencillo. También dispone de un desinstalador para borrar cualquier rastro del programa en nuestro equipo. No requiere configuración alguna tras su instalación.

Linux Debian

En Linux debemos de realizar algunas tareas que se detallan en el archivo README.MD.


Enlaces de interés

IPInfo.io oficial.

IPInfo.io developers.

IPInfo.io free account.

APP de escritorio para Windows.

APP de escritorio para Debian.