ethernet shield + web access

prokupets
Offline
Зарегистрирован: 24.05.2011

День добрый!

Пишу курсовой по удаленному управлению на основе Arduino + ethernet shield

Перерыл весь инет, но нигде не могу найти как ограничить доступ к веб морде.

Есть предложения с ограничением по IP, с защитой по паролю указанному в коде странички
и доступному для чения по "View Page Source" :-( т.е. расчитанному на дурака

Хотелось бы что-то хоть чуть серьезнее, ну хотя бы типа htpasswd в Apache

Помогите, может кто сталкивался

Спасибо

nmaqsudov
nmaqsudov аватар
Offline
Зарегистрирован: 24.05.2011

Можно подробнее? Как сделана веб-морда? Сервер на arduino?

Сервер должен отдать http-ответ с заголовком WWW-Authenticate. Тогда браузер выдаст своё стандартное окно авторизации. После этого произойдёт повторный http-запрос c заголовками, содержащими имя и пароль.

tip777
Offline
Зарегистрирован: 16.08.2011

 Как   указать  этот заголовок   ?

 

axill
Offline
Зарегистрирован: 05.09.2011

tip777 пишет:

 Как   указать  этот заголовок   ?

В поисковике первые пример по-моему выглядит доходчиво, хоть и на php linux.yaroslavl.ru/docs/www/php/t_php/http-auth.html

tip777
Offline
Зарегистрирован: 16.08.2011

 Я весь гугл исколисил в долю и поперёк ,такие примеры пробывал но ничего не вышло ,как именно для arduino  написать заголовок . вот начало моего скетча:

 

//--------------------------HTML------------------------
client.println("HTTP/1.1 200 OK");

//----------------------------------------------
client.println("Content-Type: text/html");
client.println();
client.print("<HEAD>");

client.print("<meta http-equiv=\"refresh\" content=\"x; url=x.x.x.x\">");
 

client.print("<html><head>");

axill
Offline
Зарегистрирован: 05.09.2011

tip777 пишет:

 Я весь гугл исколисил в долю и поперёк ,такие примеры пробывал но ничего не вышло ,как именно для arduino  написать заголовок . вот начало моего скетча:

я вам ссылку дал, вы ее даже не открыли, заголовок должен быть другой на PHP так выглядит:

 

header("WWW-Authenticate: Basic realm=\"My Realm\"");
header("HTTP/1.0 401 Unauthorized");

 

Zveruga
Offline
Зарегистрирован: 29.09.2011

Извинте за глупый вопрос, а что в езернет шилде есть встроенный хттп-сервер? 

2 ТС: 

вот так надо, как я понимаю:

//--------------------------HTML------------------------
// client.println("HTTP/1.1 200 OK");
 client.println("WWW-Authenticate: Basic realm=\"My Realm\"");
 client.println("HTTP/1.0 401 Unauthorized");
 //----------------------------------------------
 client.println("Content-Type: text/html");
 client.println();

 

axill
Offline
Зарегистрирован: 05.09.2011

Zveruga пишет:

Извинте за глупый вопрос, а что в езернет шилде есть встроенный хттп-сервер? 

как бы там есть TCP/IP, а на нем можно хоть web, хоть smtp и т.д.

я брал пример вэб сервера из библиотеки - работает, только я купил не стандартный шилд, а www.dealextreme.com/p/ethernet-shield-v1-1-for-arduino-66908

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

leshak
Offline
Зарегистрирован: 29.09.2011

 Да вообщем-то HTTP сервера нет. Правдо не понятно что вы понимаете под словом HTTP-сервер.

Вообщем-то HTTP сервер это что-то что отвечает, если его спрашивают, "магическими словами" описанными в стандарте HTTP. Типа "HTTP/1.0 401 Unauthirized" - пример таких магических слова. Если так умеет отвечать ваш скетч - значит он и есть HTTP сервер. А Ethernet Shild только обеспечивает связь между вашим скетчем-сервером и клиентом-браузером.

HTTP это "все лишь протокол", язык. http://www.w3.org/Protocols/rfc2616/rfc2616.html

Если в скетче реализовать ответы описаны в стандарте FTP, то он будет FTP-сервером и т.д. и т.п.

Научить свой скетч "прикидываться HTTP сервером" можно двумя путями:

1. Читать стандарт и реализоваться его серверную часть, по мере надобности.

2. Поставить что-то типа proxy-снифера. Например http://www.fiddler2.com/fiddler2/, зайни на какой-нибудь сайт и посмотреть "что шлет ваш браузер" и "что ему отвечают". Вот это "что ему отвечают" и нужно повторить в скетче.

Кстати fiddler2 пригодится в любом случае. Смотреть что браузер шлет ардуине и что она отвечает - тоже будет нужно.

 

 

leshak
Offline
Зарегистрирован: 29.09.2011

 

tip777 пишет:

Я весь гугл исколисил в долю и поперёк ,такие примеры пробывал

Вы не поверите, но тот пример что вы привели тоже посылает хедер:

client.println("Content-Type: text/html");

это и есть посылка хедера типа "Content-Type". Он сообщает браузеру что "дальше я буду передавать текстовые или html данные". Хедер это не что-то "очень умное". Это обыкновенная строчка определенного вида.

А Zveruga дал вам пример как послать хедер "требуется авторизация" и вернуть http-статус "в доступе отказано".

Кстати, на всякий случай. Преждем чем привинчивать "защиту", у вас вообще семл web-сервера уже работает, нормально отвечает?

 

leshak
Offline
Зарегистрирован: 29.09.2011

 И еще, многие (если не большинство) сайтов используют авторизацию через куки, а не через хедеры (хотя это более кошерно, но пугает пользователя). Хедеры больше используются для сервисов (грубо говоря когда нужно програмно обратится к защищеному сервису).

Если же "по ту сторону браузера" сидит человек, то часто делают примерно такую логику:

  1. Если пришел запрос, то проверяют есть ли в нем заранее предопределенная кука. Ее имя придумываете сами, например "_auth".
  2. Если куки нет, то отдаете не "то что попросили", а html страничку с логин формой. Если кука есть, то "шаг 4".
  3. Когда пользователь "запостит" эту страничку, вы проверяете его логин-пароль. Генерируете какой-то "случайный ключ", запоминаете его у себя, и устанавливаете временную куку "_auth" в это значение. И возвращаете редирект на ту страницу которую пользователь просил изначально.
  4. В дальшейшем при приходе всех запросов пользователя вы проверяете значение его куки "_auth" с тем ключом которые вы запомнили. Если не совпадает, уходите на шаг 2.

Но нужно помнить, что все подобные защиты "весьма условны". Сам протокол Http (и через куки, и через хедеры) шлет логины-пароли в открытом виде. Перехватить/подделать их - совершенно не проблема. Более защищеный вариант это https протокол (это тот же http, только зашифрованый публичными-приватными ключами). Но вряд ли вы сможете его реализовать. К тому же есть большие сомнения что ресурсов ардуины хватит на него. Так что делать на арудине "удаленное управление ядерной кнопкой" - точно не стоит. :) Даже в качестве курсовой.

