|
|
  |
На каком софтверном интерфейсе поддержать I/O с линукс борды через PoE во внешний мир, Тыкните, пожалуйста, в правильную документацию |
|
|
|
May 18 2018, 06:38
|
вопрошающий
    
Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436

|
Добрый день,
я сильный профан в сабже, не пинайте, пожалуйста, сильно.
Есть борда Cyclone V SoC, ее ethernet через PoE виден во внешний мир (скорей всего по DHCP она получила локальный адрес).
На борде есть самопально написанная С программа, функциональность которой можно описать так: 1. послать на выполнение строковую команду (одна достаточно длинная строка, скажем до 10КБайт) и сразу без задержки получить в ответ строку с результатом, 2. закачать или скачать один или несколько файлов в какую-то выделенную для этого внутреннюю директорию борды.
На данный момент юзер может залогиниться по ssh на борду и может это выполнять.
Теперь мне хочется, чтобы дополнительно A. юзер мог скачать по возможности простую и компатибельную со всеми Windows/MAC/Android/Linux платформами библиотеку, в которой есть эта функциональность и удаленно делать все то же самое, B. чтобы на этой борде стоял какой-то минималистический веб сервер, который бы позволял бы удобно запускать эти команды, смотреть результат и качать файлы по http протоколу, C. чтобы юзер мог у себя на своем компьютере поставить какую-то программку с идентичным [B] функционалом, и делал то же самое со своего компа через етернет. D. Дополнительно хотелось бы реализовать функциональность пароля на выполнение этих операций, причем чтоб пароль не светился в открытом доступе по UDP интерфейсу. Наверное было бы хорошо поддержать возможность работы на несколько юзеров, но, если это будет отъедать много процессорных ресурсов Cyclone V SoC, то могу забить.
Также то, что крутится на Cyclone V SoC не должно быть тяжелым, так как оба ядра заняты другими делами по самое здрассте, и правильнее было бы, чтобы такая программа была бы написана на С, чтоб я мог при необходимости приостанавливать ее выполнение, чтоб другие процессы не тормозились бы.
Как я понимаю
* мне надо на какой-то порт повесить мою программу, что реализует функциональность [1] (поделитесь, пожалуйста, простым примером), и найти какой-то простой до ужаса метод реализации [2], * на чем-то написать веб морду, которая бы транслировала http команды в функциональность порта и обратно (то есть чтоб одновременно и порт работал, и веб морда, и юзер сам решал, что ему проще). * на чем-то написать интерфейс посылки на порт (socket везде поддерживаются, или лучше что-то другое взять?), чтоб юзер мог прилинковать это к своему С/С++ проекту.
Тыкните, пожалуйста, носом что почитать, а еще луче, что конкретно, а именно какие библиотеки или пакеты, для этих операций выбрать.
ЗЫ в гугле не забанили, но от моря разных решений реально запутался и не могу принять решение, что проще, не пинайте, пожалуйста, сильно!
Спасибо!
ИИВ
|
|
|
|
|
May 18 2018, 09:34
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

|
что касается защиты-паролей итп. UDP будет защищен настолько, насколько Вы это пропишите в своем коде. Смотрите протоколы SSL/TLS, HTTPS. Они встраиваются в TCP и обеспечивают защищенное соединение. Также, броузеры вроде Chrome хотят HTTPS. Соотв-но, Вы можете в начальном этапе разработки не очень обращать внимание на защиту, тк. эту обязанность выполнит TLS. (шифрование-паролирование). Когда система "в основе" будет отлажена, можно подключать защиту. т.е. Ваш вопрос о библиотеках: Защита, пароли - это TLS, https.
Наиболее надежное и быстрое соединение клиент-сервер Вы можете реализовать на UDP (однопользовательское соединение). Протокол реализуете сами, на 100 проц. Это и минус, и плюс. По коду это будет достаточно сложно, необходимо хорошо разобраться с socket/datagramm API. Сложно не с точки зрения реализации протокола, а с т.з. освоения API.
|
|
|
|
|
May 18 2018, 13:16
|
вопрошающий
    
Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436

|
Спасибо большое, k155la3 за разъяснения.
Постепенно проясняется, но вопросов еще много.
Скажите, пожалуйста, правильно ли я понимаю, что с помощью сокетов я смогу реализовать что-то похожее на функциональность юниксовского open/write/read или хотя бы fopen/fprintf/fscanf/feof
То есть внутри моей программы я мог бы весь ввод-вывод сделать как если бы она работала с двумя потоками, один на вход (stdin) и один на выход (stdout).
Скажите, пожалуйста, можно ли это как-то сделать так, что оно присоединяется через какой-то секьюрны протокол (SSL/TLS) и коммуникация происходит с какого-то ремоут хоста на мою ембеддед линукс борду?
С защитой - паранойи нет, но нужна возможность минимальной защиты от дурака, то есть типа борда сидит в открытой сетке, и только тот, кто имеет право (то есть имеет хотя бы пароль), на нее может посылать команды.
С радостью выслушаю и последую советам и замечаниям!
|
|
|
|
|
May 20 2018, 16:22
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

|
Работа с сокетами в Windows и Unix очень похожа. По Unix я пользовался книгой Терренс Чан Системное прогр-ие на CPP (кажется). К книге есть примеры работы с сокетами. Примеров и книг масса в сети. Потоки я не использовал, достаточно было датаграммных пакетов (UDP), что и Вам рекомендую для начала. Если нужен потоковый обмен - UDP не пойдет, надо TCP. Цитата Скажите, пожалуйста, правильно ли я понимаю, что с помощью сокетов я смогу реализовать что-то похожее на функциональность юниксовского open/write/read или хотя бы fopen/fprintf/fscanf/feof UDP - только read/write. Цитата Скажите, пожалуйста, можно ли это как-то сделать так, что оно присоединяется через какой-то секьюрны протокол (SSL/TLS) и коммуникация происходит с какого-то ремоут хоста на мою ембеддед линукс борду? Если Вы реализуете соединение на TCP, то режим с шифрованием включается очень просто, при открытии соединения надо в битовой маске параметров установить бит разрешения этого режима. Детально сказать не могу, сам не использовал, инф только по документации. Цитата С защитой - паранойи нет, но нужна возможность минимальной защиты от дурака, то есть типа борда сидит в открытой сетке, и только тот, кто имеет право (то есть имеет хотя бы пароль), на нее может посылать команды. Если достаточно только пароля - то шифрование TLS можете вообще не использовать (ОНО защищает канал от перехвата), а доступ по паролю реализуете сами (сам пароль передаете в кодированном виде. Кодирование на стороне клиента - с использованием случайного числа, которое генерирует сервер). --- Цитата Если есть какие-то альтернативы или так делать ко каким-то причинам не правильно или не эффективно, то, пожалуйста, посоветуйте!  Альтернатив - миллион  Эффективность зависит от критериев, по которым Вы будете оценивать результат работы. Главное - начать поэтапно, на практике, реализовывать то что задумали. Если не ясно, как сделать все в комплексе - делаете то, что нужно в любом случае. Реализуйте на PC "клиента" TCP (MSVC, Java). На SoC - "сервер", выполняющий "эхо" функцию. Если это будет реализовано, можно идти дальше. Как "бонус" - автоматически получаете утилиту для тестирования сервера которая понадобится в дальнейшем для отладки-диагностики . На следующем этапе эту утилиту дополняете прочими ф-ми для тестирования сервера. Прикладные функции, прописанные в утилите используете в клиенте. Возможно, такая последовательность для Вас - пройденный этап, но я работал по такой схеме.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|