• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Делюсь опытом Nodemcu как модуль связи. Телеметрия, email.

view24

Member
Там хотя-бы CORS (OPTION Access-Control-Request/Allow-...) у HTTP сервера есть?

@view24 - Формат чисел и времени в javascript в double precision = 52 бита мантисса и время хранится в миллисекундах, что описывает точность до десятков микросек… Даже стандартная new Date(ms).toISOString() выдает ISO string c ms: YYYY-MM-DDThh:mm:ss.sssZ. Но у вас, в javascript на странице графиков, всё ограничено секундами. Самый простой Dygraph давно уже в 1 ms…

Какая современная телеметрия c дискретностью замеров от 1 секунды и более? Это называется случайная выборка...:(
Стоит ли учить телеметрии человека который работал у Богомолова А.Ф. ? В определении телеметрии о частоте съема ничего не говорится - зависит от задачи. Если придумаете более точное название моей специализированной прошивке, буду признателен. Даже вашим ( раз уж мы друг друга решили не уважать) именем, готов назвать. Например - "Пионер по жизни". Так что прошу на сайт прошивок http://bortx.ru
 

view24

Member
Костыль на ESP8266 - этож надо десяток костылей только к нему, чтобы он устойчиво работал. Да и какой WiFi у каждого устройства дома? Надо что-то потише в эфире и менее потребляющее... Хорошо то, что такого ныне валом - до NB-IoT... Да и китайских SoC развелось... Что имеет менее 32-х МБ встроенной SRAM/DDRAM с внутренней шиной не менее 32-х бит уже не рассматриваю, т.к. жрет имеющееся одинаково с ESP8266 (о ESP32 и разговор не идет - там за 500 mA по 3.3В !)
Нет, все-таки зря вы вернулись. У вас манера не сутью заниматься, а блеснуть эрудицией. Да еще учить того, кто вас об этом не просит.
 

pvvx

Активный участник сообщества
На картинке из первого поста есть место для proxy. Работать приходится по предприятиям, а там везде SQUID. Поначалу websocket хотел применить - облом. SQUID заголовок upgrade не пропускает. Пришлось через get решать с двумя портами и long polling, чтобы реакция на запрос была мгновенной. Так что, до ssl руки не дошли, но защита по паролю есть. Из той же формы видно.
Обычный случай использования:
Ваш сервер накапливает данные. У какого чада - малое устройство WiFi (пусть ESP8266) с маленьким web-сервером отдающим страницу со встройкой javascript.
Страница, у чада, исполняется на мобилке и запрашивает накопленные данные с вашего web. Пусть скриптом типа, с передачей пароля:
JavaScript:
function ajax_get(url, d) {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            console.log('response: ' + xhr.status);
            if (xhr.status == 200)  Load(xhr.response); 
            else console.error('XMLHttpRequest: response ' + xhr.status)}
        }
    };
    xhr.ontimeout = function() {console.error('XMLHttpRequest: timeout')};
    xhr.onerror = function () {console.error('XMLHttpRequest error!')};   
    if(window.location.protocol == 'file:') {
        xmlhttp.open("POST", 'http://web'+url, true);
        xmlhttp.setRequestHeader("Authorization", "Basic xxxxxxxxxxxxxxxxx=");
    } else 
        xmlhttp.open("POST", url, true);
    xhr.timeout = 4000;
    xhr.responseType = 'json';
    xhr.send(d);
}}
И т.к. XMLHttpRequest() с паролем (или для запуска HTML файла прямо с диска компа...), то эксплорер полезет с CORS запросами к вашему серверу...
 

pvvx

Активный участник сообщества
Нет, все-таки зря вы вернулись. У вас манера не сутью заниматься, а блеснуть эрудицией. Да еще учить того, кто вас об этом не просит.
Я не вернулся и не 'учить', а хотелось-бы узнать варианты решения разных вопросиков и как сделать попроще...
 

view24

Member
Обычный случай использования:
Ваш сервер накапливает данные. У какого чада - малое устройство WiFi (пусть ESP8266) с маленьким web-сервером отдающим страницу со встройкой javascript.
Страница, у чада, исполняется на мобилке и запрашивает накопленные данные с вашего web. Пусть скриптом типа, с передачей пароля:
JavaScript:
function ajax_get(url, d) {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            console.log('response: ' + xhr.status);
            if (xhr.status == 200)  Load(xhr.response);
            else console.error('XMLHttpRequest: response ' + xhr.status)}
        }
    };
    xhr.ontimeout = function() {console.error('XMLHttpRequest: timeout')};
    xhr.onerror = function () {console.error('XMLHttpRequest error!')};  
    if(window.location.protocol == 'file:') {
        xmlhttp.open("POST", 'http://web'+url, true);
        xmlhttp.setRequestHeader("Authorization", "Basic xxxxxxxxxxxxxxxxx=");
    } else
        xmlhttp.open("POST", url, true);
    xhr.timeout = 4000;
    xhr.responseType = 'json';
    xhr.send(d);
}}
И т.к. XMLHttpRequest() с паролем (или для запуска HTML файла прямо с диска компа...), то эксплорер полезет с CORS запросами к вашему серверу...
Если клиент с запросом к серверу 'лезет' на получение информации, то это нормально. А если клиент шлет команду на объект, то команда пройдет только при знании пароль.
 

pvvx

Активный участник сообщества
Можем эксперимент провести.
В скритпе опечатку от copy-paste строк с разных источников исправьте... xmlhttp->xhr.
XMLHttpRequest() по современной "безопасности" сначала запросит не GET или POST, а OPTION со всеми доп.заголовками и сервак должен ответить - разрешаю на каждый... А потом эксплорер двинется за самими данными с простым GET/POST...
 

view24

Member
В скритпе опечатку от copy-paste строк с разных источников исправьте... xmlhttp->xhr.
XMLHttpRequest() по современной "безопасности" сначала запросит не GET или POST, а OPTION со всеми доп.заголовками и сервак должен ответить - разрешаю на каждый... А потом эксплорер двинется за самими данными с простым GET/POST...
Я пользуюсь AJAX, и как AJAX XMLHttpRequest использует не вдавался в подробности.
 

pvvx

Активный участник сообщества
Я пользуюсь AJAX, и как AJAX XMLHttpRequest использует не вдавался в подробности.
Как описал, так и использует (CORS - при запросе на другой ресурс (!) или при запуске редактируемого http файла для отладки прямо из папки в эксплорере, без всяких web-серверов...).
Почему вопросы вам - т.к. задачи у нас схожие. Токо я сервер (с web и прочим) сбора информации от устройств делаю на малом дешевом SoC с потреблением до 200 мА и embedded linux, а не на монстрах... :)
 

view24

Member
Как описал, так и использует (CORS - при запросе на другой ресурс (!) или при запуске редактируемого http файла для отладки прямо из папки в эксплорере, без всяких web-серверов...).
Почему вопросы вам - т.к. задачи у нас схожие. Токо я сервер (с web и прочим) сбора информации от устройств делаю на малом дешевом SoC с потреблением до 200 мА и embedded linux, а не на монстрах... :)
А поконкретнее что за кристалл, чтобы удостовериться в стоимости?
 

pvvx

Активный участник сообщества
А поконкретнее что за кристалл, чтобы удостовериться в стоимости?
Один из самых дешевых для меня - MC200:
# dmesg
CPU revision is: 00019070 (MIPS 4KEc)
...
User-defined physical RAM map:
memory: 02000000 @ 00000000 (usable)
...
Primary instruction cache 16kB, VIPT, 4-way, linesize 16 bytes.
Primary data cache 16kB, 4-way, VIPT, no aliases, linesize 16 bytes
Memory: 29680k/32768k available (2076k kernel code, 3088k reserved, 340k data, 120k init, 0k highmem)
...
Calibrating delay loop... 511.18 BogoMIPS (lpj=2555904)
...
 

Алексей.

Active member
Так что, до ssl руки не дошли, но защита по паролю есть. Из той же формы видно.
С паролем то понятно, но без ssl можно попасть в такую ситуацию, когда провайдер или ещё кто либо, перехватывая http запросы/ответы может их подменять.
Это не потенциальная уязвимость, а реальность.
На прошлой неделе такое у меня случилось, когда с незащищенного соединения в одном из проектов я перенаправлял с http на https (типа отвечал 301 кодом с новым локэйшеном). Вдруг обнаружил что редирект не срабатывает, со смартфона броузером пытаюсь открыть страницу, а редиректят в другом направлении.
 

Алексей.

Active member
Работать приходится по предприятиям, а там везде SQUID
Что касается сквид-а, то используя ssl можете решить проблемы связанные с передачей заголовков, но только в том случае, если сквид не контролирует прозрачный tcp туннель, это можно сразу определить по подписанным сквидом сертификатов серверов.
 

view24

Member
С паролем то понятно, но без ssl можно попасть в такую ситуацию, когда провайдер или ещё кто либо, перехватывая http запросы/ответы может их подменять.
Это не потенциальная уязвимость, а реальность.
На прошлой неделе такое у меня случилось, когда с незащищенного соединения в одном из проектов я перенаправлял с http на https (типа отвечал 301 кодом с новым локэйшеном). Вдруг обнаружил что редирект не срабатывает, со смартфона броузером пытаюсь открыть страницу, а редиректят в другом направлении.
Это называется угон tcp/ip сессии. Это мы проходили. В принципе ничего сложного, но рядом с трафиком надо находится. А поскольку трафик идет через сервер провайдера, а он имеет доступ к сертификату, а может быть и сам автор сертификата, то ssl и tsl тоже не помогут. Кстати blynk тоже без ssl запросы принимает.
 

view24

Member
@Алексей. , я уже задавал похожие вопросы в теме https://esp8266.ru/forum/threads/zagruzhaem-proshivku-sputnik-i-esp-uzhe-v-internete.4172/ автору. Он вообще не считает это проблемой. Смешно и грустно, одновременно.
Хотя не ко мне обращаются, но все равно подтверждаю, что в данном случае проблему считаю надуманной. SSL проблему с WORM не решает. Желающие есть сломать мой трафик? Предлагаю пари.
 

view24

Member
Что касается сквид-а, то используя ssl можете решить проблемы связанные с передачей заголовков, но только в том случае, если сквид не контролирует прозрачный tcp туннель, это можно сразу определить по подписанным сквидом сертификатов серверов.
C вебсокетом я так ее и решил со сквидом , но беда в том, любая websocket библиотека для Arduino IDE подвешивает запрос на 400 ms.
 

Алексей.

Active member
А поскольку трафик идет через сервер провайдера, а он имеет доступ к сертификату, а может быть и сам автор сертификата, то ssl и tsl тоже не помогут.
Как это возможно? Сервис на домене bortx.ru работает у хостера, по гео-положению в Голландии, провайдер интернета в России, как он (провайдер) может иметь доступ сертификату, на котором будет переподписывать?
 
Сверху Снизу