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 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")
# Definimos la clase dato con: Host Remoto, fecha, metodo de petición, url, protocolo, etc...
class Dato: class Dato:
#Atributos
hostRemoto=None def __init__(self, cadena):
fecha=None # Atributos
metodoPeticion=None self.hostRemoto = None
url=None self.fecha = None
vProtocolo=None self.metodoPeticion = None
statusCode=None self.url = None
volumenTransf=None self.vProtocolo = None
marcaTiempo=None self.statusCode = None
self.volumenTransf = None
def __init__(self,cadena): self.marcaTiempo = None
c=0
aux="" # Se obtienen todos los datos
#Saco de la cadena el host remoto self.obtenerDatos(cadena)
while cadena[c] != ' ':
aux+=cadena[c] # Funcion que asigna los valores debidos a la clase
c+=1 def obtenerDatos(self, cadena):
self.hostRemoto=aux # Auxiliares, iterador y cadena vacia
aux="" c = 0
#Situo el iterador para leer la fecha aux = ""
while cadena[c] != '[':
c+=1 # Obtenemos todos los valores necesarios, hostRemoto, fecha
c+=1 self.hostRemoto, c = sacarLinea(cadena, c, aux, ' ')
#Leo fecha y hora self.fecha, c = leerFecha(cadena, c, aux)
while cadena[c] != ' ':
aux+=cadena[c] # Obtenemos modo de petición, url y protocolo
c+=1 c = leerLinea(cadena, c, '"')
c+=1 self.metodoPeticion, c = sacarLinea(cadena, c, aux, ' ')
self.fecha = datetime.strptime(modificarFecha(aux), '%d/%m/%Y:%H:%M:%S') self.URL, c = sacarLinea(cadena, c, aux, ' ')
aux="" self.vProtocolo, c = sacarLinea(cadena, c, aux, '"')
#Situo el iterador para leer el metodo de peticion c += 2
while cadena[c] != '"':
c+=1 # Obtenemos estado del código, volumen de tranferencia y calculamos marca de tiempo
c+=1 self.statusCode, c = sacarLinea(cadena, c, aux, ' ')
#Leo el metodo de peticion self.volumenTransf, c = sacarLinea(cadena, c, aux, ' ')
while cadena[c] != ' ': self.marcaTiempo = int(datetime.now().timestamp() - self.fecha.timestamp())
aux+=cadena[c]
c+=1
c+=1 # Lee lineas del fichero
self.metodoPeticion=aux def leerLinea(cadena, c, signo):
aux="" while cadena[c] != signo:
#Saco la url c += 1
while cadena[c] != ' ':
aux+=cadena[c] return c + 1
c+=1
c+=1
self.url=aux # Saca líneas del fichero
aux="" def sacarLinea(cadena, c, aux, signo):
#Leo la version del protocolo, el codigo de estado y volumen de transferencia while c < len(cadena) and cadena[c] != signo:
while cadena[c] != '"': aux += cadena[c]
aux+=cadena[c] c += 1
c+=1
c+=2 return aux, c + 1
self.vProtocolo=aux
aux=""
while cadena[c] != ' ': # Sitúa el iterador y lee la fecha y hora, ademas la ajusta convenientemente
aux+=cadena[c] def leerFecha(cadena, c, aux):
c+=1 c = leerLinea(cadena, c, '[')
c+=1 aux, c = sacarLinea(cadena, c, aux, ' ')
self.statusCode=aux aux = modificarFecha(aux)
aux=""
while c < len(cadena) and cadena[c]!=' ': return datetime.strptime(aux, '%d/%m/%Y:%H:%M:%S'), c
aux+=cadena[c]
c+=1
self.volumenTransf=aux # Cambia el mes en la fecha por el número que le corresponde
#Calculo la marca de tiempo def modificarFecha(cadena):
segReg=datetime.timestamp(self.fecha) meses = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
segHoy=datetime.timestamp(datetime.now()) numeros = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]
self.marcaTiempo=int(segHoy-segReg) mes = ""
numero = ""
''' for i in meses:
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") if i in cadena:
print(prueba.hostRemoto) mes = i
print(prueba.fecha) numero = numeros[meses.index(i)]
print(prueba.metodoPeticion)
print(prueba.vProtocolo) return cadena.replace(mes, numero)
print(prueba.statusCode)
print(prueba.volumenTransf)
print(prueba.marcaTiempo)''' # Comprobación
\ No newline at end of file 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 import Dato
from Dato import Dato from Dato import Dato
def eSpidering(reg): def eSpidering(reg):
aQuitar=["spider","bot","crawler"] aQuitar = ["spider", "bot", "crawler"]
c=0 c = 0
for r in reg: for r in reg:
for q in aQuitar: for q in aQuitar:
if q in r.hostRemoto.lower(): if q in r.hostRemoto.lower():
reg.pop(c) reg.pop(c)
c+=1 c += 1
return reg return reg
def identificacionUsuarios(reg): def identificacionUsuarios(reg):
aux=[] aux = []
ret=[] ret = []
#Cojo las IPs distintas del conjunto de datos # Cojo las IPs distintas del conjunto de datos
for r in reg: for r in reg:
aux.append(r.hostRemoto) aux.append(r.hostRemoto)
aux=set(aux) aux = set(aux)
#Ordeno los distintos registros de cada usuario de mas antiguos a mas nuevos # Ordeno los distintos registros de cada usuario de mas antiguos a mas nuevos
for usuario in aux: for usuario in aux:
con=[] con = []
for r in reg: for r in reg:
if r.hostRemoto==usuario: if r.hostRemoto == usuario:
con.append(r) con.append(r)
#Ordeno # Ordeno
for i in range(len(con)): for i in range(len(con)):
for j in range(len(con)): for j in range(len(con)):
if con[i].marcaTiempo > con[j].marcaTiempo: if con[i].marcaTiempo > con[j].marcaTiempo:
con[i],con[j]=con[j],con[i] con[i], con[j] = con[j], con[i]
ret+=con ret += con
return ret return ret
def leerFicheroLog(ruta,espidering): def leerFicheroLog(ruta, espidering):
registros=[] registros = []
f = open(ruta, "r") f = open(ruta, "r")
total=0 total = 0
for linea in f: for linea in f:
total+=1 total += 1
try: try:
registros.append(Dato(linea)) registros.append(Dato(linea))
except: except:
continue continue
f.close() f.close()
if espidering: if espidering:
registros=eSpidering(registros) registros = eSpidering(registros)
print("Procesados ",len(registros)," registros") print("Procesados ", len(registros), " registros")
return registros return registros
def leerFicheroLogEliminarFiltradas(ruta,extensionesNoDeseadas,espidering):
registros=[] def leerFicheroLogEliminarFiltradas(ruta, extensionesNoDeseadas, espidering):
registros = []
f = open(ruta, "r") f = open(ruta, "r")
total=0 total = 0
for linea in f: for linea in f:
total+=1 total += 1
try: try:
aux=Dato(linea) aux = Dato(linea)
admitido=True admitido = True
for ext in extensionesNoDeseadas: for ext in extensionesNoDeseadas:
if ext in aux.url: if ext in aux.url:
admitido=false admitido = false
if admitido: if admitido:
registros.append(aux) registros.append(aux)
except: except:
continue continue
f.close() f.close()
if espidering: if espidering:
registros=eSpidering(registros) registros = eSpidering(registros)
print("Procesados ",len(registros)," registros") print("Procesados ", len(registros), " registros")
return registros return registros
def leerFicheroLogAceptarFiltradas(ruta,extensionesNoDeseadas,espidering):
registros=[] def leerFicheroLogAceptarFiltradas(ruta, extensionesNoDeseadas, espidering):
registros = []
f = open(ruta, "r") f = open(ruta, "r")
total=0 total = 0
for linea in f: for linea in f:
total+=1 total += 1
try: try:
aux=Dato(linea) aux = Dato(linea)
admitido=False admitido = False
for ext in extensionesNoDeseadas: for ext in extensionesNoDeseadas:
if ext in aux.url: if ext in aux.url:
admitido=True admitido = True
if admitido: if admitido:
registros.append(aux) registros.append(aux)
except: except:
continue continue
f.close() f.close()
if espidering: if espidering:
registros=eSpidering(registros) registros = eSpidering(registros)
print("Procesados ",len(registros)," registros") print("Procesados ", len(registros), " registros")
return registros return registros
registros=leerFicheroLog("../access_log_Aug95_reducido",True)
registros=identificacionUsuarios(registros) registros = leerFicheroLog("../access_log_Aug95_reducido", True)
registros = identificacionUsuarios(registros)
for i in 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