Zveruga
Offline
Зарегистрирован: 29.09.2011

axill пишет:

как бы там есть TCP/IP, а на нем можно хоть web, хоть smtp и т.д.

я брал пример вэб сервера из библиотеки - работает, только я купил не стандартный шилд, а www.dealextreme.com/p/ethernet-shield-v1-1-for-arduino-66908

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

Опять таки не понял. Есть библиотека, которая импортируется в скетч и на андруине (или на самом езернет-шилде? там есть каокй-то микроконтроллер?)  поднимается вебсервер? А откуда он (этот сервер) берет контент?

Zveruga
Offline
Зарегистрирован: 29.09.2011

leshak пишет:

Да вообщем-то HTTP сервера нет. Правдо не понятно что вы понимаете под словом HTTP-сервер.

Вообщем-то HTTP сервер это что-то что отвечает, если его спрашивают, "магическими словами" описанными в стандарте HTTP. 

Ну да, именно так я и понимаю хттп-сервер, разве что дополню - слушает определенный тсп порт. А что, дейстительно реально в эту маленькую микросхемку всунуть хттп-сервер? 

leshak
Offline
Зарегистрирован: 29.09.2011

>поднимается вебсервер? А откуда он (этот сервер) берет контент?

шилд и библиотека выполняют функцию связи  между http-сервером и браузером-клиентом.

