Ищу python разработчика для написания прокси-чекера

Статус
Закрыто для дальнейших ответов.

asdasd

HDD-drive
Пользователь
Регистрация
07.06.2021
Сообщения
40
Реакции
9
Всем привет. Ищу грамотно программиста,который напишет быстрый(асинхронный код) для чека большого количества проксей.
Писать только людям ,кто в теме и понимает как сделать высокую скорость чека,т.к. количество проксей от 10кк
Контакты в ПМ.
 
Крайне не советую, неадекват, написал мне в телегу
Написал ему что могу реализовать на aiohttp , asyncio
Начал говорить что я бездарь школьник и пошел бы я ***
Его телега @mandarain
Ты когда пустой скрин отправляешь, какой реакции ждёшь ?
 
Ты когда пустой скрин отправляешь, какой реакции ждёшь ?
он наркоман

Чел думал.что я ему буду деньги вперед закидывать без гаранта и тд ,просто за то что,он мне написал😂😂😂
После того как я его спросил несколько элементарных вопросов,а он кроме 2 слов больше ничего сказать не смог,стало все понятно)
 
потому что на нем получится достичь оптимальной скорости.
Так а в чем тут питон выигрывает у того же go например?
В любом случае код упирается в I/O и в ядра. Потоков наплодить можно хоть сразу 10кк - да только больше времени потратится на переключении контекста.
Тут запускать в N-1 потоков (где N количество ядер), ограничивать таймаутами да и все наверное, чтение\запись в файл копейки во времени по сравнению со всем остальным, остальной код и того меньше.
Куда уже быстрее ¯\_(ツ)_/¯
А дальше если ускорять, то докупкой доп серверов
 
потому что на нем получится достичь оптимальной скорости.
Я конечно не пишу на питоне но насколько знаю питон это не про скорость работы а про скорость написания кода )
Ну хозяин - барин как говориться .
 
Так а в чем тут питон выигрывает у того же go например?
В любом случае код упирается в I/O и в ядра. Потоков наплодить можно хоть сразу 10кк - да только больше времени потратится на переключении контекста.
Тут запускать в N-1 потоков (где N количество ядер), ограничивать таймаутами да и все наверное, чтение\запись в файл копейки во времени по сравнению со всем остальным, остальной код и того меньше.
Куда уже быстрее ¯\_(ツ)_/¯
А дальше если ускорять, то докупкой доп серверов
можно на "go" ты прав
 
Исходный код
Автор - я. Писал от скуки несколько недель назад. Доработай напильником и будет тебе чекер.
Асинхронный, но не очень быстрый (питон это действительно не про скорость). И суть здесь не в ресурсах системы, а в таймауте ответа. Можно дать 3 секунды на соединение, а можно 10. И каждый невалидный проксик заблочит тебе поток на указанное количество секунд.
 
Последнее редактирование:
Исходный код
Автор - я. Писал от скуки несколько недель назад. Доработай напильником и будет тебе чекер.
Асинхронный, но не очень быстрый (питон это действительно не про скорость). И суть здесь не в ресурсах системы, а в таймауте ответа. Можно дать 3 секунды на соединение, а можно 10. И каждый невалидный проксик заблочит тебе поток на указанное количество секунд.
Вы вернулись. Супер.
Вот еще как пример асинхронного чекера с применением модуля asyncio и aiohttp.
Если потребуется что-то добавить, отпишите.
Python:
import asyncio
from sys import argv

import aiohttp

proxy_type = "http"
test_url = "http://www.google.com"
timeout_sec = 4


class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'

# read the list of proxy IPs in proxyList from the first Argument given
filename = argv[1]
proxylistfile = open(filename)
proxyList = proxylistfile.read().splitlines()


async def is_bad_proxy(ipport):
    try:
        session = aiohttp.ClientSession()
        resp = await session.get(test_url, proxy=ipport, timeout=timeout_sec)
        if not resp.headers["Via"]:
            raise "Error"
        print(bcolors.OKBLUE + "Working:", ipport + bcolors.ENDC)
        session.close()
    except:
        session.close()
        print(bcolors.FAIL + "Not Working:", ipport + bcolors.ENDC)

