Перейти к содержанию
    

На каком софтверном интерфейсе поддержать I/O с линукс борды через PoE во внешний мир

Добрый день,

 

я сильный профан в сабже, не пинайте, пожалуйста, сильно.

 

Есть борда 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 везде поддерживаются, или лучше что-то другое взять?), чтоб юзер мог прилинковать это к своему С/С++ проекту.

 

Тыкните, пожалуйста, носом что почитать, а еще луче, что конкретно, а именно какие библиотеки или пакеты, для этих операций выбрать.

 

ЗЫ в гугле не забанили, но от моря разных решений реально запутался и не могу принять решение, что проще, не пинайте, пожалуйста, сильно!

 

Спасибо!

 

ИИВ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что касается защиты-паролей итп.

UDP будет защищен настолько, насколько Вы это пропишите в своем коде. Смотрите протоколы SSL/TLS, HTTPS. Они встраиваются в TCP и обеспечивают защищенное соединение. Также, броузеры вроде Chrome хотят HTTPS.

Соотв-но, Вы можете в начальном этапе разработки не очень обращать внимание на защиту, тк. эту обязанность выполнит TLS.

(шифрование-паролирование). Когда система "в основе" будет отлажена, можно подключать защиту.

т.е. Ваш вопрос о библиотеках: Защита, пароли - это TLS, https.

 

Наиболее надежное и быстрое соединение клиент-сервер Вы можете реализовать на UDP (однопользовательское соединение).

Протокол реализуете сами, на 100 проц. Это и минус, и плюс. По коду это будет достаточно сложно, необходимо хорошо разобраться с socket/datagramm API.

Сложно не с точки зрения реализации протокола, а с т.з. освоения API.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое, k155la3 за разъяснения.

 

Постепенно проясняется, но вопросов еще много.

 

Скажите, пожалуйста, правильно ли я понимаю, что с помощью сокетов я смогу реализовать что-то похожее на функциональность юниксовского open/write/read или хотя бы fopen/fprintf/fscanf/feof

 

То есть внутри моей программы я мог бы весь ввод-вывод сделать как если бы она работала с двумя потоками, один на вход (stdin) и один на выход (stdout).

 

Скажите, пожалуйста, можно ли это как-то сделать так, что оно присоединяется через какой-то секьюрны протокол (SSL/TLS) и коммуникация происходит с какого-то ремоут хоста на мою ембеддед линукс борду?

 

С защитой - паранойи нет, но нужна возможность минимальной защиты от дурака, то есть типа борда сидит в открытой сетке, и только тот, кто имеет право (то есть имеет хотя бы пароль), на нее может посылать команды.

 

С радостью выслушаю и последую советам и замечаниям!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

поразбиравшись далее, предполагаю, что надо ставить POCO у себя на Cyclone V SoC, поддерживать интерфейс JSON через webapi, а вебморду отдавать на клиентский компьютер, чтоб процессор не загружать.

 

Если есть какие-то альтернативы или так делать ко каким-то причинам не правильно или не эффективно, то, пожалуйста, посоветуйте!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работа с сокетами в 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 - "сервер", выполняющий "эхо" функцию.

Если это будет реализовано, можно идти дальше. Как "бонус" - автоматически получаете утилиту для тестирования сервера которая понадобится в дальнейшем для отладки-диагностики . На следующем этапе эту утилиту дополняете прочими ф-ми для тестирования сервера. Прикладные функции, прописанные в утилите используете в клиенте.

Возможно, такая последовательность для Вас - пройденный этап, но я работал по такой схеме.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...