Этот AI Prompt позволяет сгенерировать работающий комплект из двух Python-Proxy серверов. Proxy 1 запускается на ПК пользователя и в браузере надо поставить proxy=10.10.0.1 Proxy 2 запускается на VPS под Ubuntu и работает через порт 8080 (если у вас не используется порт 80, то лучше выбрать 80) То, что Вам здесь представлен не готовый Python код, а Prompt - имеет преимущество. Вы можете легко сгенерировать код в многих ИИ: DeepSeek, QWEN, GigaChat, Perplexity, ChatGPT и других. Но главное, prompt позволяет очень легко модернизировать код и используемые технологии! Например, из этого промпта был создан промпт для генерирования двух Proxy, работающих через пиринговые сети (IPFS). Примеры можно посмотреть в самом конце страницы и на https://oflameron.com PROMPT: Генерация двух Python прокси-серверов с HEX-туннелем и HTTP-маскировкой 0. Общая архитектура Тебе нужно сгенерировать два Python скрипта: proxy1.py – работает на локальном ПК (Windows). Принимает соединения от браузера, преобразует трафик в HEX, добавляет текстовый HTTP-префикс, отправляет на VPS. proxy2.py – работает на VPS (Ubuntu). Удаляет HTTP-префикс, преобразует HEX обратно в бинарные данные, отправляет в интернет. Обратный трафик (интернет → браузер) идёт без префикса, только HEX. 1. Общие требования к обоим скриптам 1.1. Режимы работы CONVERT_MODE: 1 – HEX-конвертация (основной режим) 0 – прозрачный туннель (без конвертации) REPLACE_ON: пока 0 (замена текста не используется, оставлено для будущего) 1.2. Переменные для HTTP-префикса (маскировка) HTTP_PREFIX (bytes) – текстовый заголовок, например HTTP-запрос. Добавляется в начале каждого пакета от Proxy1 к Proxy2. HTTP_PREFIX_SIZE (int) – длина HTTP_PREFIX в байтах. Если 0 – вычисляется автоматически при старте. Администратор вручную копирует значение из лога Proxy1 в оба скрипта. SEPARATOR = b"\n---HEX---\n" – уникальный разделитель между префиксом и HEX-строкой. 1.3. Таймауты и лимиты IDLE_TIMEOUT = 60 – таймаут бездействия (сек) CONNECT_TIMEOUT = 10 – таймаут подключения BUFFER_LIMIT = 65536 – лимит буфера (байт) MAX_CLIENTS = 500 1.4. Общие функции CONVERTER(data: bytes) -> bytes Преобразует бинарные данные в HEX-строку + b"\n" DECONVERTER(line: bytes) -> bytes Преобразует HEX-строку обратно в бинарные данные Проверяет чётность длины и валидность HEX-символов Возвращает b'' при ошибке extract_host_from_request(data: bytes) -> str Извлекает домен из HTTP/HTTPS запроса для логирования Использует regex: CONNECT, Host:, GET/POST 2. Специфические требования для Proxy1 (локальный ПК) 2.1. Конфигурационные переменные python LISTEN_IP = "10.10.0.1" # IP для браузера LISTEN_PORT = 8443 # Порт для браузера SOURCE_IP = None # Исходящий IP к VPS (None = авто) TARGET_HOST = "153.181.x.x" # Публичный IP VPS TARGET_PORT = 8080 # Порт VPS HTTP_PREFIX = b"GET /wiki/ HTTP/1.1\r\nHost: example.com\r\n\r\n" HTTP_PREFIX_SIZE = 0 2.2. Функция ADDTEXT1(hex_data: bytes) -> bytes Возвращает HTTP_PREFIX + SEPARATOR + hex_data 2.3. Логика работы Proxy1 (asyncio) connect_to_target() Создаёт TCP-сокет, включает TCP_NODELAY Привязывается к SOURCE_IP, если указан Подключается к TARGET_HOST:TARGET_PORT Возвращает (reader, writer) handle_client(client_reader, client_writer) Принимает соединение от браузера Устанавливает соединение с Proxy2 Запускает две асинхронные задачи: client_to_server() (браузер → Proxy2) Читает данные от браузера Вызывает TO_SERVER (CONVERTER) Вызывает ADDTEXT1 Отправляет в Proxy2 server_to_client() (Proxy2 → браузер) – обратный канал Читает данные от Proxy2 (уже HEX, без префикса) Накопление буфера, разбивка по \n Вызывает TO_CLIENT (DECONVERTER) Отправляет браузеру 2.4. Логирование При старте выводится HTTP_PREFIX_SIZE Логируются новые соединения, запросы к сайтам, ошибки 3. Специфические требования для Proxy2 (VPS Ubuntu) 3.1. Конфигурационные переменные python LISTEN_IP = "53.181.x.x" # Внешний IP VPS LISTEN_PORT = 8080 # Порт для приёма от Proxy1 EXTERNAL_IP = "53.181.x.x" # IP для выхода в интернет EXTERNAL_PORT = 0 # 0 = динамический HTTP_PREFIX = ... # ТОТ ЖЕ, что в Proxy1 HTTP_PREFIX_SIZE = 0 3.2. Функция REMOVETEXT2(packet: bytes) -> bytes Проверяет длину пакета Сравнивает первые HTTP_PREFIX_SIZE байт с HTTP_PREFIX Сравнивает следующие len(SEPARATOR) байт с SEPARATOR При несовпадении – логирует и возвращает b'' Возвращает оставшуюся часть (HEX-строка) 3.3. Логика работы Proxy2 (threading) tunnel_to_internet(client_sock, internet_sock, ...) Накопление буфера Поиск SEPARATOR Проверка позиции разделителя (должна равняться HTTP_PREFIX_SIZE) Вызов REMOVETEXT2 Вызов FROM_FIRST_PROXY (HEX_TO_BINARY) Отправка в интернет tunnel_to_first_proxy(internet_sock, client_sock, ...) Получение ответа из интернета Вызов TO_FIRST_PROXY (BINARY_TO_HEX) Отправка в Proxy1 (только HEX, без префикса) handle_client(client_sock, client_addr) Приём первого пакета от Proxy1 Проверка разделителя и префикса Разбор CONNECT/HTTP запроса Подключение к целевому сайту в интернет Запуск двух тредов (туннелей) 3.4. Обработка CONNECT Для HTTPS (CONNECT) отправляется ответ 200 Connection established Сохраняется early_data_buffer – остаток данных после заголовка 4. Технологии и библиотеки asyncio (Proxy1) – асинхронная работа с большим числом соединений threading (Proxy2) – классическая многопоточность для простоты на VPS socket – низкоуровневый TCP binascii – преобразование HEX re – извлечение хостов из HTTP signal (Proxy2) – корректное завершение 5. Ограничения и обработка ошибок 5.1. Ограничения Префикс должен быть строго одинаковым в обоих скриптах Разделитель не должен встречаться внутри префикса или HEX-данных При фрагментации TCP возможно накопление буфера Не поддерживается HTTP/2 (только HTTP/1.1) Нет аутентификации между прокси 5.2. Обработка ошибок Несовпадение префикса → закрытие соединения, лог Разделитель не на своей позиции → закрытие Некорректный HEX → b'' (пакет теряется, соединение не закрывается) Таймауты → логирование, продолжение работы Переполнение буфера → сброс Ошибки подключения к интернету → 502 Bad Gateway 6. Инструкция по установке, настройке и использованию 6.1. На ПК с Windows Установить Python 3.8+ с python.org Скачать proxy1.py Отредактировать переменные: TARGET_HOST = IP вашего VPS HTTP_PREFIX (при желании) Запустить: cmd python proxy1.py Настроить браузер: HTTP/HTTPS прокси: 10.10.0.1:8443 Без SOCKS 6.2. На VPS с Ubuntu Подключиться по SSH Установить Python: bash sudo apt update && sudo apt install python3 -y Скопировать proxy2.py Открыть порт 8080 (если нужно): bash sudo ufw allow 8080/tcp Запустить: bash python3 proxy2.py 6.3. Синхронизация HTTP_PREFIX_SIZE Запустить proxy1.py на Windows В логе найти строку: text HTTP_PREFIX длина: 347 байт Скопировать число (например, 347) В ОБОИХ скриптах установить: python HTTP_PREFIX_SIZE = 347 Перезапустить оба прокси 7. Требования к коду Должен быть самодокументированным (комментарии на русском или английском) Обрабатывать исключения без падения всего сервера Не использовать сторонние библиотеки (только стандартный Python) Работать под Windows и Linux без изменений Выводить в консоль: статус, соединения, ошибки, количество активных клиентов 8. Пример использования После запуска обоих прокси: Браузер → 10.10.0.1:8443 Proxy1 добавляет префикс, конвертирует в HEX VPS Proxy2 удаляет префикс, декодирует HEX Трафик уходит в интернет с IP VPS 9. Диагностика проблем Проблема Возможная причина Решение Proxy2 не слушает порт Порт занят или фаервол sudo lsof -i :8080, ufw allow Несовпадение префикса Разные HTTP_PREFIX Синхронизировать текст Ошибка декодирования HEX Повреждённый пакет Проверить разделитель Нет соединения с VPS Неправильный IP/порт telnet 8080 10. Возможные улучшения (на будущее) Сжатие трафика перед HEX Случайный выбор префикса из пула Аутентификация по токену Логирование в файл systemd-сервис для VPS Конец промпта IPFS Tunnels Proxy https://proposed-gray-cattle.myfilebase.com/ipfs/QmeU3EYvwA3HDnRwyB2xUAfD39WQgnF9WfimVwumw6s5Ba https://proposed-gray-cattle.myfilebase.com/ipfs/Qmdjn3PA14PLyzmz1kwFfcmQnZRxBgYvcE8qcU2kAX86gi (c) by Valery Shmelev (Deutsche: Valery Shmeleff)