Скрытый контент для зарегистрированных пользователей.
Однин из вариантов чекера прокси на python 2.7 (при версии 3>= могут возникнуть ошибки из-за разницы синтаксиса)
Особенности
Многопоточный
Поддержка HTTP/SOCKS4/SOCKS5
Возможность выбрать Url для проверки
Python:
import urllib2
import socket
import socks
import random
import threading
import ssl
import time
from sockshandler import SocksiPyHandler
class ProxyChecker:
# You can change it
Threads = 40
Timeout = 10 #(seconds)
Rounds = 2
TargetUrl = ["http://wmrok.com/"]
SavePath = "C:\\Resoults\\"
LoadPath = "C:\\Resoults\\test.txt"
# Do not touch
ProxyList = []
LastN = 0
TotaN = 0
lock = threading.RLock()
badlist = ''
pHTTP = ''
pSOCKS4 = ''
pSOCKS5 = ''
def GetUrl(self):
i = random.randint(0, len(self.TargetUrl)-1)
return self.TargetUrl[i]
def GetUA(self):
UserAgents = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
"Mozilla/5.0 (Linux; U; Android 2.2) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; Android 6.0; vivo 1713 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 6.0.1; SM-G532M Build/MMB29T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 5.1.1; Lenovo-A6020l36 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.93 Mobile Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
"Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko",
"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 OPR/36.0.2130.80"]
i = random.randint(0, len(UserAgents)-1)
return UserAgents[i]
def CheckDone(self):
with self.lock:
return (len(self.ProxyList)) <= self.TotaN
def CheckAvalableJob(self):
with self.lock:
return (len(self.ProxyList)) <= self.LastN
def LoadBase(self,path):
bfile = open(path, "r")
self.ProxyList = bfile.read().split('\n')
print ("[*] Proxy count %d" % len(self.ProxyList))
def SaveResoult(self):
file = open(self.SavePath + 'proxy_HTTP.txt', 'w')
file.write(self.pHTTP)
file = open(self.SavePath + 'proxy_SOCKS4.txt', 'w')
file.write(self.pSOCKS4)
file = open(self.SavePath + 'proxy_SOCKS5.txt', 'w')
file.write(self.pSOCKS5)
file = open(self.SavePath + 'error_list.txt', 'w')
file.write(self.badlist)
def CheckValid(self):
proxy = ''
usragnt = self.GetUA()
# Take proxyline from base thread-safety
if self.CheckAvalableJob():
return
with self.lock:
proxy = self.ProxyList[self.LastN]
self.LastN += 1
host,port = proxy.split(':')
if (not host) or (not port):
return
for trying in range(0, self.Rounds):
url = self.GetUrl()
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
#HTTP|HTTPS
socks.set_default_proxy(socks.HTTP, host,port=int(port))
socket.socket = socks.socksocket
try:
req = urllib2.Request(url)
req.add_header('User-Agent',usragnt)
req.add_header('Connection','Keep-Alive')
req.add_header('Accept','*/*')
resp = urllib2.urlopen(req, context=ctx, timeout=self.Timeout)
html = resp.read()
with self.lock:
self.pHTTP += proxy + '\n'
self.TotaN += 1
print "[+] HTTP/HTTPS"
return
except Exception as e:
pass
#SOCKS4
socks.set_default_proxy(socks.SOCKS4, host,port=int(port))
socket.socket = socks.socksocket
try:
req = urllib2.Request(url)
req.add_header('User-Agent',usragnt)
req.add_header('Connection','Keep-Alive')
req.add_header('Accept','*/*')
resp = urllib2.urlopen(req, context=ctx, timeout=self.Timeout)
html = resp.read()
with self.lock:
self.pSOCKS4 += proxy + '\n'
self.TotaN += 1
print "[+] SOCKS4"
return
except Exception as e:
pass
#SOCKS5
socks.set_default_proxy(socks.SOCKS5, host,port=int(port))
socket.socket = socks.socksocket
try:
req = urllib2.Request(url)
req.add_header('User-Agent',usragnt)
req.add_header('Connection','Keep-Alive')
req.add_header('Accept','*/*')
resp = urllib2.urlopen(req, context=ctx, timeout=self.Timeout)
html = resp.read()
with self.lock:
self.pSOCKS5 += proxy + '\n'
self.TotaN += 1
print "[+] SOCKS5"
except Exception as e:
pass
with self.lock:
self.TotaN += 1
self.badlist += proxy + '\n'
print "[-] Invalid proxy"
def main(self):
# create
self.LoadBase(self.LoadPath)
ThreadList = []
for i in range(0, self.Threads):
thread = threading.Thread(target=self.CheckValid)
thread.start()
ThreadList.append(thread)
# lounch
Continue = True
while Continue:
Continue = not self.CheckDone()
for thrd in ThreadList:
if (not thrd.isAlive()):
thrd = threading.Thread(target=self.CheckValid)
thrd.start()
time.sleep(1)
self.SaveResoult()
#TEST
p = ProxyChecker()
p.main()
Настройка параметров
Для настройки скрипта достаточно назначить в коде следующим параметрам желаемые значения:
Threads - Количество потоков
Timeout - Время ожидания ответа (сек.)
Rounds - Количество попыток запроса
TargetUrl - Url'ы желаемых сайтов (массив)
SavePath - Путь к папке с результатами
LoadPath - Путь к базе с прокси
Запуск
После настройки параметров запустить можно
через Python IDLE: File -> Open, Run -> Run module (F5)
через CMD python script.py
Возможные ошибки
При возникновении ошибок, содержащих import <name>
необходимо установить недостающие компоненты при помощи pip install
для CMD:
Python:
cd C:/python27-x64/Scripts
pip install <name>
Такие причины не являются дефектом скрипта.