Skip to content

AlexeyRF/IP-over-MAX

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

IP-over-MAX (v2)

Протокол передачи данных, использующий мессенджер 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
  • Безопасная передача файлов: Возможность передавать любые файлы как вложения MAX напрямую через локальные порты. Для адресных сообщений файлы автоматически шифруются (AES-256-GCM + RSA).
  • Сжатие данных: Все данные версии 2 (как текстовые, так и файлы) всегда сжимаются (zlib) перед шифрованием и отправкой для экономии трафика.
  • Локальный шлюз: Работает как прозрачный прокси. Принимает данные по TCP. Входящие данные из MAX пересылаются на порт 10004 (предпочтительно TCP, с автоматическим откатом на UDP).

Быстрый старт

1. Установка зависимостей

pip install maxapi-python cryptography aiohttp aiofiles

2. Конфигурация

Отредактируйте переменные в начале файла ip-over-max.py:

CHAT_ID = 0            # ID чата для обмена данными (0 - избранное)

Вход реализован по QR, поэтому номер телефона менять не надо.

3. Запуск клиента

python ip-over-max.py

Работа с портами (Локальный API)

Клиент слушает локальные порты (TCP/UDP) и пересылает данные в MAX.

Порт Режим Описание
10001 PTCP Гарантированная доставка с проверкой истории
10002 PUDP Отложенная отправка до появления сети
10003 UDP Обычная быстрая отправка
10005 CUDP Самоуничтожение сообщения через 60 секунд
10004 RECEIVE Порт, на который клиент пересылает входящие данные. Рекомендуется слушать его по TCP для приема больших данных.

Формат отправки (на локальный порт)

Вы можете отправлять данные в следующих форматах:

  1. Broadcast: Любой текст сообщения — увидят все участники.
  2. Targeted: BASE64_UUID|Текст сообщения — будет зашифровано для конкретного получателя.
  3. File Attachment: [RECIPIENT|]FILE:путь_к_файлу[|Текст сообщения] — отправит файл как вложение.
    • Рекомендуется использовать абсолютные пути к файлам.
    • Если указан RECIPIENT, файл будет зашифрован (AES-256-GCM) случайным ключом, который, в свою очередь, шифруется RSA-ключом получателя.
    • При broadcast файл отправляется в открытом виде.

Примеры использования (examples_send.py)

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) файлов-вложений.

About

Передача сообщений от IOT в период отключений связи, используя национальный мессенджер МАКС (MAX)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages