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

Как сделать поддержку прокси на FreeRTOS LWIP?

Доброго времени!

Нужно сделать поддержку прокси в проекте. ОС FreeRTOS. Сетевой стек LWIP. Я пока ума не приложу как это делается. Никогда этим не занимался. В библиотеке LWIP не нашёл такой штатной функциональности. наверно какую то другую библиотеку нужно подключать.

Через обычные сокеты все работает, а вот с прокси не имел дела никогда.

Если у вас был опыт или есть мысли на этот счёт, поделитесь пожалуйста.

Спасибо!

 

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

 

 

Изменено пользователем vv_

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


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

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

 

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

 

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

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


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

Благодарю за ответ!

Я сейчас работаю просто по tcp. Т.е. сырые данные. HTTP нет.

Пришёл к мысли, что нужно найти описание протокола HTTP, т.к. HTTP Proxy и посмотреть куда пишутся данные для прокси и сами данные, который прокси передаёт на сторону целевого сервера.

Нашёл описание протокола HTTP https://www.ietf.org/rfc/rfc2068.txt, пахнет тем, что действительно нужно будет реализовывать самому все. Я работаю с LWIP стеком версии 1.5.0.

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

 

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

 

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

 

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

 

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


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

Пришёл к мысли, что нужно найти описание протокола HTTP, т.к. HTTP Proxy и посмотреть куда пишутся данные для прокси и сами данные, который прокси передаёт на сторону целевого сервера.

Нашёл описание протокола HTTP https://www.ietf.org/rfc/rfc2068.txt, пахнет тем, что действительно нужно будет реализовывать самому все. Я работаю с LWIP стеком версии 1.5.0.

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

 

 

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

 

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

 

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

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


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

Спасибо! поизучаю, отпишусь об успехе)

 

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

 

 

 

 

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

 

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

 

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


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

Честно говоря как то плохо дело идет.

Мне кажется я что то не правильно понимаю.

на стороне клиента (плата с freertos) я сейчас пишу в сокеты сырые данные. И на сервере их обрабатываю.

В случае с HTTP Proxy я совсем не понимаю что мне нужно делать. Точнее понимаю, но не знаю как это реализовать.

tcp/ip это транспортный протокол, а HTTP - application layer. Т.е. в случае с HTTP мне нужно передавать данные тем же образом, что и раньше, только дополнительно обрамлять некоторой разметкой согласно HTTP 1.* стандарту?

Дальше, подключается HTTP Proxy. Тут делаем то же самое, но вдобавок, мне нужно передавать еще некоторые поля для прокси сервера, чтобы он знал куда ходить и куда отправлять. Как это реализовать у себя в прошивке сейчас ума не приложу.

Можете подсказать в чем я ошибаюсь, или может думаю не так? куда копать?

Так же, я не понял как припаять приложенные библиотеки к проекту.

 

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


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

Я с http особо не сталкивался, так что могу только теоретизировать. Самый простой режим - клиент устанавливает соединение и посылает сообщение. Сервер отвечает, клиент получает сообщение-ответ и разрывает соединение.

Сообщение состоит из заголовков и тела (собственно см тут https://ru.wikipedia.org/wiki/HTTP). Заголовки и тело отправляются в установленное соединение, затем оттуда же вычитывается ответ.

 

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

 

Что касается библиотек - возьмите ту, что попроще и попробуйте собрать :) Придется подменять системные вызовы на методы lwip. Насколько это просто сделать и стоит ли вообще овчинка выделки - смотрите сами.

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


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

Мне кажется, что не совсем есть понимание слов http proxy.

Проще написать словами что нужно без употребления proxy.

Тогда и ответ будет адекватный.

 

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


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

Вся разница работы через прокси: при прямом соединении с http-сервером tcp/ip соединение устанавливается напрямую с сервером (сокет открывается на ip-адрес сервера, порт 80), а при работе через прокси - tcp/ip соединение устанавливается c ip-адресом и портом (не обязательно порт 80) прокси-сервера, ему направляется http-запрос, после чего прокси парсит этот запрос, понимает, какую станицу в сети вы запросили, от имени своего ip-адреса коннектится к нужному серверу, скачивает запрошенную страницу и возвращает вам.

Суть в том, что по запросу http можно понять, чего хочет клиент, подсоединившийся к прокси. Поэтому прокси называется http-прокси.

В случае с tcp всё не так однозначно, так как неясно, кому предназначены данные, отправляемые в tcp-пакетах после коннекта. Поэтому tcp-прокси работают по-другому, они попросту редиректят все входящие соединения на фиксированный ip-адрес и порт, которые ему заданы в настройках, являясь просто шлюзом, попутно выполняющим какие-то функции (ограничения, проверки прав доступа, логгирования).

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


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

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

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

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

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

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

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

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

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

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