Python - Problema con llamada recursiva a una funcion

   
Vista:

Problema con llamada recursiva a una funcion

Publicado por Luis (2 intervenciones) el 29/09/2015 19:19:53
Buenas tardes!

Estoy haciendo un pequeño programa con la intención de evitar el ARP Spoofing o al menos intentarlo, a la vez que aprendo este lenguaje.

El problema lo tengo con estas dos funciones: listador() y comprobador().

Resumidamente la primera retorna una lista de MAC's: mac_list que es parámetro de la siguiente función: comprobador(mac_list) que recorre la lista de MAC's buscando dos o más iguales.

Mi intención es que al acabar la ejecución de la ultima se llame a la primera listador() (lo cual sucede sin problemas), pero el programa termina al acabar de ejecutarla en vez de continuar con comprobador() y así inifinítamente como pretendo.
¿Cómo puedo hacer que después de volver a listador() siga a comprobador()?

Adjunto el código, muchas gracias de antemano!

¡Un saludo a todos!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
def listador():  # Crea una lista con las macs encontradas en la tabla arp
 
    os.system("arp -a > /home/arp_directory/current")
    entry = open("/home/arp_directory/current", "r")
 
    test = (entry.read())
    array = string.split(test)
 
    lon = len(array)
 
    if lon > 6:  # 6 es el tamano de ARP cuando tiene solo una linea ( 1 MAC )
        mac_list = []
        control = lon
        while control != 0:  # Se crea una lista con las MAC encontradas
            mac = array[control - 4]
            mac_list.append(mac)
            control = control - 7
 
    entry.close()
    return mac_list
 
 
mac_list = listador()
 
 
def comprobador(mac_list):  # Comprueba que no haya dos MACs iguales en ARP
 
    for variable in mac_list:
        equi = 0
        for variable2 in mac_list:
            if variable == variable2:
                equi = equi + 1
            if equi > 1:
                print "HAY ENVENAMIENTO DE LA TABLA DE ARP"
                os.system("cat /home/arp_directory/current >> /home/arp_directory/arpdatabase")
            else:
                time.sleep(30)
     listador()
 
comprobador(mac_list)
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
Imágen de perfil de xve

Problema con llamada recursiva a una funcion

Publicado por xve (1235 intervenciones) el 29/09/2015 20:10:12
Hola Luis, una manera, es hacer la función comprobador() un poco recursiva, es decir, que una vez finaliza, se vuelva a llamar a si misma... algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
def comprobador():  # Comprueba que no haya dos MACs iguales en ARP
    mac_list = listador()
    for variable in mac_list:
        equi = 0
        for variable2 in mac_list:
            if variable == variable2:
                equi = equi + 1
            if equi > 1:
                print "HAY ENVENAMIENTO DE LA TABLA DE ARP"
                #os.system("cat /home/arp_directory/current >> /home/arp_directory/arpdatabase")
            else:
                time.sleep(30)
    comprobador()

De esta manera, cada vez que termine se volverá a llamar ella misma.

Coméntanos, ok?
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

Problema con llamada recursiva a una funcion

Publicado por Luis (2 intervenciones) el 29/09/2015 20:29:18
Muchísimas gracias xve, funciona perfectamente!

¡Un saludo!
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