http-сервером, в данном случае, является сам скетч который должны написать вы. Откуда ваш скет будет брать контент - это ваше дело. Из флеша, с SD карты, с датчиков или его ответы будут "жестко закожены" в самом скетче - решать вам.

Вообщем web-сервера на арудуине нет. Его должны написать вы. Или ждать-искать пока "кто-то напишет". Но "универсальный web-сервер" вряд ли кто-то будет писать под нее.

Примеры "узкоспециализированных"  web-серверов есть в семплах библиотеки. Cкетч WebServer.pde на все вопросы отвечает страничкой состояния аналоговых пинов ардуины, или BarometricPressureWebServer.pde который умеет отвечать страничкой с данными с барометрического датчика.

Если вы хотите что-то более интелектуальное. Вроде клиент попросил страницу с именем page1.htm - отдать такой контент, если с  page2.htm - отдать другой. То реализация этого целиком ложится на ваши плечи. Нужно самому анализировать запрос от клиента, подготавливать данные и отвечать. В соотвествии стандартам http и html.

leshak
Offline
Зарегистрирован: 29.09.2011

 >дейстительно реально в эту маленькую микросхемку всунуть хттп-сервер

А что нереального в том что-бы написать код который формирует и отправляет несколько обыкновенных текстовых строк?

У вас видимо "ассоциативная путаница" с серверами типа apache, iis и т.п. Это "универсальные монстры". Это частный случай реализации http сервера. Их задача - убрать много черновой работы с плеч web-программиста. Вопросы типа "распарсить запрос", "проверить права доступа", "запустить процесс", "интерпретировать скрипт", "передать запрос соответсвующему хендлеру"  и т.п. они берут на себя. web-программисту остается только писать логику уже своего приложения, абстракциями более выского уровня, меньше заморачиваясь на "технические детали".

Тут просматривается некий аналог с операционными системами. Вас же не удивляет что у нас на ардуине нет "windows/linux". А скетчи запускаются :)

Такого монстра "на ардуине" никто не поднимет (ну разве что когда выйдет ее новая версия на ARM32, но и то непонятно "зачем"?).

А вот что-то "узкоспециализированное", то что умеет, например только "включить/выключить пин" - это написать вполне реально. Принципиальных отличий от скетчей которые управляются через обыкновенный Serial порт - нет. Принцип тот же самый: "пришла какая-то строка", нужно ее разобрать, понять "что она означает", выполнить эту команду и ответить строкой.

Zveruga
Offline
Зарегистрирован: 29.09.2011

Спасибо, стало понятней.

Меня просто смущает, что когда я пишу простенький код из 10 строк, то у меня получается скетч на 5кб из 32х возможных, вот и удивился как же можно втусовать хоть самый простенький веб-сервер, да еще и с минимальным  контентом в эти 32кб.

leshak
Offline
Зарегистрирован: 29.09.2011

 >получается скетч на 5кб из 32х возможных

Это расплата за "низкий порог входа". Когда вы подключаете библиотеки они "кушают" место используете вы их целиком или только одну функцию. Да и за "высокоуровневость" C++ тоже платить приходится. Поэтому "истинные" микроконтрольщики с таким презрением и относятся к ардуине. Поэтому они и любят asm. Там под контролем каждый байт. Но и вещей которые "нужно учитывать самому" намного больше.

>хоть самый простенький веб-сервер, да еще и с минимальным контентом в эти 32кб.

Ну если весь контент эта две странички из пары строчек, то "влезет". Если больше, то, вы правы, конечно контент прийдется хранить где-то "снаружи". Где-то видел проект, где .html файлы хранятся на SD карточке и ардуина отдает их по http. Вообщем-то это уже можно назвать "сервером" :)

