Anteriormente, falei sobre servidores proxy (Navegue em Anonimato). Eles são realmente úteis para esconder o teu verdadeiro endereço IP, e para evitar algumas regras das firewall. Mas por vezes é difícil encontrar um proxy que funcione, então á algumas semanas atrás fiz um script para a partir de uma lista de endereços IP e portas os testa-se e cria-se uma nova lista dos proxys que realmente funcionam. Vou postar o script mesmo sem comentários, e quando tiver tempo comento e tento melhorar o script.
Este script está a utilizar threads, porque testei muitas listas, fiz um arquivo de 12MB com todas as listas e o script correu, durante aproximadamente 24 horas, ai termineio, e acabei com cerca de 1000 proxies que funcionavam, mas não eram únicos ou seja havia repetidos.
#!/bin/python
import urllib2, os.path, socket, sys, re
import subprocess, threading, Queue, time
ips = Queue.Queue ( 0 )
ips_out = Queue.Queue ( 0 )
processos = 0
class proxy ( threading.Thread ):
def run ( self):
global ips, ips_out, processos
i = 1
currentProxy = ips.get()
if self.is_bad_proxy(currentProxy):
print "Bad Proxy %s" % (currentProxy)
else:
print "n%s is working" % (currentProxy.strip("n"))
ips_out.put(currentProxy)
i+=1
processos -=1;
def is_bad_proxy(self,pip):
try:
proxy_handler = urllib2.ProxyHandler({'http': pip})
opener = urllib2.build_opener(proxy_handler)
opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en) AppleWebKit/522.12.1 (KHTML, like Gecko) Version/3.0.1 Safari/522.12.2')]
urllib2.install_opener(opener)
req=urllib2.Request('http://checkip.dyndns.com/') # change the URL to test here
sock=urllib2.urlopen(req)
page=self.remove_html_tags( sock.read()).split(":")[1]
sock.close()
ip=page.strip()
ip2=pip.split(":")[0]
if not ip == ip2: # apenas proxies anonymous sao aceitaveis
print "Not Anonymous!"
return True
except urllib2.HTTPError, e:
print 'Error code: ', e.code
return e.code
except Exception, detail:
print "ERROR:", detail
return True
return False
def remove_html_tags(self,data):
p = re.compile(r'<.*?>')
return p.sub('', data)
def main(args):
global ips, processos, ips_out
if len(args)!=3 :
print "Usage: proxy.py proxy_list working_proxies_file"
sys.exit()
socket.setdefaulttimeout(120)
if not os.path.isfile(args[1]):
print "The file doesn't exist."
fich = open(args[1],'r')
proxyList = fich.readlines()
fich.close()
print "%s proxies added to testing Queue" % len(proxyList)
for currentProxy in proxyList:
ips.put(currentProxy)
x=ips.qsize()
try:
processo = Queue.Queue ( 0 )
while (1):
if not ips.qsize() > 0:
fich2 = open(args[2],'w')
while ips_out.qsize() > 0:
if processos == 0:
fich2.write(ips_out.get())
fich2.close()
sys.exit()
if(processos < 100): #mas de 100 threads vai causar um erro no urllib.
processos+=1
processo.put(proxy().start())
#time.sleep(2)
if x-50 > ( ips.qsize() ):
print "nRemaining ", ips.qsize(),"n"
x=ips.qsize()
except (KeyboardInterrupt, SystemExit):
fich2 = open(args[2],'w')
while 1:
if processos == 0:
fich2.write(ips_out.get())
if ips_out.qsize() == 0:
fich2.close()
print "[-] Exiting"
raise
if __name__ == '__main__':
main(sys.argv)