Протокол передачи данных, использующий мессенджер MAX.
- Четыре режима передачи данных:
- PTCP (Pseudo-TCP) [Port 10001]: Гарантированная доставка. Проверяет историю чата на наличие сообщения и переотправляет его каждые 15 секунд до подтверждения появления.
- PUDP (Pseudo-UDP) [Port 10002]: Ждет активного соединения с сервером перед отправкой пакета, но не проверяет историю.
- UDP (True-UDP) [Port 10003]: Отправляет сообщение немедленно, без проверок.
- CUDP (Clean-UDP) [Port 10005]: То же самое, что и UDP, но сообщения автоматически удаляются из чата через 60 секунд после отправки.
- Шифрование и типы пакетов:
- Автоматическая генерация RSA-2048 ключей и UUID при первом запуске.
- Шифрование контента (OAEP SHA256) для персональных сообщений.
- Передача широковещательных
broadcastпакетов.
- Протоколы:
- Версия 1 (IP-over-MAX classic): Разбиение длинных данных (более 3000 символов) на текстовые фрагменты (
content_part) с последующей сборкой. - Версия 2 (IP-over-ZDisk): Конвертация больших сообщений (> 3000 символов) в формат технической информации + файл вложения. При превышении лимита вложение автоматически разбивается на части и собирается на стороне получателя с помощью алгоритмов ZDisk
- Версия 1 (IP-over-MAX classic): Разбиение длинных данных (более 3000 символов) на текстовые фрагменты (
- Безопасная передача файлов: Возможность передавать любые файлы как вложения MAX напрямую через локальные порты. Для адресных сообщений файлы автоматически шифруются (AES-256-GCM + RSA).
- Сжатие данных: Все данные версии 2 (как текстовые, так и файлы) всегда сжимаются (zlib) перед шифрованием и отправкой для экономии трафика.
- Локальный шлюз: Работает как прозрачный прокси. Принимает данные по TCP. Входящие данные из MAX пересылаются на порт 10004 (предпочтительно TCP, с автоматическим откатом на UDP).
pip install maxapi-python cryptography aiohttp aiofilesОтредактируйте переменные в начале файла ip-over-max.py:
CHAT_ID = 0 # ID чата для обмена данными (0 - избранное)Вход реализован по QR, поэтому номер телефона менять не надо.
python ip-over-max.pyКлиент слушает локальные порты (TCP/UDP) и пересылает данные в MAX.
| Порт | Режим | Описание |
|---|---|---|
| 10001 | PTCP | Гарантированная доставка с проверкой истории |
| 10002 | PUDP | Отложенная отправка до появления сети |
| 10003 | UDP | Обычная быстрая отправка |
| 10005 | CUDP | Самоуничтожение сообщения через 60 секунд |
| 10004 | RECEIVE | Порт, на который клиент пересылает входящие данные. Рекомендуется слушать его по TCP для приема больших данных. |
Вы можете отправлять данные в следующих форматах:
- Broadcast:
Любой текст сообщения— увидят все участники. - Targeted:
BASE64_UUID|Текст сообщения— будет зашифровано для конкретного получателя. - File Attachment:
[RECIPIENT|]FILE:путь_к_файлу[|Текст сообщения]— отправит файл как вложение.- Рекомендуется использовать абсолютные пути к файлам.
- Если указан
RECIPIENT, файл будет зашифрован (AES-256-GCM) случайным ключом, который, в свою очередь, шифруется RSA-ключом получателя. - При
broadcastфайл отправляется в открытом виде.
import socket
# Отправка сообщения с самоликвидацией через 60 секунд
def send_secure_iot_data():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect(("127.0.0.1", 10005)) # CUDP
sock.sendall("Данные датчика: 22.5C".encode())
# Отправка зашифрованного файла конкретному получателю
def send_secure_file(recipient_uuid_b64):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect(("127.0.0.1", 10001)) # PTCP (гарантированная доставка)
# Формат: UUID|FILE:путь|текст
payload = f"{recipient_uuid_b64}|FILE:C:/data/secret_report.pdf|Конфиденциальный отчет"
sock.sendall(payload.encode())cache/identity.json: Ваш UUID и приватный ключ. Никому не передавайте этот файл.cache/known_uuids.json: Справочник публичных ключей других участников сети.cache/session.db: Сессия подключения к MAX. Никому не передавайте этот файл.cache/temp/: Временная директория для операций разделения (splitter) и сборки (assembler) файлов-вложений.