tasks = []

loop = asyncio.get_event_loop()

for item in proxyList:
    tasks.append(asyncio.ensure_future(is_bad_proxy("http://" + item)))

print(bcolors.HEADER + "Starting... \n" + bcolors.ENDC)
loop.run_until_complete(asyncio.wait(tasks))
print(bcolors.HEADER + "\n...Finished" + bcolors.ENDC)
loop.close()
 
Последнее редактирование:
Вы вернулись. Супер.
Вот еще как пример асинхронного чекера с применением модуля asyncio и aiohttp.
Если потребуется что-то добавить, отпишите.
Python:
import asyncio
from sys import argv

import aiohttp

proxy_type = "http"
test_url = "http://www.google.com"
timeout_sec = 4


class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'

# read the list of proxy IPs in proxyList from the first Argument given
filename = argv[1]
proxylistfile = open(filename)
proxyList = proxylistfile.read().splitlines()


async def is_bad_proxy(ipport):
    try:
        session = aiohttp.ClientSession()
        resp = await session.get(test_url, proxy=ipport, timeout=timeout_sec)
        if not resp.headers["Via"]:
            raise "Error"
        print(bcolors.OKBLUE + "Working:", ipport + bcolors.ENDC)
        session.close()
    except:
        session.close()
        print(bcolors.FAIL + "Not Working:", ipport + bcolors.ENDC)

tasks = []

loop = asyncio.get_event_loop()

for item in proxyList:
    tasks.append(asyncio.ensure_future(is_bad_proxy("http://" + item)))

print(bcolors.HEADER + "Starting... \n" + bcolors.ENDC)
loop.run_until_complete(asyncio.wait(tasks))
print(bcolors.HEADER + "\n...Finished" + bcolors.ENDC)
loop.close()
Интересный код. Вот еще одна реализация, но быстрее:

import aiohttp
import asyncio
import ipaddress
from itertools import islice
from random import randint, sample

class Colors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
FAIL = '\033[91m'
ENDC = '\033[0m'

async def check_proxy(session, ip, port, protocol, timeout_sec, print_lock):
url = f"{protocol}://{ip}:{port}"
start_time = asyncio.get_event_loop().time()

try:
async with session.get("http://google.com", proxy=url, timeout=timeout_sec) as response:
response.raise_for_status()
elapsed_time = asyncio.get_event_loop().time() - start_time
async with print_lock:
print(f"{Colors.OKBLUE}Прокси {url} работает. Время ответа: {elapsed_time:.2f} секунд{Colors.ENDC}", flush=True)

except asyncio.TimeoutError:
elapsed_time = asyncio.get_event_loop().time() - start_time
async with print_lock:
print(f"{Colors.FAIL}Прокси {url} превысило время ожидания. Время ответа: {elapsed_time:.2f} секунд (Тайм-аут){Colors.ENDC}", flush=True)

except aiohttp.ClientError as e:
elapsed_time = asyncio.get_event_loop().time() - start_time
async with print_lock:
print(f"{Colors.FAIL}Прокси {url} не работает. Ошибка: {e}. Время ответа: {elapsed_time:.2f} секунд{Colors.ENDC}", flush=True)

async def generate_proxy_list(num_proxies, filename):
ip_network = ipaddress.IPv4Network("192.168.0.0/16")
all_ips = [ip for ip in islice(ip_network.hosts(), 1, None)]
selected_ips = sample(all_ips, num_proxies)

with open(filename, 'w') as file:
for ip in selected_ips:
port = randint(80, 9000) # Исправлено: случайные порты в пределах 80-9000
file.write(f"{ip}:{port}\n")

async def process_proxy_list(session, proxy_list, timeout_sec, print_lock):
await asyncio.gather(*(check_proxy(session, *proxy, timeout_sec, print_lock) for proxy in proxy_list))

async def main():
filename = "proxy_list.txt"
num_proxies = 2000
timeout_sec = 4

# Закомментируйте, чтобы не генерировать список прокси-адресов
await generate_proxy_list(num_proxies, filename)

with open(filename, encoding='utf-8') as proxylistfile:
proxyList = [line.strip().split(':') for line in proxylistfile]

proxies = [(ip, int(port), 'http') for ip, port in proxyList]

timeout = aiohttp.ClientTimeout(total=timeout_sec)
async with aiohttp.ClientSession(timeout=timeout) as session:
print_lock = asyncio.Lock()
await process_proxy_list(session, proxies, timeout_sec, print_lock)

if __name__ == "__main__":
asyncio.run(main())
 
Python:
import aiohttp
import asyncio
import ipaddress
from itertools import islice
from random import randint, sample

class Colors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
FAIL = '\033[91m'
ENDC = '\033[0m'

async def check_proxy(session, ip, port, protocol, timeout_sec, print_lock):
url = f"{protocol}://{ip}:{port}"
start_time = asyncio.get_event_loop().time()

try:
async with session.get("http://google.com", proxy=url, timeout=timeout_sec) as response:
response.raise_for_status()
elapsed_time = asyncio.get_event_loop().time() - start_time
async with print_lock:
print(f"{Colors.OKBLUE}Прокси {url} работает. Время ответа: {elapsed_time:.2f} секунд{Colors.ENDC}", flush=True)

except asyncio.TimeoutError:
elapsed_time = asyncio.get_event_loop().time() - start_time
async with print_lock:
print(f"{Colors.FAIL}Прокси {url} превысило время ожидания. Время ответа: {elapsed_time:.2f} секунд (Тайм-аут){Colors.ENDC}", flush=True)

except aiohttp.ClientError as e:
elapsed_time = asyncio.get_event_loop().time() - start_time
async with print_lock:
print(f"{Colors.FAIL}Прокси {url} не работает. Ошибка: {e}. Время ответа: {elapsed_time:.2f} секунд{Colors.ENDC}", flush=True)

async def generate_proxy_list(num_proxies, filename):
ip_network = ipaddress.IPv4Network("192.168.0.0/16")
all_ips = [ip for ip in islice(ip_network.hosts(), 1, None)]
selected_ips = sample(all_ips, num_proxies)

with open(filename, 'w') as file:
for ip in selected_ips:
port = randint(80, 9000) # Исправлено: случайные порты в пределах 80-9000
file.write(f"{ip}:{port}\n")

async def process_proxy_list(session, proxy_list, timeout_sec, print_lock):
await asyncio.gather(*(check_proxy(session, *proxy, timeout_sec, print_lock) for proxy in proxy_list))

async def main():
filename = "proxy_list.txt"
num_proxies = 2000
timeout_sec = 4

# Закомментируйте, чтобы не генерировать список прокси-адресов
await generate_proxy_list(num_proxies, filename)

with open(filename, encoding='utf-8') as proxylistfile:
proxyList = [line.strip().split(':') for line in proxylistfile]

proxies = [(ip, int(port), 'http') for ip, port in proxyList]

timeout = aiohttp.ClientTimeout(total=timeout_sec)
async with aiohttp.ClientSession(timeout=timeout) as session:
print_lock = asyncio.Lock()
await process_proxy_list(session, proxies, timeout_sec, print_lock)

if __name__ == "__main__":
asyncio.run(main())

P.S. Продублировал для удобства.
 
Если речь реально идет о лямах проксей и нужна макс скорость, то я бы решал задачу так:
- сначала raw-сокетами посылаем SYN-пакеты на все пары ip:port с определенным рейтом, и в параллельном потоке\процессе ловим прилетающие SYN+ACK (примерно так работает масскан). На выходе получаем первичный список ip:port которые онлайн и гарантированно слушают нужный порт.
- далее по этому списку проходимся уже обычными сокетами с использованием низкоуровневого сокетного мультиплексирования (функи select/poll/epoll), т.е. устанавливаем полноценное tcp-соединение, посылаем чек-запрос, вычитываем респонс и тд.
 
А я бы сделал серверную часть, которая получает и хранит пары проксей. И клиентскую часть, которая запрашивает у сервера кого надо чекнуть, а затем вернуть результаты чека. При этом сервер должен отдавать пачками штук по 100 прокси.
Клиентов можно масштабировать согласно требованиям.
 
потому что на нем получится достичь оптимальной скорости.
не факт. чекер на GO выигрывает.

Checked 4667304 proxies in 26232.749461s
это на 1к потоках. почти 5кк прокси за 7 часов.
если ставить 3-5к потоков, то будет в несколько раз быстрее.
питошка на таких цифрах уложит сервер аналогичной конфигурации навзничь.
 
не факт. чекер на GO выигрывает.

Checked 4667304 proxies in 26232.749461s
это на 1к потоках. почти 5кк прокси за 7 часов.
если ставить 3-5к потоков, то будет в несколько раз быстрее.
питошка на таких цифрах уложит сервер аналогичной конфигурации навзничь.
Я не по теме конечно но объясните мне , если не сложно .
У вас 1к ядер в проце ? зачем люди создают по 300-500-1000+ потоков в брутах / чекерах ?
Может это база и я не шарю просто но вроде это так не работает -_-
 
Я не по теме конечно но объясните мне , если не сложно .
У вас 1к ядер в проце ? зачем люди создают по 300-500-1000+ потоков в брутах / чекерах ?
Может это база и я не шарю просто но вроде это так не работает -_-
посмотри видео и все поймешь. не плохо чувак объясняет
 
посмотри видео и все поймешь. не плохо чувак объясняет
На питоне не пишу но за асинхронность я понимаю . Мне интересно зачем создавать 1к+ потоков (именно thread)
ps: но окей , из интереса посмотрю 40 минут не осилю питона
 
Я не по теме конечно но объясните мне , если не сложно .
У вас 1к ядер в проце ? зачем люди создают по 300-500-1000+ потоков в брутах / чекерах ?
Может это база и я не шарю просто но вроде это так не работает -_-

Важно понимать, что потоки в Python и горутины в Go имеют различные особенности и принципы работы, что обуславливает их разное использование и производительность.
  1. Модель параллелизма:
    • Потоки в Python обычно используются для многопоточности на уровне операционной системы. Это означает, что каждый поток исполняется операционной системой как отдельный поток выполнения.
    • Горутины в Go являются легковесными потоками, управляемыми самим языком Go, а не операционной системой. Они выполняются внутри потоков ОС, но их переключение и управление осуществляется средствами Go, что делает их более эффективными и быстрыми.
  2. Расход ресурсов:
    • Потоки в Python более тяжеловесны по сравнению с горутинами и требуют больше ресурсов памяти и времени на переключение контекста.
    • Горутины в Go имеют значительно меньший размер стека, который может динамически расширяться и сжиматься, что делает их создание и использование более дешевым с точки зрения ресурсов.
  3. Global Interpreter Lock (GIL) в Python:
    • Python (особенно CPython) использует GIL, который означает, что в любой момент времени только один поток может исполнять байт-код Python. Это ограничивает выполнение многопоточного кода в одном процессе, делая его фактически последовательным, особенно в вычислительно-интенсивных задачах.
    • В Go такого ограничения нет, и горутины могут действительно исполняться параллельно на многоядерных процессорах, что обеспечивает более высокую производительность при выполнении параллельных задач.
  4. Управление и планирование:
    • В Python управление потоками в основном возлагается на операционную систему.
    • Go использует собственный планировщик для управления горутинами, который позволяет более эффективно распределять время выполнения между ними и более эффективно использовать многоядерные процессоры.
  5. Простота использования:
    • Горутины в Go проще в использовании и управлении по сравнению с потоками в Python. В Go достаточно использовать ключевое слово go для запуска функции в горутине, в то время как в Python необходимо более внимательно управлять созданием и синхронизацией потоков.
  6. Синхронизация:
    • В Go для синхронизации горутин часто используются каналы, которые являются встроенными средствами языка и обеспечивают элегантный способ обмена данными.
    • В Python для синхронизации потоков используются примитивы синхронизации из модуля threading, такие как Locks, Events, Condition Variables, Semaphores.
В целом, горутины в Go предлагают более гибкий и эффективный механизм для параллельного и асинхронного выполнения задач по сравнению с традиционными потоками в Python, особенно в контексте высокопроизводительных и сетевых приложений.
 
Статус
Закрыто для дальнейших ответов.
Верх