|
|
|
Как сделать поддержку прокси на FreeRTOS LWIP?, keil, FreeRTOS, LWIP, Proxy |
|
|
|
Jan 10 2017, 07:21
|
Участник
Группа: Участник
Сообщений: 15
Регистрация: 24-06-14
Пользователь №: 82 043
|
Благодарю за ответ! Я сейчас работаю просто по 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 работает прокси, и реализовывать руками
|
|
|
|
|
Jan 10 2017, 07:57
|
Знающий
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153
|
Цитата(vv_ @ Jan 10 2017, 10:21) Пришёл к мысли, что нужно найти описание протокола 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 работаете через эмуляцию сокетов, то возможно это будет несложно
|
|
|
|
|
Jan 10 2017, 11:16
|
Участник
Группа: Участник
Сообщений: 15
Регистрация: 24-06-14
Пользователь №: 82 043
|
Спасибо! поизучаю, отпишусь об успехе) Цитата(Непомнящий Евгений @ Jan 10 2017, 10:57) Протокол на первый взгляд несложный, но подозреваю всяких нюансов немало Вот такое нашлось: https://github.com/kennethnoyens/lwipHttpClientЕще можно попробовать взять какую-нить http- библиотеку и переделать ее так, чтобы она работала с lwip. Если вы с lwip работаете через эмуляцию сокетов, то возможно это будет несложно
|
|
|
|
|
Jan 12 2017, 15:45
|
Участник
Группа: Участник
Сообщений: 15
Регистрация: 24-06-14
Пользователь №: 82 043
|
Честно говоря как то плохо дело идет. Мне кажется я что то не правильно понимаю. на стороне клиента (плата с freertos) я сейчас пишу в сокеты сырые данные. И на сервере их обрабатываю. В случае с HTTP Proxy я совсем не понимаю что мне нужно делать. Точнее понимаю, но не знаю как это реализовать. tcp/ip это транспортный протокол, а HTTP - application layer. Т.е. в случае с HTTP мне нужно передавать данные тем же образом, что и раньше, только дополнительно обрамлять некоторой разметкой согласно HTTP 1.* стандарту? Дальше, подключается HTTP Proxy. Тут делаем то же самое, но вдобавок, мне нужно передавать еще некоторые поля для прокси сервера, чтобы он знал куда ходить и куда отправлять. Как это реализовать у себя в прошивке сейчас ума не приложу. Можете подсказать в чем я ошибаюсь, или может думаю не так? куда копать? Так же, я не понял как припаять приложенные библиотеки к проекту.
|
|
|
|
|
Jan 12 2017, 16:06
|
Знающий
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153
|
Я с http особо не сталкивался, так что могу только теоретизировать. Самый простой режим - клиент устанавливает соединение и посылает сообщение. Сервер отвечает, клиент получает сообщение-ответ и разрывает соединение. Сообщение состоит из заголовков и тела (собственно см тут https://ru.wikipedia.org/wiki/HTTP). Заголовки и тело отправляются в установленное соединение, затем оттуда же вычитывается ответ. Для работы с прокси-сервером надо добавить специальные заголовки для этого прокси. Тут я подробностей не знаю, читайте описание протокола. Что касается библиотек - возьмите ту, что попроще и попробуйте собрать Придется подменять системные вызовы на методы lwip. Насколько это просто сделать и стоит ли вообще овчинка выделки - смотрите сами.
|
|
|
|
|
Jan 13 2017, 07:24
|
Знающий
Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088
|
Вся разница работы через прокси: при прямом соединении с http-сервером tcp/ip соединение устанавливается напрямую с сервером (сокет открывается на ip-адрес сервера, порт 80), а при работе через прокси - tcp/ip соединение устанавливается c ip-адресом и портом (не обязательно порт 80) прокси-сервера, ему направляется http-запрос, после чего прокси парсит этот запрос, понимает, какую станицу в сети вы запросили, от имени своего ip-адреса коннектится к нужному серверу, скачивает запрошенную страницу и возвращает вам. Суть в том, что по запросу http можно понять, чего хочет клиент, подсоединившийся к прокси. Поэтому прокси называется http-прокси. В случае с tcp всё не так однозначно, так как неясно, кому предназначены данные, отправляемые в tcp-пакетах после коннекта. Поэтому tcp-прокси работают по-другому, они попросту редиректят все входящие соединения на фиксированный ip-адрес и порт, которые ему заданы в настройках, являясь просто шлюзом, попутно выполняющим какие-то функции (ограничения, проверки прав доступа, логгирования).
--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|