• XSS.stack #1 – первый литературный журнал от юзеров форума

ProxyChecker

EmeliRouse

RAID-массив
Пользователь
Регистрация
28.06.2020
Сообщения
59
Реакции
138
Скрытый контент для зарегистрированных пользователей.

Однин из вариантов чекера прокси на 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>
Если проверять публичные прокси, большинство из них будут невалидными, причин много - хост отклоняет соединение, так как ip в спам-базе, прокси-сервер подменяет сертификат/либо не поддерживает вообще, прокси сервер отклоняет соединение.
Такие причины не являются дефектом скрипта.

 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх