vv_ 0 9 января, 2017 Опубликовано 9 января, 2017 (изменено) · Жалоба Доброго времени! Нужно сделать поддержку прокси в проекте. ОС FreeRTOS. Сетевой стек LWIP. Я пока ума не приложу как это делается. Никогда этим не занимался. В библиотеке LWIP не нашёл такой штатной функциональности. наверно какую то другую библиотеку нужно подключать. Через обычные сокеты все работает, а вот с прокси не имел дела никогда. Если у вас был опыт или есть мысли на этот счёт, поделитесь пожалуйста. Спасибо! P.S. Появилась информация, нужно научить freeRTOS с LWIP работать с http прокси. Как это можно сделать? Изменено 9 января, 2017 пользователем vv_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба насколько я помню, lwip никакой поддержки для http не предоставляет. Прямо счас ваше устройство как с http работает? Вручную формирует запросы / парсит ответы или есть библиотека? Если есть библиотека - то смотрите доку на нее. Если нет - то или пришла пора обзавестись, или надо разбираться, как в http работает прокси, и реализовывать руками Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vv_ 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба Благодарю за ответ! Я сейчас работаю просто по tcp. Т.е. сырые данные. HTTP нет. Пришёл к мысли, что нужно найти описание протокола HTTP, т.к. HTTP Proxy и посмотреть куда пишутся данные для прокси и сами данные, который прокси передаёт на сторону целевого сервера. Нашёл описание протокола HTTP https://www.ietf.org/rfc/rfc2068.txt, пахнет тем, что действительно нужно будет реализовывать самому все. Я работаю с LWIP стеком версии 1.5.0. Это очень странно, т.к. не думаю, что я первый, кто работает под freertos с HTTP Proxy. Наверняка либа какая то есть. Сейчас свою либу писать дорого. Но если ничего не найдётся, придётся писать свою. насколько я помню, lwip никакой поддержки для http не предоставляет. Прямо счас ваше устройство как с http работает? Вручную формирует запросы / парсит ответы или есть библиотека? Если есть библиотека - то смотрите доку на нее. Если нет - то или пришла пора обзавестись, или надо разбираться, как в http работает прокси, и реализовывать руками Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба Пришёл к мысли, что нужно найти описание протокола 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 работаете через эмуляцию сокетов, то возможно это будет несложно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vv_ 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба Спасибо! поизучаю, отпишусь об успехе) Протокол на первый взгляд несложный, но подозреваю всяких нюансов немало :) Вот такое нашлось: https://github.com/kennethnoyens/lwipHttpClient Еще можно попробовать взять какую-нить http-библиотеку и переделать ее так, чтобы она работала с lwip. Если вы с lwip работаете через эмуляцию сокетов, то возможно это будет несложно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vv_ 0 12 января, 2017 Опубликовано 12 января, 2017 · Жалоба Честно говоря как то плохо дело идет. Мне кажется я что то не правильно понимаю. на стороне клиента (плата с freertos) я сейчас пишу в сокеты сырые данные. И на сервере их обрабатываю. В случае с HTTP Proxy я совсем не понимаю что мне нужно делать. Точнее понимаю, но не знаю как это реализовать. tcp/ip это транспортный протокол, а HTTP - application layer. Т.е. в случае с HTTP мне нужно передавать данные тем же образом, что и раньше, только дополнительно обрамлять некоторой разметкой согласно HTTP 1.* стандарту? Дальше, подключается HTTP Proxy. Тут делаем то же самое, но вдобавок, мне нужно передавать еще некоторые поля для прокси сервера, чтобы он знал куда ходить и куда отправлять. Как это реализовать у себя в прошивке сейчас ума не приложу. Можете подсказать в чем я ошибаюсь, или может думаю не так? куда копать? Так же, я не понял как припаять приложенные библиотеки к проекту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 12 января, 2017 Опубликовано 12 января, 2017 · Жалоба Я с http особо не сталкивался, так что могу только теоретизировать. Самый простой режим - клиент устанавливает соединение и посылает сообщение. Сервер отвечает, клиент получает сообщение-ответ и разрывает соединение. Сообщение состоит из заголовков и тела (собственно см тут https://ru.wikipedia.org/wiki/HTTP). Заголовки и тело отправляются в установленное соединение, затем оттуда же вычитывается ответ. Для работы с прокси-сервером надо добавить специальные заголовки для этого прокси. Тут я подробностей не знаю, читайте описание протокола. Что касается библиотек - возьмите ту, что попроще и попробуйте собрать :) Придется подменять системные вызовы на методы lwip. Насколько это просто сделать и стоит ли вообще овчинка выделки - смотрите сами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 12 января, 2017 Опубликовано 12 января, 2017 · Жалоба Мне кажется, что не совсем есть понимание слов http proxy. Проще написать словами что нужно без употребления proxy. Тогда и ответ будет адекватный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gerber 7 13 января, 2017 Опубликовано 13 января, 2017 · Жалоба Вся разница работы через прокси: при прямом соединении с http-сервером tcp/ip соединение устанавливается напрямую с сервером (сокет открывается на ip-адрес сервера, порт 80), а при работе через прокси - tcp/ip соединение устанавливается c ip-адресом и портом (не обязательно порт 80) прокси-сервера, ему направляется http-запрос, после чего прокси парсит этот запрос, понимает, какую станицу в сети вы запросили, от имени своего ip-адреса коннектится к нужному серверу, скачивает запрошенную страницу и возвращает вам. Суть в том, что по запросу http можно понять, чего хочет клиент, подсоединившийся к прокси. Поэтому прокси называется http-прокси. В случае с tcp всё не так однозначно, так как неясно, кому предназначены данные, отправляемые в tcp-пакетах после коннекта. Поэтому tcp-прокси работают по-другому, они попросту редиректят все входящие соединения на фиксированный ip-адрес и порт, которые ему заданы в настройках, являясь просто шлюзом, попутно выполняющим какие-то функции (ограничения, проверки прав доступа, логгирования). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться