Periódicamente realizo el monitoreo de mis servidores personales y hace tiempo programé
Heimdall, un útil script a la medida hecho en python que me permite desde analizar los logs
de mis aplicaciones (para detectar y ubicar a los usuarios "creativos") así
como bloquear direcciones ip en mi firewall, entre otras cosas.
El punto es que ésta semana al correr mi script me di cuenta
ya no me informaba la ubicación aproximada de las ips "creativas". Al revisar más
a fondo veo que el problema es el api de geolocalización que utilizaba.
Ésta reestringió su uso por lo que ya no me es posible utilizarla para mi
uso personal (se truena a las 5 ips localizadas) y era necesario encontrar otra solución.
Quedé bastante sorprendido de lo bien que me ha funcionado para mi uso personal.
Aquí algunas características del API:
1. Gratis para uso no comercial.
2. No requiere API-key.
3. Puedes realizar hasta 45 solicitudes HTTP por minuto desde una misma IP.
4. Tiempo de respuesta de 50 milisegundos desde casi todas las partes del mundo.
5. Respuestas en JSON XML, CSV Newline y PHP además de Batch API y DNS API.
6. Mantienen la base de datos de IP's actualizada.
7. El proyecto está activo desde 2012.
Así se ve la ubicación de IP's desde mi script
Por aca les dejo un script de ejemplo para que puedan probar el API
###################################################################
# Programa para probar IP-API
# Autor: Gustavo Gómez Macías (Goz)
# Tutoriales Code With Goz
###################################################################
import requests
from prettytable import PrettyTable
def get_ip_location():
""" Geolocate IP via API """
ip = input(f'Escribe la IP que se va a localizar: ')
response = requests.get(f'http://ip-api.com/json/{ip}').json()
location_data = {
"ip": ip,
"city": response.get("city"),
"region": response.get("region"),
"country": response.get("country"),
"latitude": response.get("lat"),
"longitude": response.get("lon"),
"org": response.get("org")
}
myTable = PrettyTable(['IP','Ciudad','Región','País','Latitud','Longitud','ISP'])
print(f'{ip} Localizada')
myTable.add_row([location_data['ip'],location_data['city'],location_data['region'],location_data['country'],
location_data['latitude'],location_data['longitude'],location_data['org']])
print(myTable)
status = True
while status:
print(80 * "*")
print('Bienvenido/a')
print(80 * "*")
print('Selecciona una opción:\n')
print('1. Ubicar IP de forma directa')
print('\n Salir(s)')
print(80 * "*")
selection = input('¿Qué quieres hacer? ')
if selection == '1':
get_ip_location()
elif selection == 's':
status = False
else:
print("La opción elegida no es correcta")
Y eso es todo, ojalá a alguien le sirva para sus proyectos personales y si usted llegó hasta aca y no entendió nada de lo que dije no se preocupe
le dejo el enlace a mis próximos cursos
sólo da click aquí
Un abrazo!!!
Goz