AI Prompt
Примеры ИИ запросов
AI generated "
Этот 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 позволяет очень легко модернизировать код и используемые технологии! Это в 100-150 раз быстрее, чем писать код самому.
Например, из этого промпта был создан промпт для генерирования двух 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 <VPS_IP> 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)
Comments
Post a Comment