iiv 16 18 мая, 2018 Опубликовано 18 мая, 2018 · Жалоба Добрый день, я сильный профан в сабже, не пинайте, пожалуйста, сильно. Есть борда Cyclone V SoC, ее ethernet через PoE виден во внешний мир (скорей всего по DHCP она получила локальный адрес). На борде есть самопально написанная С программа, функциональность которой можно описать так: 1. послать на выполнение строковую команду (одна достаточно длинная строка, скажем до 10КБайт) и сразу без задержки получить в ответ строку с результатом, 2. закачать или скачать один или несколько файлов в какую-то выделенную для этого внутреннюю директорию борды. На данный момент юзер может залогиниться по ssh на борду и может это выполнять. Теперь мне хочется, чтобы дополнительно A. юзер мог скачать по возможности простую и компатибельную со всеми Windows/MAC/Android/Linux платформами библиотеку, в которой есть эта функциональность и удаленно делать все то же самое, B. чтобы на этой борде стоял какой-то минималистический веб сервер, который бы позволял бы удобно запускать эти команды, смотреть результат и качать файлы по http протоколу, C. чтобы юзер мог у себя на своем компьютере поставить какую-то программку с идентичным функционалом, и делал то же самое со своего компа через етернет. D. Дополнительно хотелось бы реализовать функциональность пароля на выполнение этих операций, причем чтоб пароль не светился в открытом доступе по UDP интерфейсу. Наверное было бы хорошо поддержать возможность работы на несколько юзеров, но, если это будет отъедать много процессорных ресурсов Cyclone V SoC, то могу забить. Также то, что крутится на Cyclone V SoC не должно быть тяжелым, так как оба ядра заняты другими делами по самое здрассте, и правильнее было бы, чтобы такая программа была бы написана на С, чтоб я мог при необходимости приостанавливать ее выполнение, чтоб другие процессы не тормозились бы. Как я понимаю * мне надо на какой-то порт повесить мою программу, что реализует функциональность [1] (поделитесь, пожалуйста, простым примером), и найти какой-то простой до ужаса метод реализации [2], * на чем-то написать веб морду, которая бы транслировала http команды в функциональность порта и обратно (то есть чтоб одновременно и порт работал, и веб морда, и юзер сам решал, что ему проще). * на чем-то написать интерфейс посылки на порт (socket везде поддерживаются, или лучше что-то другое взять?), чтоб юзер мог прилинковать это к своему С/С++ проекту. Тыкните, пожалуйста, носом что почитать, а еще луче, что конкретно, а именно какие библиотеки или пакеты, для этих операций выбрать. ЗЫ в гугле не забанили, но от моря разных решений реально запутался и не могу принять решение, что проще, не пинайте, пожалуйста, сильно! Спасибо! ИИВ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 18 мая, 2018 Опубликовано 18 мая, 2018 · Жалоба что касается защиты-паролей итп. UDP будет защищен настолько, насколько Вы это пропишите в своем коде. Смотрите протоколы SSL/TLS, HTTPS. Они встраиваются в TCP и обеспечивают защищенное соединение. Также, броузеры вроде Chrome хотят HTTPS. Соотв-но, Вы можете в начальном этапе разработки не очень обращать внимание на защиту, тк. эту обязанность выполнит TLS. (шифрование-паролирование). Когда система "в основе" будет отлажена, можно подключать защиту. т.е. Ваш вопрос о библиотеках: Защита, пароли - это TLS, https. Наиболее надежное и быстрое соединение клиент-сервер Вы можете реализовать на UDP (однопользовательское соединение). Протокол реализуете сами, на 100 проц. Это и минус, и плюс. По коду это будет достаточно сложно, необходимо хорошо разобраться с socket/datagramm API. Сложно не с точки зрения реализации протокола, а с т.з. освоения API. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 16 18 мая, 2018 Опубликовано 18 мая, 2018 · Жалоба Спасибо большое, k155la3 за разъяснения. Постепенно проясняется, но вопросов еще много. Скажите, пожалуйста, правильно ли я понимаю, что с помощью сокетов я смогу реализовать что-то похожее на функциональность юниксовского open/write/read или хотя бы fopen/fprintf/fscanf/feof То есть внутри моей программы я мог бы весь ввод-вывод сделать как если бы она работала с двумя потоками, один на вход (stdin) и один на выход (stdout). Скажите, пожалуйста, можно ли это как-то сделать так, что оно присоединяется через какой-то секьюрны протокол (SSL/TLS) и коммуникация происходит с какого-то ремоут хоста на мою ембеддед линукс борду? С защитой - паранойи нет, но нужна возможность минимальной защиты от дурака, то есть типа борда сидит в открытой сетке, и только тот, кто имеет право (то есть имеет хотя бы пароль), на нее может посылать команды. С радостью выслушаю и последую советам и замечаниям! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 16 19 мая, 2018 Опубликовано 19 мая, 2018 · Жалоба поразбиравшись далее, предполагаю, что надо ставить POCO у себя на Cyclone V SoC, поддерживать интерфейс JSON через webapi, а вебморду отдавать на клиентский компьютер, чтоб процессор не загружать. Если есть какие-то альтернативы или так делать ко каким-то причинам не правильно или не эффективно, то, пожалуйста, посоветуйте! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 20 мая, 2018 Опубликовано 20 мая, 2018 · Жалоба Работа с сокетами в Windows и Unix очень похожа. По Unix я пользовался книгой Терренс Чан Системное прогр-ие на CPP (кажется). К книге есть примеры работы с сокетами. Примеров и книг масса в сети. Потоки я не использовал, достаточно было датаграммных пакетов (UDP), что и Вам рекомендую для начала. Если нужен потоковый обмен - UDP не пойдет, надо TCP. Скажите, пожалуйста, правильно ли я понимаю, что с помощью сокетов я смогу реализовать что-то похожее на функциональность юниксовского open/write/read или хотя бы fopen/fprintf/fscanf/feofUDP - только read/write. Скажите, пожалуйста, можно ли это как-то сделать так, что оно присоединяется через какой-то секьюрны протокол (SSL/TLS) и коммуникация происходит с какого-то ремоут хоста на мою ембеддед линукс борду?Если Вы реализуете соединение на TCP, то режим с шифрованием включается очень просто, при открытии соединения надо в битовой маске параметров установить бит разрешения этого режима. Детально сказать не могу, сам не использовал, инф только по документации. С защитой - паранойи нет, но нужна возможность минимальной защиты от дурака, то есть типа борда сидит в открытой сетке, и только тот, кто имеет право (то есть имеет хотя бы пароль), на нее может посылать команды. Если достаточно только пароля - то шифрование TLS можете вообще не использовать (ОНО защищает канал от перехвата), а доступ по паролю реализуете сами (сам пароль передаете в кодированном виде. Кодирование на стороне клиента - с использованием случайного числа, которое генерирует сервер). --- Если есть какие-то альтернативы или так делать ко каким-то причинам не правильно или не эффективно, то, пожалуйста, посоветуйте! :) Альтернатив - миллион :) Эффективность зависит от критериев, по которым Вы будете оценивать результат работы. Главное - начать поэтапно, на практике, реализовывать то что задумали. Если не ясно, как сделать все в комплексе - делаете то, что нужно в любом случае. Реализуйте на PC "клиента" TCP (MSVC, Java). На SoC - "сервер", выполняющий "эхо" функцию. Если это будет реализовано, можно идти дальше. Как "бонус" - автоматически получаете утилиту для тестирования сервера которая понадобится в дальнейшем для отладки-диагностики . На следующем этапе эту утилиту дополняете прочими ф-ми для тестирования сервера. Прикладные функции, прописанные в утилите используете в клиенте. Возможно, такая последовательность для Вас - пройденный этап, но я работал по такой схеме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться