iplocate/iplocate.py
2022-05-14 03:18:52 -04:00

144 lines
4.8 KiB
Python
Executable File

#!/usr/bin/env python
import os
import sys
import subprocess
import requests
import re
import configparser as cfg
from os.path import isfile
from json import loads
from colorama import Fore, Back, Style
import sql_alch
selfpath = os.path.abspath(os.path.dirname(__file__))
ownip = requests.get('https://ifconfig.me/').text
parser = cfg.ConfigParser()
parser.read(f'{selfpath}/config.cfg')
token = parser.get('iplocate','token')
token = token.strip("'")
muevelog = f'{selfpath}/muevelog.sh '
# Colores
co_rst = Style.RESET_ALL
co_Blu = Fore.BLUE+Style.NORMAL
co_BluD = Fore.BLUE+Style.DIM
co_BluB = Fore.BLUE+Style.BRIGHT
co_Red = Fore.RED+Style.NORMAL
co_RedD = Fore.RED+Style.DIM
co_RedB = Fore.RED+Style.BRIGHT
co_Grn = Fore.GREEN+Style.NORMAL
co_GrnD = Fore.GREEN+Style.DIM
co_GrnB = Fore.GREEN+Style.BRIGHT
co_Yel = Fore.YELLOW+Style.NORMAL
co_YelD = Fore.YELLOW+Style.DIM
co_YelB = Fore.YELLOW+Style.BRIGHT
co_BluLWh = Fore.BLUE+Back.LIGHTWHITE_EX+Style.NORMAL
co_BluLWhB = Fore.BLUE+Back.LIGHTWHITE_EX+Style.BRIGHT
co_GrnMgnB = Fore.GREEN+Back.MAGENTA+Style.BRIGHT
co_RedBluD = Fore.RED+Back.BLUE+Style.DIM
co_LRedBleD = Fore.LIGHTRED_EX+Back.BLUE+Style.DIM
co_BlkMgnB = Fore.BLACK+Back.MAGENTA+Style.BRIGHT
co_BlkMgn = Fore.BLACK+Back.MAGENTA+Style.NORMAL
co_LGrLBlk = Fore.LIGHTGREEN_EX+Back.LIGHTBLACK_EX
co_RdYl = Fore.RED+Back.YELLOW+Style.NORMAL
co_RdYlB = Fore.RED+Back.YELLOW+Style.BRIGHT
co_BlkLBlkD = Fore.BLACK+Back.LIGHTBLACK_EX+Style.DIM
co_BluLBlkD = Fore.BLUE+Back.LIGHTBLACK_EX+Style.DIM
co_cuBlu = '\33[38;5;122m'
# IP validate https://stackoverflow.com/questions/319279/how-to-validate-ip-address-in-python
ip_regx = "^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$"
def filtro_ip_propia(ip):
return True if ip != ownip else False
def consulta_db(ip_consulta):
consulta = f'https://ipinfo.io/{ip_consulta}{token}'
info_ip = requests.get(consulta).text
return loads(info_ip)
def consulta(ip_consulta):
consulta = f'https://ipinfo.io/{ip_consulta}'
info_ip = requests.get(consulta).text
info_ip = loads(info_ip)
for llave, valor in info_ip.items():
print(f'{co_YelB}{llave}\b\t{co_Blu}->{co_rst} {co_Grn}{valor}{co_rst}')
def ipLocate(ip):
if (re.search(ip_regx, ip)):
consulta(ip)
print(f'{co_RedB}------------------------------', end='')
print(f'--------------------------------{co_rst}')
else:
ipr = ip.split('\n')[0]
print(f'{co_Red}[{co_BlkMgn}{ipr}{co_rst}{co_Red}] no es una IP válida!{co_rst}')
def archivo_ips(ips):
with open(ips, 'r') as lista:
for linea in lista:
ipLocate(linea)
sys.exit(0)
def main():
try:
match sys.argv[1]:
case '--sync':
print(f'{co_YelB}Sincronizando logs del servidor(bash script){co_rst}')
subprocess.check_call(
muevelog+"%s" % "--start",
shell=True)
case '-c':
print(f'{co_YelB}Cargando logs en base de datos{co_rst}')
sql_alch.carga_logs()
case '-g':
print(f'{co_YelB}Registrando datos de ipinfo{co_rst}')
sql_alch.registro_ips()
case '-f':
if isfile(sys.argv[2]):
archivo_ips(sys.argv[2])
else:
print(f'{co_Red}Archivo [{co_BlkMgn}{sys.argv[2]}'+
f'{co_rst}{co_Red}] no es válido''')
sys.exit(0)
case '-h':
uso()
exit(0)
case _:
ip = sys.argv[1]
ipLocate(ip)
except IndexError:
print(f'\n{co_Blu}Ingresa una {co_BluB}IP o \'s\' ',end='')
print(f'{co_Blu}para salir:{co_rst}')
while True:
ip = input(f'{co_BluB} -> {co_rst}')
if ip in 'sq0SQnN':
exit(0)
ipLocate(ip)
finally:
sys.exit(0)
def uso():
ayuda = f"""
{co_BluB}ipLocate{co_rst}
{co_cuBlu}Muestra información disponible en ipinfo.io sobre IPs consultadas.{co_rst}
{co_BluB}Uso:{co_rst}
{co_YelB}iploc {co_Blu}<IP> {co_Grn}- Muestra la información de <IP>.{co_rst}
{co_YelB}iploc -f {co_Blu}<archivo> {co_Grn}- Muestra info. de las IPs en <archivo>
{co_YelB}iploc -c {co_Grn}- Carga logs en base de datos.{co_rst}
{co_YelB}iploc -g {co_Grn}- Guarda ipinfo de IPs sin registro en la BD.{co_rst}
{co_YelB}iploc -h {co_Grn}- Muestra esta ayuda.{co_rst}
{co_YelB}iploc --sync {co_Grn}- Sincroniza logs del servidor (bash script).{co_rst}
"""
print(ayuda)
if __name__ == "__main__":
main()