Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как сделать поддержку прокси на FreeRTOS LWIP?
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > FreeRTOS
vv_
Доброго времени!
Нужно сделать поддержку прокси в проекте. ОС FreeRTOS. Сетевой стек LWIP. Я пока ума не приложу как это делается. Никогда этим не занимался. В библиотеке LWIP не нашёл такой штатной функциональности. наверно какую то другую библиотеку нужно подключать.
Через обычные сокеты все работает, а вот с прокси не имел дела никогда.
Если у вас был опыт или есть мысли на этот счёт, поделитесь пожалуйста.
Спасибо!

P.S. Появилась информация, нужно научить freeRTOS с LWIP работать с http прокси. Как это можно сделать?

Непомнящий Евгений
насколько я помню, lwip никакой поддержки для http не предоставляет.

Прямо счас ваше устройство как с http работает? Вручную формирует запросы / парсит ответы или есть библиотека? Если есть библиотека - то смотрите доку на нее.

Если нет - то или пришла пора обзавестись, или надо разбираться, как в http работает прокси, и реализовывать руками
vv_
Благодарю за ответ!
Я сейчас работаю просто по tcp. Т.е. сырые данные. HTTP нет.
Пришёл к мысли, что нужно найти описание протокола HTTP, т.к. HTTP Proxy и посмотреть куда пишутся данные для прокси и сами данные, который прокси передаёт на сторону целевого сервера.
Нашёл описание протокола HTTP https://www.ietf.org/rfc/rfc2068.txt, пахнет тем, что действительно нужно будет реализовывать самому все. Я работаю с LWIP стеком версии 1.5.0.
Это очень странно, т.к. не думаю, что я первый, кто работает под freertos с HTTP Proxy. Наверняка либа какая то есть. Сейчас свою либу писать дорого. Но если ничего не найдётся, придётся писать свою.

Цитата(Непомнящий Евгений @ Jan 10 2017, 08:32) *
насколько я помню, lwip никакой поддержки для http не предоставляет.

Прямо счас ваше устройство как с http работает? Вручную формирует запросы / парсит ответы или есть библиотека? Если есть библиотека - то смотрите доку на нее.

Если нет - то или пришла пора обзавестись, или надо разбираться, как в http работает прокси, и реализовывать руками

Непомнящий Евгений
Цитата(vv_ @ Jan 10 2017, 10:21) *
Пришёл к мысли, что нужно найти описание протокола HTTP, т.к. HTTP Proxy и посмотреть куда пишутся данные для прокси и сами данные, который прокси передаёт на сторону целевого сервера.
Нашёл описание протокола HTTP https://www.ietf.org/rfc/rfc2068.txt, пахнет тем, что действительно нужно будет реализовывать самому все. Я работаю с LWIP стеком версии 1.5.0.

Протокол на первый взгляд несложный, но подозреваю всяких нюансов немало sm.gif


Цитата
Это очень странно, т.к. не думаю, что я первый, кто работает под freertos с HTTP Proxy. Наверняка либа какая то есть. Сейчас свою либу писать дорого. Но если ничего не найдётся, придётся писать свою.


Вот такое нашлось: https://github.com/kennethnoyens/lwipHttpClient

Еще можно попробовать взять какую-нить http-библиотеку и переделать ее так, чтобы она работала с lwip. Если вы с lwip работаете через эмуляцию сокетов, то возможно это будет несложно
vv_
Спасибо! поизучаю, отпишусь об успехе)

Цитата(Непомнящий Евгений @ Jan 10 2017, 10:57) *
Протокол на первый взгляд несложный, но подозреваю всяких нюансов немало sm.gif




Вот такое нашлось: https://github.com/kennethnoyens/lwipHttpClient

Еще можно попробовать взять какую-нить http-библиотеку и переделать ее так, чтобы она работала с lwip. Если вы с lwip работаете через эмуляцию сокетов, то возможно это будет несложно

vv_
Честно говоря как то плохо дело идет.
Мне кажется я что то не правильно понимаю.
на стороне клиента (плата с freertos) я сейчас пишу в сокеты сырые данные. И на сервере их обрабатываю.
В случае с HTTP Proxy я совсем не понимаю что мне нужно делать. Точнее понимаю, но не знаю как это реализовать.
tcp/ip это транспортный протокол, а HTTP - application layer. Т.е. в случае с HTTP мне нужно передавать данные тем же образом, что и раньше, только дополнительно обрамлять некоторой разметкой согласно HTTP 1.* стандарту?
Дальше, подключается HTTP Proxy. Тут делаем то же самое, но вдобавок, мне нужно передавать еще некоторые поля для прокси сервера, чтобы он знал куда ходить и куда отправлять. Как это реализовать у себя в прошивке сейчас ума не приложу.
Можете подсказать в чем я ошибаюсь, или может думаю не так? куда копать?
Так же, я не понял как припаять приложенные библиотеки к проекту.
Непомнящий Евгений
Я с http особо не сталкивался, так что могу только теоретизировать. Самый простой режим - клиент устанавливает соединение и посылает сообщение. Сервер отвечает, клиент получает сообщение-ответ и разрывает соединение.
Сообщение состоит из заголовков и тела (собственно см тут https://ru.wikipedia.org/wiki/HTTP). Заголовки и тело отправляются в установленное соединение, затем оттуда же вычитывается ответ.

Для работы с прокси-сервером надо добавить специальные заголовки для этого прокси. Тут я подробностей не знаю, читайте описание протокола.

Что касается библиотек - возьмите ту, что попроще и попробуйте собрать sm.gif Придется подменять системные вызовы на методы lwip. Насколько это просто сделать и стоит ли вообще овчинка выделки - смотрите сами.
x893
Мне кажется, что не совсем есть понимание слов http proxy.
Проще написать словами что нужно без употребления proxy.
Тогда и ответ будет адекватный.
gerber
Вся разница работы через прокси: при прямом соединении с http-сервером tcp/ip соединение устанавливается напрямую с сервером (сокет открывается на ip-адрес сервера, порт 80), а при работе через прокси - tcp/ip соединение устанавливается c ip-адресом и портом (не обязательно порт 80) прокси-сервера, ему направляется http-запрос, после чего прокси парсит этот запрос, понимает, какую станицу в сети вы запросили, от имени своего ip-адреса коннектится к нужному серверу, скачивает запрошенную страницу и возвращает вам.
Суть в том, что по запросу http можно понять, чего хочет клиент, подсоединившийся к прокси. Поэтому прокси называется http-прокси.
В случае с tcp всё не так однозначно, так как неясно, кому предназначены данные, отправляемые в tcp-пакетах после коннекта. Поэтому tcp-прокси работают по-другому, они попросту редиректят все входящие соединения на фиксированный ip-адрес и порт, которые ему заданы в настройках, являясь просто шлюзом, попутно выполняющим какие-то функции (ограничения, проверки прав доступа, логгирования).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.