Python - Diccionario

   
Vista:

Diccionario

Publicado por Rafael filito606@gmail.com (2 intervenciones) el 16/12/2017 13:51:24
Hola buenas a todos. Tengo que realizar un ejercicio en el cuál me dan un archivo.log donde vienen una serie de intentos de inicio de sesión donde se muestran las IP y las fechas en las que se intentó acceder. la primera parte del ejercicio la tengo hecha, que es básicamente procesar el fichero(auth.log) y guardar las fechas en un formato procesable (datetime) y que almacenen solo los 'autentication failure'.

Ahora bien, para la segunda parte del ejercicio me piden que guarde cada IP con una lista (ordenada de más reciente a más antiguo) de las fechas en las que no consiguió conectar. Esta segunda parta tiene que tener la siguiente estructura:

tn = fehcas de conexión
ipn = diferentes IP

{}
{ip1:[t1], ip2:[t2]}
{ip1:[t1,t3], ip2[t2]}
{ip1:[t1,t3], ip2[t2], ip3[t4]}
...

Básicamente lo que se pide es que cuando aparezca una IP, si se repite de nuevo, que no la vuelva a mostrar y que guarde solo las fechas de cuando intentó loguear en un diccionario y luego ordenar las fechas de más reciente a más antiguo como dije antes.

Esto es lo que llevo por ahora, que es la primera parte del ejercicio:

from datetime import datetime
import sys
guardar = []

ori = open ('authlog.txt', 'r')
for linea in ori.readlines():
----if "authentication failure" in linea:
---------guardar.append(datetime.strptime(linea[:15], "%b %d %H:%M:%S"))

¿Me podríais ayudar a terminarlo por favor? Muchas gracias de antemano

Aquí adjunto una captura de los logs


Captura-de-pantalla-de-2017-12-16-13-57-51
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Diccionario

Publicado por Andrés (24 intervenciones) el 16/12/2017 15:54:08
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/python
import re
import sys
 
d = {}
ori = open ('authlog.txt', 'r')
for linea in ori.readlines():
	match = re.search('authentication failure', linea)
	if match:
		ipsearch = re.search('(\d{1,3}\.){3}(\d{1,3})', linea)
		if ipsearch:
			ip = ipsearch.group()
			if ip not in d:
				d[ip]=[]
			d[ip].append(linea[:15])
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Diccionario

Publicado por Rafael (2 intervenciones) el 16/12/2017 16:03:18
Muchas gracias !!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar