Testar Lista de Proxys

Posted by Miguel Lopes on Sun, Mar 13, 2011
In Anonimato, Programação, Python, Scripts,

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)


comments powered by Disqus