Но даже если бы памяти у вас было "побольше" (можно и чип пожирнее купить), то писать  сайт на ардуине с более-менее серьезной логикой, на C++ - это головой подвинутся можно будет. И очень сложно-дорого в поддержке. Поэтому даже на PC сайты на C++ пишут только маргиналы. Есть более высоуровневые языки: C#, php, питон и т.п.

Поэтому если нужен "взрослый" веб-сайт, то есть два выхода:

1. Делаем его на PC, вся логика на PC, а ардуина только "мост для управления железом".

2. Берем ARM процессор, на котором можно уже запустить какой-нибудь линукс, там поднимаем, например,  апач и пишем под него на php, java, питоне....

Zveruga
Offline
Зарегистрирован: 29.09.2011

leshak пишет:

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

Это значит что там надо писать на ассемблере?

leshak
Offline
Зарегистрирован: 29.09.2011

 Ну никаких "там" и "нужно" нет. Ардуина это обыкновенный микроконтроллер amtel, в который предварительно зашили бутлоадер, что-бы можно было заливать в нее прошивки без программатора. И все.

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

В контроллер вы шьете "скомпилированную прошивку". Создает ее компилятор. Из ваших исходных кодов. На чем вы написали код - дело вашего вкуса. Если на asm, то итоговая прошивка будет содержать только команды которые вы написали, ни тактом больше. Фактически прошивка это и есть ASM, только в машинных кодах. Но и заботится обо всем нужно самому. Что-то большое на asm писать трудно, но когда ресурсов очень мало или нужно что-то очень real-time, нужен "полный контроль" - то выхода нет.

Если логики много, то приходится переходить на C. Более высокоуровневый. Но желательно представлять как компилятор будет переводить-оптимизировать это C в машинные коды. За большую "высокоуровневость" приходится платить ресурсами. Среди профи "что лучше" бесконечный холивары идут: на чем пишут "истинные", на C или на ASM. (но, как правило требуется знание и того и другого).

Для чайников взяли еще более высокоуровневый язык C++. Написали некоторое количество библиотек для популярных задач, которые скрывают часть "технической кухни". Но соотвественно "растояние" между "исходным кодом" и "командами которые в реальности выполняет процессор" еще больше увеличилось. И "накладные расходы". Вот эту связку "компилятор с C++ плюс библиотеки" и назвали Ардуиной :) 

Ну и сделали некоторую стандартизацию по "железу". Где сколько пинов, размер плат (что-бы шилды подходили от разных производителей). Но, по сути, это просто "восьмибитный микроконтроллер Amtel".

tip777
Offline
Зарегистрирован: 16.08.2011

Так ктонибудь может дать кусок рабочего скетча с запросом логина и пороля ? Сам сервер у меня довно без всяких проблем работает,просто через него упровляется всё в моём доме ,хотелось бы его запоролить,но не фига не получается ,браузер не реагирует на заголовок никак.Если кто может помогите. 

Zveruga
Offline
Зарегистрирован: 29.09.2011

leshak, спасибо, стало понятней. 

Zveruga
Offline
Зарегистрирован: 29.09.2011

tip777, вам выше советовали - поставьте снифер и проследите чтоб заголовки от сервера шли правильные. Может у вас там идет код ответа 200, а потом строкой ниже 401, вот он и не понимает. Типа так

client.println("HTTP/1.1 200 OK");

client.println("HTTP/1.0 401 Unauthorized"); 

А снифер четко покажет какой идет заголовок. Если понятней не стало - выкладывайте сюда заголовки которые шлет ардуина, посмотрим сообща.

tip777
Offline
Зарегистрирован: 16.08.2011

один из вариантов

client.println("WWW-Authenticate: Basic realm=\"Welcome to my Arduino uno\"");
client.println("HTTP/1.0 401 Unauthorized");
client.println(("Authorization Required"););
client.println("<html><head></head><body>");
client.println("<h2>Welcome to my Arduino uno</h2>");

пробывал по разному но браузер или вообще молчит или не реагирует на заголовок

 

leshak
Offline
Зарегистрирован: 29.09.2011

1. Поставте таки сниффер. Выше давал ссылку. Посмотрите что в реальности приходит от ардуины, а не "я думаю она посылает то-то". Посмотрите что именно посылает браузер. 

2. Почитайте:en.wikipedia.org/wiki/Basic_access_authentication там есть примеры "что послыает клиент" и "что отвечает сервер". Как минмум видно, что в примерах вначале послается статус "HTTP 401", а потом "WWW-Authenticate" хедер. У вас же наоборот.

Zveruga
Offline
Зарегистрирован: 29.09.2011

Ну это то что вы ему говорите слать, а снифер показал бы что он реально шлет. Из того что вы показали, пока что не вижу перевода строки между заголовком и собственно телом (<html>...) 

Вот так не пробовали:

client.println("HTTP/1.0 401 Unauthorized");
client.println("WWW-Authenticate: Basic realm=\"Welcome to my Arduino uno\"");
client.println("");
client.println("Authorization Required");

 А уже если придет в запросе хидер Authorization, вот такого вида:
 

Authorization:Basic cXFxOmFhYQ==

где cXFxOmFhYQ== это base64 кодированная пара логин:пароль, тогда уже шлите ваши <html> и пр.

 

tip777
Offline
Зарегистрирован: 16.08.2011

Огромное СПАСИБО пароль запрашиает,теперь как зделать обработку логина и пароля 

Zveruga
Offline
Зарегистрирован: 29.09.2011

Насколько я знаю в ардуино есть какая-то библиотека для работы со строками, через нее надо распарсить запрос, получить строку начинающуюся с  Authorization, вырезать из нее то что идет после Authorization: и до конца строки, убрать начальные и конечные пробелы на вский и сравнивать полученное с закодированным в base64 вашим логином-паролем разделенным двоеточием. Например в моем примере выше это qqq:aaa

leshak
Offline
Зарегистрирован: 29.09.2011

 ну проверить если в запросе есть строка "cXFxOmFhYQ==" (ваши логин пароль в base64 энкодинге, в данном случае это энкоженная строка ""qqq:aaa"), то отдавать ваш Html, если нет, то вернуть HTTP статус  403 - типа "мы вас поняли, но в доступе вам отказано". (ну и вообще погуглить, почитать про http статусы, узнать что какой означает).

Закодировать, ваш логин пароль можно, набрав в гугле "base64 online encoder". Например тут: base64-encoder-online.waraxe.us/

Тогда в браузере вы будете вводить его "почеловечески", а в ардуине сравнивать ужа закодированный вариант.

leshak
Offline
Зарегистрирован: 29.09.2011

 >Насколько я знаю в ардуино есть какая-то библиотека для работы со строками

http://arduino.cc/en/Reference/StringObject

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

Как-то так

if(clientRequestStr.indexOf("cXFxOmFhYQ==")>-1){
  .... Выводим наш HTML .....
} else  {
    client.println("HTTP/1.0 403 Forbidden");
}

 

Zveruga
Offline
Зарегистрирован: 29.09.2011

 

leshak пишет:

 

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

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

ТС: так а что за проект? Вы б описали как и что, интересно же - заинтриговала фраза "через него управляется все в моем доме"

 

leshak
Offline
Зарегистрирован: 29.09.2011

 А можете сделать "еще тупее" (хотя и чуть -чуть не по стандарту). Если пароль не совпадает, тогда возвращать http 401. В этом случае при неправильном пароле он просто будет спрашиватся еще раз.

Тогда не нужно будет делать проверки на наличие аудентификационных хедеров в запросе и проч. Вообщем тупо до горя: если пароль в запросе есть - выводить html, если нет - спрашиваем.

 

if(clientRequestStr.indexOf("cXFxOmFhYQ==")>-1){ // проверяем есть правильный пароль в запросе
//--------------------------HTML------------------------
client.println("HTTP/1.1 200 OK");

//----------------------------------------------
client.println("Content-Type: text/html");
client.println();
client.print("<HEAD>");

client.print("<meta http-equiv=\"refresh\" content=\"x; url=x.x.x.x\">");
client.print("<html><head>");




} else {
  client.println("HTTP/1.0 401 Unauthorized");
  client.println("WWW-Authenticate: Basic realm=\"Welcome to my Arduino uno\"");
  client.println("");
  client.println("Authorization Required");

}

 

 

 

tip777
Offline
Зарегистрирован: 16.08.2011

ничего загадочного ,уповляется свет,температура отопления,температура пола,кондиционер,ворота,калитка,температура улица дом полы и тд тп,на днях добил отправку sms, но не как не могу победить с логином и паролем 

leshak
Offline
Зарегистрирован: 29.09.2011

 самое смешное, что топик-стартера вообще нет в теме :) 

