Foros del Web » Programando para Internet » Python »

Problema con condicional if en una comparación de Proxys

Estas en el tema de Problema con condicional if en una comparación de Proxys en el foro de Python en Foros del Web. Hola amigos!! Tengo un problema, bueno les comento. He creado un bot DNSBL para mi chat, este bot es un programa que prohibe el uso ...
  #1 (permalink)  
Antiguo 13/05/2014, 09:24
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Pregunta Problema con condicional if en una comparación de Proxys

Hola amigos!!

Tengo un problema, bueno les comento.
He creado un bot DNSBL para mi chat, este bot es un programa que prohibe el uso de proxys en mi servidor de chat IRC.

El bot funciona perfectamente, es bastante rápido y cumple su función, pero el problema me surge en el momento de una comparación.
Por ejemplo, si hay un ataque masivo de clones (Proxys) en mi servidor, el bot los banea perfectamente, con la razón y la IP del Proxy que usaban y también agrega esa IP en una Lista, esto lo hago para que no se vuelva a banear a la misma Dirección de IP, osea, en el momento que se aplica el ban (expulsión del usuario y prohibición), esa IP ya no puede volver a entrar a mi servidor, osea un usuario ya no puede entrar más con ese proxy al servidor porque su IP quedó baneada (con acceso bloqueado).
Pero, lo que yo quiero es que el ban se aplica solo 1 vez, porque si ya lo tenía puesto no es necesario que se lo ponga de vuelta, un ejemplo:

[11:43] irc.michat.com *** Permanent G:Line added for *@91.207.203.13 on Tue May 13 14:43:08 2014 GMT (from [email protected]: Has sido baneado permanentemente de michat por usar Proxy no permitido (Tu IP 91.207.203.13 figura en: "rbl.efnetrbl.org"). Ingresá en www....com para más información.)
[11:43] irc.michat.com Client exiting: jajajajajajajSQh ([email protected]) [User has been permanently banned from Argentina (Has sido baneado permanentemente de michat por usar Proxy no permitido (Tu IP 91.207.203.13 figura en: "rbl.efnetrbl.org"). Ingresá en www.....com para más información.)]
[11:43] irc.michat.com tkl update for *@91.207.203.13/reason='Has sido baneado permanentemente de michat por usar Proxy no permitido (Tu IP 91.207.203.13 figura en: "rbl.efnetrbl.org"). Ingresá en www....com para más información.'/[email protected]/set=1399992188/expire=0 [causedby: irc.michat.com]
[11:43] irc.michat.com tkl update for *@91.207.203.13/reason='Has sido baneado permanentemente de michat por usar Proxy no permitido (Tu IP 91.207.203.13 figura en: "rbl.efnetrbl.org"). Ingresá en www.michat.com para más información.'/[email protected]/set=1399992188/expire=0 [causedby: irc.michat.com]
[11:43] irc.michat.com tkl update for *@91.207.203.13/reason='Has sido baneado permanentemente de michat por usar Proxy no permitido (Tu IP 91.207.203.13 figura en: "rbl.efnetrbl.org"). Ingresá en www.michat.org para más información.'/[email protected]/set=1399992188/expire=0 [causedby: irc.michat.com]


Bueno... los mensajes son bastante claros, el "tkl update for" significa que se le volvió a dar otro ban a la misma IP, ahí se puede observar que primero se le dió un ban al usuario y fué expulsado del servidor, sin embargo, se le dió 3 banes más, cuando no es necesario porque ya se le dió 1 antes y eso es suficiente.

Probé este código que hice:

Código Python:
Ver original
  1. Listas = ("dnsbl.sorbs.net", "dnsbl.dronebl.org", "rbl.efnetrbl.org", "dnsbl.tornevall.org")
  2.  
  3. probar = "dnsbl.tornevall.org"
  4.  
  5. if (probar not in Listas):
  6.     print "No esta"
  7. else:
  8.     print "Si esta"

y funciona bien, sin embargo en mi programa no funciona!! no se porque :S

Aquí les muestro una parte donde se produce el error, en realidad no existe ningún error, pero no se cumple la condición:

Código Python:
Ver original
  1. class CheckearProxy(threading.Thread):
  2.     def __init__(self, Proxy2, COMPIP2, Nick2):
  3.         threading.Thread.__init__(self)
  4.         self.VarProxy = Proxy2
  5.         self.VarCOMPIP = COMPIP2
  6.         self.VarNick = Nick2
  7.         self.DNSBL_Excepciones = ("70.39.77.144", "200.16.125.102", "200.123.254.45", "181.166.148.181")
  8.         try:
  9.             if (len(self.DNSBL_Proxys) >= 15):
  10.                 self.DNSBL_Proxys = []
  11.         except:
  12.             self.DNSBL_Proxys = []
  13.  
  14.     def run(self):
  15.         if (self.VarProxy not in self.DNSBL_Proxys):
  16.             banear proxy......
  17.             self.DNSBL_Proxys.append(self.VarProxy) # Agrega la IP que se ha baneado en esta función

Bueno obligadamente tengo que usar esa excepción en el constructor, ya que si o si se necesita primero crear la Lista y luego agregar los proxys.
Aquí se van agregando las IPs:

Código Python:
Ver original
  1. self.DNSBL_Proxys.append(self.VarProxy)

luego comparo que la cantidad de IPs que contiene la lista "self.DNSBL_Proxys", sea mayor o igual a 15:

Código Python:
Ver original
  1. if (len(self.DNSBL_Proxys) >= 15):
  2.                 self.DNSBL_Proxys = []

entónces si es mayor o igual, ahí borro la lista de IPs ya que el checkeo ya se hizo y el programa solo escanea en 4 páginas, así que 15 IPs está bien.
Pero si el programa agrega una IP y luego se compara aquí para saber si esa IP ya está agregada o no:

Código Python:
Ver original
  1. if (self.VarProxy not in self.DNSBL_Proxys):

no debería cumplirse está condición, pero si se cumple!!!!!!! siendo que anteriormente se había agregado esa IP.
No se como puedo resolver este asunto.
Aclaro que utilizo los Threads para crear multi hilos y el programa escanea en 5 páginas al mismo tiempo.

¿Cómo puedo hacer que el valor que agregue en la lista se quedé guardado?
¿De qué manera puedo hacer la comparación para que no se vuelva a banear el mismo proxy?

Desde ya muchas gracias!!
  #2 (permalink)  
Antiguo 14/05/2014, 13:28
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 2 meses
Puntos: 18
Respuesta: Problema con condicional if en una comparación de Proxys

Código Python:
Ver original
  1. try:
  2.             if (len(self.DNSBL_Proxys) >= 15):
  3.                 self.DNSBL_Proxys = []
  4.         except:
  5.             self.DNSBL_Proxys = []

Esto no tiene ningún sentido en __init__, el método __init__ solo se ejecuta al crear el objeto.
Crea la lista y modificala o chequea su contenido en otra función.

Saludos.
  #3 (permalink)  
Antiguo 14/05/2014, 17:13
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con condicional if en una comparación de Proxys

Bien sukoy, muchas gracias!!

Etiquetas: condicional, ip, programa, usar, usuario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:54.