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 originalListas = ("dnsbl.sorbs.net", "dnsbl.dronebl.org", "rbl.efnetrbl.org", "dnsbl.tornevall.org")
probar = "dnsbl.tornevall.org"
if (probar not in Listas):
print "No esta"
else:
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 originalclass CheckearProxy(threading.Thread):
def __init__(self, Proxy2, COMPIP2, Nick2):
threading.Thread.__init__(self)
self.VarProxy = Proxy2
self.VarCOMPIP = COMPIP2
self.VarNick = Nick2
self.DNSBL_Excepciones = ("70.39.77.144", "200.16.125.102", "200.123.254.45", "181.166.148.181")
try:
if (len(self.DNSBL_Proxys) >= 15):
self.DNSBL_Proxys = []
except:
self.DNSBL_Proxys = []
def run(self):
if (self.VarProxy not in self.DNSBL_Proxys):
banear proxy......
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 originalself.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 originalif (len(self.DNSBL_Proxys) >= 15):
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 originalif (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!!