agregadas funciones: iploc '-d' y '-D' (iplocate)
modf: print_ipinfo() print segun type() modf: archivo_ips() elimina \n en caso de modf: repr de Clases/Tablas (sql_alch) pend: cambiar token(bool) por int() o str()
This commit is contained in:
parent
cbfa2dd65d
commit
3fabf8b593
11
README.md
11
README.md
@ -39,20 +39,23 @@ Crea base de datos ***SQLite3*** **`./ipinfo.db`** con tablas de **registro** y
|
|||||||
ej. alias `alias iploc='~/ruta/script/iplocate.py'`
|
ej. alias `alias iploc='~/ruta/script/iplocate.py'`
|
||||||
```bash
|
```bash
|
||||||
ipLocate
|
ipLocate
|
||||||
Muestra información disponible en ipinfo.io sobre IPs consultadas.
|
Consulta información sobre IP(s) disponibles en ipinfo.io con o sin token.
|
||||||
|
Carga logs de nginx en base de datos. Consulta con ipinfo.io y registra
|
||||||
|
en base de datos.
|
||||||
|
Consultas y reportes según información en la base de datos.
|
||||||
|
|
||||||
Uso:
|
Uso:
|
||||||
iploc <IP> - Consulta la información de <IP> disponible en ipinfo.io.
|
iploc <IP> - Consulta la información de <IP> disponible en ipinfo.io.
|
||||||
iploc -t <IP> - Consulta la info. de <IP> usando 'token' de ipinfo.io,
|
iploc -t <IP> - Consulta la info. de <IP> usando 'token' de ipinfo.io,
|
||||||
especificado en config.cfg.
|
especificado en config.cfg.
|
||||||
iploc -f <archivo> - Consulta info. de las IPs en <archivo> (ipinfo.ip).
|
iploc -d <IP> - Consulta la información de <IP> disponible en base de datos.
|
||||||
|
iploc -f <archivo> - Consulta info. de las IPs en <archivo> (ipinfo.io).
|
||||||
|
iploc -F <archivo> - Consulta info. de las IPs en <archivo> (token, ipinfo.io).
|
||||||
iploc -D <archivo> - Consulta info. de las IPs en <archivo> (base de datos).
|
iploc -D <archivo> - Consulta info. de las IPs en <archivo> (base de datos).
|
||||||
iploc -d <IP> - Muestra toda la info. disponible de <IP> registrada en BD.
|
|
||||||
iploc -c - Carga logs en base de datos.
|
iploc -c - Carga logs en base de datos.
|
||||||
iploc -g - Guarda ipinfo de IPs sin registro en la BD.
|
iploc -g - Guarda ipinfo de IPs sin registro en la BD.
|
||||||
iploc -h - Muestra esta ayuda.
|
iploc -h - Muestra esta ayuda.
|
||||||
iploc --sync - Sincroniza logs del servidor (bash script).
|
iploc --sync - Sincroniza logs del servidor (bash script).
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**`iploc --sync`**
|
**`iploc --sync`**
|
||||||
|
77
iplocate.py
77
iplocate.py
@ -66,17 +66,52 @@ def consulta_ip(ip_consulta, tkn=True):
|
|||||||
info_ip = requests.get(consulta).text
|
info_ip = requests.get(consulta).text
|
||||||
return loads(info_ip)
|
return loads(info_ip)
|
||||||
case None:
|
case None:
|
||||||
return {}
|
resp = sql_alch.consulta_db(ip_consulta)
|
||||||
|
#print('consulta_ip :', resp)
|
||||||
|
return resp
|
||||||
# aqui va la consulta a base de datos
|
# aqui va la consulta a base de datos
|
||||||
|
|
||||||
|
|
||||||
def print_ipinfo(ip, tkn=True):
|
def print_ipinfo(ip, tkn=True):
|
||||||
if (re.search(ip_regx, ip)):
|
if (re.search(ip_regx, ip)):
|
||||||
ip_info = consulta_ip(ip, tkn)
|
ip_info = consulta_ip(ip, tkn)
|
||||||
for llave, valor in ip_info.items():
|
if isinstance(ip_info, dict):
|
||||||
print(f'{co_YelB}{llave}\b\t{co_Blu}->{co_rst} {co_Grn}{valor}{co_rst}')
|
for llave, valor in ip_info.items():
|
||||||
print(f'{co_RedB}------------------------------', end='')
|
print(f'{co_YelB}{llave}\b\t{co_Blu}->{co_rst} {co_Grn}{valor}{co_rst}')
|
||||||
print(f'--------------------------------{co_rst}')
|
print(f'{co_RedB}------------------------------', end='')
|
||||||
|
print(f'--------------------------------{co_rst}')
|
||||||
|
elif isinstance(ip_info, list):
|
||||||
|
contad=0
|
||||||
|
for tupla in ip_info:
|
||||||
|
if contad < 1:
|
||||||
|
for ind, val in enumerate(tupla):
|
||||||
|
if ind == 0:
|
||||||
|
print(f'{co_RedB}-------------------------'
|
||||||
|
f'---------------------------{co_rst}')
|
||||||
|
for dato in str(val).split(';'):
|
||||||
|
print(f'{co_Blu}| {co_BluB}{dato.split("=")[0].ljust(12)}'
|
||||||
|
f'{co_Blu}| {co_rst}{dato.split("=")[1]}{co_rst}')
|
||||||
|
print(f'{co_BluD}-------------------------'
|
||||||
|
f'---------------------------{co_rst}')
|
||||||
|
print(f'{co_Blu}|{co_YelB} Codigo html {co_Blu}|'
|
||||||
|
f'{co_YelB} Fecha Visita{co_rst}')
|
||||||
|
else:
|
||||||
|
codig = str(val).split(',')[2].split('=')[1]
|
||||||
|
fecha = str(val).split(',')[3].split('=')[1]
|
||||||
|
print(f'{co_Blu}|{co_GrnB} {codig} {co_Blu}|'
|
||||||
|
f'{co_Grn} {fecha}{co_rst}')
|
||||||
|
else:
|
||||||
|
for ind, val in enumerate(tupla):
|
||||||
|
if ind > 0:
|
||||||
|
codig = str(val).split(',')[2].split('=')[1]
|
||||||
|
fecha = str(val).split(',')[3].split('=')[1]
|
||||||
|
print(f'{co_Blu}|{co_GrnB} {codig} {co_Blu}|'
|
||||||
|
f'{co_Grn} {fecha}{co_rst}')
|
||||||
|
contad+=1
|
||||||
|
print(f'{co_RedB}-------------------------'
|
||||||
|
f'---------------------------{co_rst}')
|
||||||
|
else:
|
||||||
|
print('otra wea: ', type(ip_info))
|
||||||
else:
|
else:
|
||||||
ipr = ip.split('\n')[0]
|
ipr = ip.split('\n')[0]
|
||||||
print(f'{co_Red}[{co_BlkMgn}{ipr}{co_rst}{co_Red}] no es una IP válida!{co_rst}')
|
print(f'{co_Red}[{co_BlkMgn}{ipr}{co_rst}{co_Red}] no es una IP válida!{co_rst}')
|
||||||
@ -85,6 +120,8 @@ def print_ipinfo(ip, tkn=True):
|
|||||||
def archivo_ips(ips, tkn=True):
|
def archivo_ips(ips, tkn=True):
|
||||||
with open(ips, 'r') as lista:
|
with open(ips, 'r') as lista:
|
||||||
for linea in lista:
|
for linea in lista:
|
||||||
|
if '\n' in linea:
|
||||||
|
linea = linea.split('\n')[0]
|
||||||
print_ipinfo(linea, tkn)
|
print_ipinfo(linea, tkn)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
@ -102,13 +139,17 @@ def main():
|
|||||||
print(f'{co_YelB}Cargando logs en base de datos{co_rst}')
|
print(f'{co_YelB}Cargando logs en base de datos{co_rst}')
|
||||||
sql_alch.carga_logs()
|
sql_alch.carga_logs()
|
||||||
case '-d':
|
case '-d':
|
||||||
print(f'{co_YelB}test_db-d{co_rst}')
|
print(f'{co_YelB}Consulta base de datos:{co_rst}')
|
||||||
# PENDIENTE # PENDIENTE
|
ip = sys.argv[2]
|
||||||
#sql_alch.test_db()
|
print_ipinfo(ip, None)
|
||||||
case '-D':
|
case '-D':
|
||||||
print(f'{co_YelB}test_db-D{co_rst}')
|
print(f'{co_YelB}Consulta por archivo en base de datos:{co_rst}')
|
||||||
# PENDIENTE # PENDIENTE
|
if isfile(sys.argv[2]):
|
||||||
#sql_alch.test_db()
|
archivo_ips(sys.argv[2], None)
|
||||||
|
else:
|
||||||
|
print(f'{co_Red}Archivo [{co_BlkMgn}{sys.argv[2]}'+
|
||||||
|
f'{co_rst}{co_Red}] no es válido''')
|
||||||
|
sys.exit(0)
|
||||||
case '-g':
|
case '-g':
|
||||||
print(f'{co_YelB}Registrando datos de ipinfo{co_rst}')
|
print(f'{co_YelB}Registrando datos de ipinfo{co_rst}')
|
||||||
sql_alch.registro_ips()
|
sql_alch.registro_ips()
|
||||||
@ -152,9 +193,14 @@ def main():
|
|||||||
def uso():
|
def uso():
|
||||||
ayuda = f"""
|
ayuda = f"""
|
||||||
{co_BluB}ipLocate{co_rst}
|
{co_BluB}ipLocate{co_rst}
|
||||||
{co_cuBlu}Muestra información disponible en ipinfo.io sobre IPs consultadas.{co_rst}
|
{co_cuBlu}Consulta información sobre IP(s) disponibles en ipinfo.io con o sin token.
|
||||||
|
Carga logs de nginx en base de datos. Consulta con ipinfo.io y registra
|
||||||
|
en base de datos.
|
||||||
|
Consultas y reportes según información en la base de datos.{co_rst}
|
||||||
|
|
||||||
{co_BluB}Uso:{co_rst}
|
{co_YelB}iploc -h {co_Grn}- Muestra esta ayuda.{co_rst}
|
||||||
|
|
||||||
|
{co_BluB}Uso para consultas:{co_rst}
|
||||||
{co_YelB}iploc {co_Blu}<IP> {co_Grn}- Consulta la información de <IP> disponible en ipinfo.io.{co_rst}
|
{co_YelB}iploc {co_Blu}<IP> {co_Grn}- Consulta la información de <IP> disponible en ipinfo.io.{co_rst}
|
||||||
{co_YelB}iploc -t {co_Blu}<IP> {co_Grn}- Consulta la info. de <IP> usando 'token' de ipinfo.io,
|
{co_YelB}iploc -t {co_Blu}<IP> {co_Grn}- Consulta la info. de <IP> usando 'token' de ipinfo.io,
|
||||||
especificado en config.cfg.{co_rst}
|
especificado en config.cfg.{co_rst}
|
||||||
@ -162,10 +208,11 @@ def uso():
|
|||||||
{co_YelB}iploc -f {co_Blu}<archivo> {co_Grn}- Consulta info. de las IPs en <archivo> (ipinfo.io).{co_rst}
|
{co_YelB}iploc -f {co_Blu}<archivo> {co_Grn}- Consulta info. de las IPs en <archivo> (ipinfo.io).{co_rst}
|
||||||
{co_YelB}iploc -F {co_Blu}<archivo> {co_Grn}- Consulta info. de las IPs en <archivo> (token, ipinfo.io).{co_rst}
|
{co_YelB}iploc -F {co_Blu}<archivo> {co_Grn}- Consulta info. de las IPs en <archivo> (token, ipinfo.io).{co_rst}
|
||||||
{co_YelB}iploc -D {co_Blu}<archivo> {co_Grn}- Consulta info. de las IPs en <archivo> (base de datos).{co_rst}
|
{co_YelB}iploc -D {co_Blu}<archivo> {co_Grn}- Consulta info. de las IPs en <archivo> (base de datos).{co_rst}
|
||||||
|
|
||||||
|
{co_BluB}Operaciones base de datos:{co_rst}
|
||||||
|
{co_YelB}iploc --sync {co_Grn}- Sincroniza logs del servidor (bash script).{co_rst}
|
||||||
{co_YelB}iploc -c {co_Grn}- Carga logs en base de datos.{co_rst}
|
{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 -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)
|
print(ayuda)
|
||||||
|
50
sql_alch.py
50
sql_alch.py
@ -36,6 +36,23 @@ class Registro(Base):
|
|||||||
back_populates="visita_ip",
|
back_populates="visita_ip",
|
||||||
cascade="all, delete, delete-orphan")
|
cascade="all, delete, delete-orphan")
|
||||||
|
|
||||||
|
def get_fecha(self):
|
||||||
|
return time.asctime(time.localtime(int(self.fecha_reg.__repr__())))
|
||||||
|
|
||||||
|
|
||||||
|
def __repr__(self) -> str:
|
||||||
|
#print('en repr')
|
||||||
|
try:
|
||||||
|
rep = f'ip={self.ip};host={self.hostname};anycast={self.anycast};'+\
|
||||||
|
f'cuidad={self.cuidad};region={self.region};pais={self.pais};'+\
|
||||||
|
f'geoloc={self.geoloc};organizacion={self.organizacion};'+\
|
||||||
|
f'fecha_reg={self.get_fecha()};tzone={self.tzone};cod_post={self.cod_post}'
|
||||||
|
#print('Repr:', rep)
|
||||||
|
return rep
|
||||||
|
except Exception as ex:
|
||||||
|
print('Exception :', ex)
|
||||||
|
return "error repr"
|
||||||
|
|
||||||
|
|
||||||
class Visita(Base):
|
class Visita(Base):
|
||||||
__tablename__ = 'visita'
|
__tablename__ = 'visita'
|
||||||
@ -50,23 +67,16 @@ class Visita(Base):
|
|||||||
def get_fecha(self):
|
def get_fecha(self):
|
||||||
return time.asctime(time.localtime(int(self.fecha.__repr__())))
|
return time.asctime(time.localtime(int(self.fecha.__repr__())))
|
||||||
|
|
||||||
def fecha_local(self):
|
|
||||||
fecha_l = self.get_fecha()
|
|
||||||
#fecha_l = time.asctime(self.fecha)
|
|
||||||
return fecha_l
|
|
||||||
#fecha_l = time.strftime(fecha_l)
|
|
||||||
|
|
||||||
def consulta_registro(self):
|
def consulta_registro(self):
|
||||||
return True if self.registro == 1 else False
|
return True if self.registro == 1 else False
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return "ID: {}\nIP: {}\nHtmlCode: {}\n" \
|
try:
|
||||||
"Fecha: {}\nRegistrado: {}\n".format(
|
rep = f'id={self.id},ip={self.ip},html={self.html},fecha={self.get_fecha()}'
|
||||||
self.id,
|
return rep
|
||||||
self.ip,
|
except Exception as ex:
|
||||||
self.html,
|
print('Exception :', ex)
|
||||||
self.get_fecha(),
|
return "Error repr Visita"
|
||||||
self.consulta_registro())
|
|
||||||
|
|
||||||
|
|
||||||
engine = create_engine(base_de_datos)
|
engine = create_engine(base_de_datos)
|
||||||
@ -120,8 +130,8 @@ def ip_registrada(ip):
|
|||||||
ip_reg = session.query(Visita).filter(Visita.ip==ip).filter(Visita.registro==1).first()
|
ip_reg = session.query(Visita).filter(Visita.ip==ip).filter(Visita.registro==1).first()
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print('Exception', ex)
|
print('Exception', ex)
|
||||||
finally:
|
ip_reg = None
|
||||||
return 0 if ip_reg is None else ip_reg.registro
|
return 0 if ip_reg is None else ip_reg.registro
|
||||||
|
|
||||||
|
|
||||||
def carga_access_log(log):
|
def carga_access_log(log):
|
||||||
@ -226,8 +236,14 @@ def carga_registro_ip(ip_info):
|
|||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print('Exception: ', ex)
|
print('Exception: ', ex)
|
||||||
|
|
||||||
def registro():
|
def consulta_db(ip):
|
||||||
pass
|
try:
|
||||||
|
statement = session.query(Registro, Visita).join('visitas').filter_by(ip=ip)
|
||||||
|
result = session.execute(statement).all()
|
||||||
|
return result
|
||||||
|
except Exception as ex:
|
||||||
|
print('Exception consulta_db:\n', ex)
|
||||||
|
|
||||||
|
|
||||||
def test_db():
|
def test_db():
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user