gop2p — это библиотека Golang, обеспечивающая чрезвычайно простую одноранговую связь на основе UDP между программными клиентами. Цель состоит в том, чтобы иметь возможность удаленно управлять различными узлами, выдавая команды, подписанные RSA. Одноранговые узлы сохраняют открытый ключ к закрытому ключу, который есть только у клиента.
Это мой первый крупный go-проект, поэтому, возможно, он некрасивый, но он работает очень быстро.
Папка клиента содержит весь код, необходимый для запуска клиента, выполняющего команды.
Папка узла содержит весь код, необходимый для запуска узла.
После создания открытых и закрытых ключей RSA поместите их в файлы cryptotext.go для клиента и узла.
Поместив ключи в правильное место, создайте клиент и одноранговый узел.
Запустите клиент с помощью:
./p2pclient < IP ADDRESS OF PEER HERE >
Запустите начальный узел следующим образом:
./p2ppeer -p < port >
И запускайте любые новые узлы следующим образом:
./p2ppeer -p < port > -b < ANY OTHER PEER IP >
Пиры будут автоматически обмениваться информацией об узлах, находящихся в данный момент в сети, поэтому узел начальной загрузки не обязательно должен быть одним и тем же для каждого последующего узла. Пиры сами являются узлами начальной загрузки.
Пиры в настоящее время ничего не делают с отправленными им командами. Они распечатывают только необработанный байтовый фрагмент данных. Меня интересовала только p2p-связь, реализованная в Golang, поэтому команд по умолчанию нет. Однако для реализации некоторых команд для одноранговых узлов требуется только изменение функции «executeCommand» в файле groups.go. Буфер содержит только массив команд, поэтому делайте с ним что хотите. У меня есть закомментированный код, который будет выполнять команду как оболочку (но это может иметь ужасные последствия для безопасности, если вы наберете вредоносную команду. Вас предупредили).
Запросы на вытягивание приветствуются. Если вы хотите внести существенные изменения, пожалуйста, сначала откройте вопрос, чтобы обсудить, что вы хотели бы изменить.
Не стесняйтесь включать этот код в любые ваши проекты. Я только прошу вас указать этот проект и дать ссылку на страницу github. Вам также не обязательно использовать проект целиком. Вы можете использовать любые фрагменты, которые захотите. Просто укажите это в комментарии где-нибудь в исходном коде и не претендуйте на звание оригинального автора.
Массачусетский технологический институт