Datos corregidos

parent e18bd50e
# Default ignored files
/shelf/
/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/AnalizadorLogs.iml" filepath="$PROJECT_DIR$/.idea/AnalizadorLogs.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
import datetime
from datetime import date,datetime
import time
def modificarFecha(cade):
cad=cade
if "Jan" in cad:
return cad.replace("Jan","1")
if "Feb" in cad:
return cad.replace("Feb","2")
if "Mar" in cad:
return cad.replace("Mar","3")
if "Apr" in cad:
return cad.replace("Apr","4")
if "May" in cad:
return cad.replace("May","5")
if "Jun" in cad:
return cad.replace("Jun","6")
if "Jul" in cad:
return cad.replace("Jul","7")
if "Aug" in cad:
return cad.replace("Aug","8")
if "Sep" in cad:
return cad.replace("Sep","9")
if "Oct" in cad:
return cad.replace("Oct","10")
if "Nov" in cad:
return cad.replace("Nov","11")
if "Dec" in cad:
return cad.replace("Dec","12")
from datetime import datetime
# Definimos la clase dato con: Host Remoto, fecha, metodo de petición, url, protocolo, etc...
class Dato:
#Atributos
hostRemoto=None
fecha=None
metodoPeticion=None
url=None
vProtocolo=None
statusCode=None
volumenTransf=None
marcaTiempo=None
def __init__(self,cadena):
c=0
aux=""
#Saco de la cadena el host remoto
while cadena[c] != ' ':
aux+=cadena[c]
c+=1
self.hostRemoto=aux
aux=""
#Situo el iterador para leer la fecha
while cadena[c] != '[':
c+=1
c+=1
#Leo fecha y hora
while cadena[c] != ' ':
aux+=cadena[c]
c+=1
c+=1
self.fecha = datetime.strptime(modificarFecha(aux), '%d/%m/%Y:%H:%M:%S')
aux=""
#Situo el iterador para leer el metodo de peticion
while cadena[c] != '"':
c+=1
c+=1
#Leo el metodo de peticion
while cadena[c] != ' ':
aux+=cadena[c]
c+=1
c+=1
self.metodoPeticion=aux
aux=""
#Saco la url
while cadena[c] != ' ':
aux+=cadena[c]
c+=1
c+=1
self.url=aux
aux=""
#Leo la version del protocolo, el codigo de estado y volumen de transferencia
while cadena[c] != '"':
aux+=cadena[c]
c+=1
c+=2
self.vProtocolo=aux
aux=""
while cadena[c] != ' ':
aux+=cadena[c]
c+=1
c+=1
self.statusCode=aux
aux=""
while c < len(cadena) and cadena[c]!=' ':
aux+=cadena[c]
c+=1
self.volumenTransf=aux
#Calculo la marca de tiempo
segReg=datetime.timestamp(self.fecha)
segHoy=datetime.timestamp(datetime.now())
self.marcaTiempo=int(segHoy-segReg)
'''
prueba=Dato("in24.inetnebr.com - - [01/Aug/1995:00:00:01 -0400] \"GET /shuttle/missions/sts-68/news/sts-68-mcc-05.txt HTTP/1.0\" 200 1839")
print(prueba.hostRemoto)
print(prueba.fecha)
print(prueba.metodoPeticion)
print(prueba.vProtocolo)
print(prueba.statusCode)
print(prueba.volumenTransf)
print(prueba.marcaTiempo)'''
\ No newline at end of file
def __init__(self, cadena):
# Atributos
self.hostRemoto = None
self.fecha = None
self.metodoPeticion = None
self.url = None
self.vProtocolo = None
self.statusCode = None
self.volumenTransf = None
self.marcaTiempo = None
# Se obtienen todos los datos
self.obtenerDatos(cadena)
# Funcion que asigna los valores debidos a la clase
def obtenerDatos(self, cadena):
# Auxiliares, iterador y cadena vacia
c = 0
aux = ""
# Obtenemos todos los valores necesarios, hostRemoto, fecha
self.hostRemoto, c = sacarLinea(cadena, c, aux, ' ')
self.fecha, c = leerFecha(cadena, c, aux)
# Obtenemos modo de petición, url y protocolo
c = leerLinea(cadena, c, '"')
self.metodoPeticion, c = sacarLinea(cadena, c, aux, ' ')
self.URL, c = sacarLinea(cadena, c, aux, ' ')
self.vProtocolo, c = sacarLinea(cadena, c, aux, '"')
c += 2
# Obtenemos estado del código, volumen de tranferencia y calculamos marca de tiempo
self.statusCode, c = sacarLinea(cadena, c, aux, ' ')
self.volumenTransf, c = sacarLinea(cadena, c, aux, ' ')
self.marcaTiempo = int(datetime.now().timestamp() - self.fecha.timestamp())
# Lee lineas del fichero
def leerLinea(cadena, c, signo):
while cadena[c] != signo:
c += 1
return c + 1
# Saca líneas del fichero
def sacarLinea(cadena, c, aux, signo):
while c < len(cadena) and cadena[c] != signo:
aux += cadena[c]
c += 1
return aux, c + 1
# Sitúa el iterador y lee la fecha y hora, ademas la ajusta convenientemente
def leerFecha(cadena, c, aux):
c = leerLinea(cadena, c, '[')
aux, c = sacarLinea(cadena, c, aux, ' ')
aux = modificarFecha(aux)
return datetime.strptime(aux, '%d/%m/%Y:%H:%M:%S'), c
# Cambia el mes en la fecha por el número que le corresponde
def modificarFecha(cadena):
meses = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
numeros = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]
mes = ""
numero = ""
for i in meses:
if i in cadena:
mes = i
numero = numeros[meses.index(i)]
return cadena.replace(mes, numero)
# Comprobación
p = Dato(
"in24.inetnebr.com - - [01/Aug/1995:00:00:01 -0400] \"GET /shuttle/missions/sts-68/news/sts-68-mcc-05.txt HTTP/1.0\" 200 1839")
informe = ('Host Remoto: {}\nFecha: {}\nMétodo de Petición: {}\nProtocolo: {}\nstatusCode: {}\nVolumen de transferencia: {}\n'
'Marca de tiempo: {}\n')
print(informe.format(p.hostRemoto, p.fecha, p.metodoPeticion, p.vProtocolo, p.statusCode, p.volumenTransf, p.marcaTiempo))
import Dato
from Dato import Dato
def eSpidering(reg):
aQuitar=["spider","bot","crawler"]
c=0
for r in reg:
for q in aQuitar:
if q in r.hostRemoto.lower():
reg.pop(c)
c+=1
return reg
aQuitar = ["spider", "bot", "crawler"]
c = 0
for r in reg:
for q in aQuitar:
if q in r.hostRemoto.lower():
reg.pop(c)
c += 1
return reg
def identificacionUsuarios(reg):
aux=[]
ret=[]
#Cojo las IPs distintas del conjunto de datos
for r in reg:
aux.append(r.hostRemoto)
aux=set(aux)
#Ordeno los distintos registros de cada usuario de mas antiguos a mas nuevos
for usuario in aux:
con=[]
for r in reg:
if r.hostRemoto==usuario:
con.append(r)
#Ordeno
for i in range(len(con)):
for j in range(len(con)):
if con[i].marcaTiempo > con[j].marcaTiempo:
con[i],con[j]=con[j],con[i]
ret+=con
return ret
aux = []
ret = []
# Cojo las IPs distintas del conjunto de datos
for r in reg:
aux.append(r.hostRemoto)
aux = set(aux)
# Ordeno los distintos registros de cada usuario de mas antiguos a mas nuevos
for usuario in aux:
con = []
for r in reg:
if r.hostRemoto == usuario:
con.append(r)
# Ordeno
for i in range(len(con)):
for j in range(len(con)):
if con[i].marcaTiempo > con[j].marcaTiempo:
con[i], con[j] = con[j], con[i]
ret += con
return ret
def leerFicheroLog(ruta, espidering):
registros = []
f = open(ruta, "r")
total = 0
for linea in f:
total += 1
try:
registros.append(Dato(linea))
except:
continue
f.close()
if espidering:
registros = eSpidering(registros)
print("Procesados ", len(registros), " registros")
return registros
def leerFicheroLogEliminarFiltradas(ruta, extensionesNoDeseadas, espidering):
registros = []
f = open(ruta, "r")
total = 0
for linea in f:
total += 1
try:
aux = Dato(linea)
admitido = True
for ext in extensionesNoDeseadas:
if ext in aux.url:
admitido = false
if admitido:
registros.append(aux)
except:
continue
f.close()
if espidering:
registros = eSpidering(registros)
print("Procesados ", len(registros), " registros")
return registros
def leerFicheroLog(ruta,espidering):
registros=[]
f = open(ruta, "r")
total=0
for linea in f:
total+=1
try:
registros.append(Dato(linea))
except:
continue
f.close()
if espidering:
registros=eSpidering(registros)
print("Procesados ",len(registros)," registros")
return registros
def leerFicheroLogEliminarFiltradas(ruta,extensionesNoDeseadas,espidering):
registros=[]
f = open(ruta, "r")
total=0
for linea in f:
total+=1
try:
aux=Dato(linea)
admitido=True
for ext in extensionesNoDeseadas:
if ext in aux.url:
admitido=false
if admitido:
registros.append(aux)
except:
continue
f.close()
if espidering:
registros=eSpidering(registros)
print("Procesados ",len(registros)," registros")
return registros
def leerFicheroLogAceptarFiltradas(ruta, extensionesNoDeseadas, espidering):
registros = []
f = open(ruta, "r")
total = 0
for linea in f:
total += 1
try:
aux = Dato(linea)
admitido = False
for ext in extensionesNoDeseadas:
if ext in aux.url:
admitido = True
if admitido:
registros.append(aux)
except:
continue
f.close()
if espidering:
registros = eSpidering(registros)
print("Procesados ", len(registros), " registros")
return registros
def leerFicheroLogAceptarFiltradas(ruta,extensionesNoDeseadas,espidering):
registros=[]
f = open(ruta, "r")
total=0
for linea in f:
total+=1
try:
aux=Dato(linea)
admitido=False
for ext in extensionesNoDeseadas:
if ext in aux.url:
admitido=True
if admitido:
registros.append(aux)
except:
continue
f.close()
if espidering:
registros=eSpidering(registros)
print("Procesados ",len(registros)," registros")
return registros
registros=leerFicheroLog("../access_log_Aug95_reducido",True)
registros = leerFicheroLog("../access_log_Aug95_reducido", True)
registros=identificacionUsuarios(registros)
registros = identificacionUsuarios(registros)
for i in registros:
print(i.hostRemoto," ",i.marcaTiempo)
print(i.hostRemoto, " ", i.marcaTiempo)
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment