Версия: 0.1. Автор: h1z. WWW: http://www.mr-h1z.com. Возможности: Данный скрипт может проверять прокси из файлов и из списков URL’ов. Скрипт является многопоточным. Пока только поддерживается проверка HTTP-прокси. Скрипт сам извлекает прокси из файлов, т.е. файл может содержать мусор. Описание опций: -f или --file – задаёт расположение файла со списком прокси или списком URL’ов. По умолчанию, если не задать данную опцию скрипт попытается обратится к файлу ./proxy.txt в данной директории. -t или --timeout – задаёт тайм аут для сокета. По умолчанию, равен 80. -c или --count – количество потоков. По умолчанию, количество равно 10. -u или --urls – опция которая указывает скрипту что в файле содержатся URL’ы. По умолчанию, опция выключена -o или --out – задаёт расположение файла, куда будет выводится список рабочих прокси. По умолчанию, результат выводится на экран. Скачать pyCheckProxy. Для работы скрипта требуется Python 2.4-2.6. Пример запуска: Планы на будущие: Добавить GUI на PyQt4. Поддержка SOCKS-прокси и проверка на анонимность. Исходный код: Code: #!/usr/bin/env python #pyCheckProxy by h1z #version: 0.1 import urllib2, socket, re, threading, sys, getopt _file="proxy.txt" _threads=10 _urls=False _out="" _file_out=0 _timeout=80 proxyList=[] class Proxy: def __init__(self, time_out=80, check_url="http://www.google.com", inside_text="<title>Google</title>"): self._sock=socket self._sock.setdefaulttimeout(time_out) self._check_url=check_url self._inside_text=inside_text self._proxy_buf=[] self._proxy_list=[] self._thread_count=0 def check(self, proxy): try: proxy_handler = urllib2.ProxyHandler({'http': proxy}) opener = urllib2.build_opener(proxy_handler) opener.addheaders = [('User-agent', 'Mozilla/5.0')] urllib2.install_opener(opener) req=urllib2.Request(self._check_url) self._sock=urllib2.urlopen(req) if (self._sock.read().index(self._inside_text))>=0: return True except: return False return True def check_all(self, proxy_list=[], thread_count=10): if type([])==type(proxy_list) and len(proxy_list)>0: self._proxy_list=[] self._proxy_buf=proxy_list self._thread_count=thread_count for i in range(thread_count): thr=threading.Thread(target=self._thread_check, name=str(i)) thr.start(); while (self._thread_count>0): pass return self._proxy_list def _thread_check(self): while (len(self._proxy_buf)>0): try: item=self._proxy_buf.pop() if self.check(item): self._proxy_list.append(item) except: pass self._thread_count-=1 def _usage(): print """(c) h1z, http://www.mr-h1z.com Usage: ./check.py [options] Options: --file - path to file[default: proxy.txt] --count - count of threads[default: 10] --urls - file inside urls[default: false] --out - file to output[default: stdout] --timeout - set timeout[default: 80]""" sys.exit(1) def _add_to_list(text): global proxyList for _tmp in text: try: while True: buf=re.search("([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:[0-9]{1,5})", _tmp) try: proxyList.index(proxyList) except ValueError: proxyList.append(buf.group(0)) _tmp=_tmp[len(buf.group(0)):] except: pass try: opts, args=getopt.getopt(sys.argv[1:], "uf:c:o:t:", ["urls","file=","count=","out=","timeout="]) except getopt.GetoptError: _usage() for opt, arg in opts: if opt in ("-f","--file"): _file=arg elif opt in ("-u","--urls"): _urls=True elif opt in ("-c","--count"): _threads=int(arg) elif opt in ("-o","--out"): _out=arg elif opt in ("-t","--timeout"): _timeout=int(arg) try: f=open(_file,'r') except IOError: print "Error. File './%s' not found!" % (_file) sys.exit(1) pr_list=f.readlines() f.close() if _urls==False: _add_to_list(pr_list) else: for url in pr_list: try: _sock=socket _sock=urllib2.urlopen(urllib2.Request(url)) _add_to_list(_sock.read().split('\n')) except: pass p_check=Proxy(time_out=_timeout) if len(_out)>1: _file_out=open(_out,'w') if _threads>len(proxyList): _threads=len(proxyList) for i in p_check.check_all(proxyList,_threads): if len(_out)>1: _file_out.write(i) else: print i if len(_out)>1: _file_out.close() Если скрипт чекает очень медленно, то попробуйте задать таймаут 20-40: