Всем привет! Я продолжаю развивать свою библиотеку для создания распределённых приложений, которая уже легла в основу новой версии rats-search (распределённого торрент-поисковика) и, судя по всему, UltraVNC (VNC клиент).
Она позволяет развернуть собственную P2P-сеть, связать пользователей между собой и выстроить коммуникацию посредством различных потоков данных (бинарных, строковых и т.п.). Главная особенность — автоматическое обнаружение участников (peer discovery), что крайне актуально в условиях постоянных блокировок и сетевых ограничений.
На данный момент библиотека поддерживает языки C/C++, Android (Java), Python и Node.js.
Это очередное обновление и ещё большая стабилизация различных функций. Обо всём подробнее далее.
Последний стабильный релиз на сегодня — 1.0.0. Исходный код и бинарные файлы доступны для скачивания для:
-
Windows (64-bit)
-
Linux (64-bit)
-
Android (32-bit / 64-bit)
-
macOS (64-bit)
https://github.com/librats/librats/releases
Доступ к функционалу библиотеки организован через FFI (Foreign Function Interface).

Поддерживается следующие возможности:
-
Поиск пиров в сети — автоматическое обнаружение участников через DHT (совместим с BitTorrent Mainline DHT) для глобальной сети и через mDNS для локальной.
-
Обход NAT без настройки роутера — встроенная поддержка UPnP, NAT-PMP, ICE, STUN и TURN. Библиотека сама просит роутер пробросить порт, поэтому пиры за NAT могут принимать входящие соединения без ручной настройки.
-
Сквозное шифрование — протокол Noise (Curve25519 + ChaCha20-Poly1305) с автоматическим управлением ключами, взаимной аутентификацией и совершенной прямой секретностью.
-
Передача файлов — потоковая отправка файлов и целых папок с контролем целостности (CRC32 + SHA-256), возможностью паузы/возобновления/отмены и атомарной доставкой.
-
Масштабируемый обмен сообщениями — протокол GossipSub для публикации/подписки по темам с организацией сообщений и их фильтрацией.
-
Поддержка многих языков — единый API для C++, C, Node.js (с TypeScript), Java/Android и Python, работающий на Windows, Linux, macOS и Android.
-
Удобный API для разработчика — событийная модель (
on(),once(),off()), обмен сообщениями в JSON, отслеживание состояния соединений в реальном времени и гибкая система логирования. -
и т.п. 🙂
Ключевые изменения и исправления с момента выхода предыдущей статьи (в ней была версия 0.7.0), их было еще больше но тем не менее:
-
Исправлено определение порта в peer exchange для входящих подключений (раньше при обмене списками пиров мог попадать неверный порт)
-
Переход на I/O poller для списка клиентов
-
Поддержка IPv6 в DHT
-
Поддержка защиты от Sybil attack — BEP 42 — это так же улучшает связность сети с qbittorrent клиентами и другими современными реализациями DHT.
-
Поддержка протоколов UPnP и NAT-PMP для «пробивания» роутеров.
-
Детекция двойного NAT
-
Поддержка implied_port из BEP 5 для DHT
-
Поддержка ротации логов
-
Поддержка алгоритма vote для DHT
-
Network monitor — отслеживание изменений состояния сети (смена интерфейсов/адресов). Будет гораздо лучше чувствовать себя на android где это актуально.
-
Исправлен краш на macOS при коротком жизненном цикле и use-after-scope в Node.js-биндингах (спасибо Simon’s Hub)
Из интересного (о чём уже было сказано выше): обнаружил форк библиотеки для клиента UltraVNC — приятненько :).
На этом пока про библиотеку все, всем приятного использования. Теперь пару слов про ключевой клиент rats-search. Было много стабилизаций со времени прошлой версии.

Наконец стабилизировался запуск вместе с Manticore ( https://github.com/librats/rats-search/issues/244 ) — было очень много комментариев с этой проблемой.
Появилась возможность экспорта .torrent файлов. Восстановлена загрузка описаний с разных трекеров:

Ну и, соответственно, все фичи из librats тоже доступны. А, кстати, версия на macOS под ARM наконец-то работает как надо 🙂
ссылка на оригинал статьи https://habr.com/ru/articles/1043370/