tip777
Offline
Зарегистрирован: 16.08.2011

leshak пишет:

 самое смешное, что топик-стартера вообще нет в теме :) 

Что смешного

tip777
Offline
Зарегистрирован: 16.08.2011

ругается на if(clientRequestStr.indexOf("cXFxOmFhYQ==")>-1)

нужна отдельная библиотека для string ? 

leshak
Offline
Зарегистрирован: 29.09.2011

 Смех бывает саркастически. Человек (prokupets) задал вопрос, люди тратят время, отвечают, а он "забил на это все". Немного некрасиво.

Слава богу, что вам это пригодилось. И может кому-то следующему поможет.

Так что, заработала у вас проверка пароля?

tip777
Offline
Зарегистрирован: 16.08.2011

leshak пишет:

 Смех бывает саркастически. Человек (prokupets) задал вопрос, люди тратят время, отвечают, а он "забил на это все". Немного некрасиво.

Слава богу, что вам это пригодилось. И может кому-то следующему поможет.

Так что, заработала у вас проверка пароля?

браузер запрашивает логин и пороль но оброботку пароля и логина ещё не добил

 

leshak
Offline
Зарегистрирован: 29.09.2011

>>ругается на if(clientRequestStr.indexOf("cXFxOmFhYQ==")>-1)

А как именно ругается? говорит что "незнаю имени clientRequestStr"?

Так это нормально. Туда нужно подствить то имя переменной в которой ваш скетч хранит запрос клиента. Я же не знаю как у вас эта переменная называется, вот и просто "придумал подходящие имя". Замените его на свое.

Эта переменная должна быть типа String (именно с большой буквы, объект arduino.cc/en/Reference/StringObject). Если вы данные вычитываете от клиента "посимвольно", то вначале их нужно будет собрать "в одну строку".

tip777
Offline
Зарегистрирован: 16.08.2011

leshak пишет:

>>ругается на if(clientRequestStr.indexOf("cXFxOmFhYQ==")>-1)

А как именно ругается? говорит что "незнаю имени clientRequestStr"?

Так это нормально. Туда нужно подствить то имя переменной в которой ваш скетч хранит запрос клиента. Я же не знаю как у вас эта переменная называется, вот и просто "придумал подходящие имя". Замените его на свое.

Эта переменная должна быть типа String (именно с большой буквы, объект arduino.cc/en/Reference/StringObject). Если вы данные вычитываете от клиента "посимвольно", то вначале их нужно будет собрать "в одну строку".

 

уже дошло спасибо

tip777
Offline
Зарегистрирован: 16.08.2011

leshak пишет:

 А можете сделать "еще тупее" (хотя и чуть -чуть не по стандарту). Если пароль не совпадает, тогда возвращать http 401. В этом случае при неправильном пароле он просто будет спрашиватся еще раз.

Тогда не нужно будет делать проверки на наличие аудентификационных хедеров в запросе и проч. Вообщем тупо до горя: если пароль в запросе есть - выводить html, если нет - спрашиваем.

 

if(clientRequestStr.indexOf("cXFxOmFhYQ==")>-1){ // проверяем есть правильный пароль в запросе
//--------------------------HTML------------------------
client.println("HTTP/1.1 200 OK");

//----------------------------------------------
client.println("Content-Type: text/html");
client.println();
client.print("<HEAD>");

client.print("<meta http-equiv=\"refresh\" content=\"x; url=x.x.x.x\">");
client.print("<html><head>");




} else {
  client.println("HTTP/1.0 401 Unauthorized");
  client.println("WWW-Authenticate: Basic realm=\"Welcome to my Arduino uno\"");
  client.println("");
  client.println("Authorization Required");

}

 

 

 

это проверка только пароля?

leshak
Offline
Зарегистрирован: 29.09.2011

 Не совсем понял вопрос. 

Это проверка "послали нам правильный пароль", если да то "пошла обычная логика вывода страницы", если нет, если нет - то "запросить пароль".

А что вы еще хотите проверять?

 

tip777
Offline
Зарегистрирован: 16.08.2011

leshak пишет:

 Не совсем понял вопрос. 

Это проверка "послали нам правильный пароль", если да то "пошла обычная логика вывода страницы", если нет, если нет - то "запросить пароль".

А что вы еще хотите проверять?

 

логин и пароль

 

Zveruga
Offline
Зарегистрирован: 29.09.2011

tip777 пишет:

на днях добил отправку sms

Через что шлете? GSM шилд или мобильный? Если мобильный, то как к нему подключаетесь и как шлете команды? А, если у вас езернет-шилд, то наверно по интернет смс отсылаете?

tip777
Offline
Зарегистрирован: 16.08.2011

Zveruga пишет:

tip777 пишет:

на днях добил отправку sms

Через что шлете? GSM шилд или мобильный? Если мобильный, то как к нему подключаетесь и как шлете команды? А, если у вас езернет-шилд, то наверно по интернет смс отсылаете?

GSM шилд,стандартные AT команды,

Zveruga
Offline
Зарегистрирован: 29.09.2011

А где брали и по чем, если не секрет. 

leshak
Offline
Зарегистрирован: 29.09.2011

 >>А что вы еще хотите проверять?

 

>логин и пароль

1. Вы можете это сами проверить (если заработало): наберите направильный логин и посмотрите "что будет".

2. Да, выше вам писали, что энкоженная строка, содержит в себе и логин и пароль (qqq:aaa). Следовательно в этом if вы проверяете и то и другое. Но есть "нюанс". Из-за такой "упрощенной проверки", логин становится "чувствительным" к большим-маленьким буквам. Кроме того, все пароли которые "начинается как ваш, но длиней его" - тоже будут подходить. То есть в данном примере подойдут пароли "aaa","aaa1","aaa12","aaab" и т.п.

Если это "напрягает", то прийдется-таки выискивать строку, обрезать (как писали выше), делать base64 декодинг и проверять логин/пароль уже "в открытом виде".

leshak
Offline
Зарегистрирован: 29.09.2011

 Хотя... если браузер после посылки энкоженного пароля вставляет перевод строки, то "более длинные пароли" не подойдут. Возможно я "перебдел" :)

axill
Offline
Зарегистрирован: 05.09.2011

tip777 пишет:

ничего загадочного ,уповляется свет,температура отопления,температура пола,кондиционер,ворота,калитка,температура улица дом полы и тд тп,на днях добил отправку sms, но не как не могу победить с логином и паролем 

интересная тема, что в качестве исполнительных устройств?

tip777
Offline
Зарегистрирован: 16.08.2011

axill пишет:

интересная тема, что в качестве исполнительных устройств?

arduino mega + GSM  отвечает за sms (сработка различных датчиков)

arduino mega + internet + lcd winstar 240x128 (упровление всем описанным выше)

arduino nano взамен родных мозгов кондиционера

ну и всякой мелочёвки с ebay (модуль на 16 релюх, eeprom,ds1302 и тд и тп)

tip777
Offline
Зарегистрирован: 16.08.2011

Zveruga пишет:

А где брали и по чем, если не секрет. 

http://jt5.ru/components/M04-FL/

вечером оплотил утром принесли домой

 

tip777
Offline
Зарегистрирован: 16.08.2011

Почему arduino не видет пароля,readString вывожу в com port все команды видны ,но когда отпровляю логи пароль 

в readString проходит только GET / HTTP/1.1 ?