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

Помогите разобраться с mDNS

pvvx

Активный участник сообщества
на windows mobile не ориентируюсь совсем, так-как данная платформа занимает очень малую часть рынка мобильных устройств.
А я не ориентируюсь на малый, постоянно меняющийся, рынок мобильных устройств для пользователей. Его заняли китайцы и ничего своего вы не предложите и не реализуете ниже их цен.
Проблем с включением одновременно NetBios и mDNS на устройствах не встречал.
 

vikmed87

New member
Почему же так категорично? Да, китайцы лидеры, тут спору нет. Но если идея свежа и востребована, почему бы и не попробовать?
 

pvvx

Активный участник сообщества
Почему же так категорично? Да, китайцы лидеры, тут спору нет. Но если идея свежа и востребована, почему бы и не попробовать?
Что пробовать? Включит NetBios? - Давно в web-сервере на ESP8266 он работает, уже более 2-х лет....

mDNS используется для связи с Arduino при прошивке через OTA в rtlDuino -Программирование модуля RTL00 из Arduino по WiFi.
 

vikmed87

New member
Попробовать реализовать свое устройство. А реализация NetBIOS - это последний костыль в данном проекте...
 

pvvx

Активный участник сообщества
Попробовать реализовать свое устройство. А реализация NetBIOS - это последний костыль в данном проекте...
Обращение к UDP в Arduino есть - приписать декодеровку имени и отсылку = пол часа. А вы всё ищите чужие примеры и требуете готового. Значит никаких "Попробовать реализовать свое устройство", а только продать чужое... :)
Замечаете нестыковку?
 

vikmed87

New member
UDP в Arduino есть, но как мне это поможет?
похоже недостаточное владение знаниями сетевых протоколов не позволяет мне понять необходимый мне алгоритм действий...
 

pvvx

Активный участник сообщества
Описание RFC дано. Почитать... Взять пример скетча SNTP, посмотреть и накалякать NetBIOS.
 

pvvx

Активный участник сообщества
Алго:

Открыть порт 137 UDP на прием 'от всех'.

При приеме желательно (но можно и скипнуть - пусть роутер думает о внешних сетях :) ) проверить по какому интерфейсу пришел запрос (от AP или от ST для возможности иметь разные имена и чтобы имена не лезли в другие подсети – инфо о текущем интерфейсе в netif). Сравнить запрашиваемое имя с именем текущего интерфейса и маской подсети. Если совпало, то подготовить UDP пакет для отправки с ip и отправить вопрошающему. Ели не совпало - ничего не делать.

При получении запроса нужен декодировщик имени. Он в хитром формате, но не сложном. NetBios имя всегда большими буквами и до 16-ти символов.

Пакет UDP (последовательность байтиков) запроса и ответа фиксирован и описан в RFC.
 
Последнее редактирование:

vikmed87

New member
туман рассеивается ))
получается из приложения на Android необходимо отправить бродкаст udp пакет всем в 137 порт, кто правильно ответил с тем и работаем?
или из приложения на Android обращаемся по имени устройства, а сетевые сервисы Android сами сформируют пакет, отправят и определят кому принадлежит это имя в данной сети?
 

pvvx

Активный участник сообщества
туман рассеивается ))
получается из приложения на Android необходимо отправить бродкаст udp пакет всем в 137 порт, кто правильно ответил с тем и работаем?
или из приложения на Android обращаемся по имени устройства, а сетевые сервисы Android сами сформируют пакет, отправят и определят кому принадлежит это имя в данной сети?
В Android-е есть штатный "драйвер" NetBios, так-же как и в linux системах. Нет только в Яблоке :)
 

vikmed87

New member
нашел библиотеку NetBIOS для ESP8266 Arduino IDE Arduino/libraries/ESP8266NetBIOS at master · esp8266/Arduino · GitHub
Взял пример из этой библиотеки:
Код:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266NetBIOS.h>

const char* ssid = "123123";
const char* password = "12312312";

ESP8266WebServer wwwserver(80);
String content;

static void handleRoot(void)
{
    content = F("<!DOCTYPE HTML>\n<html>Hello world from ESP8266");
    content += F("<p>");
    content += F("</html>");

    wwwserver.send(200, F("text/html"), content);
}

void setup()
{
    Serial.begin(115200);

    // Connect to WiFi network
    WiFi.begin(ssid, password);
    Serial.println("");

    // Wait for connection
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("");
    Serial.print("Connected to ");
    Serial.println(ssid);
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());


    wwwserver.on("/", handleRoot);
    wwwserver.begin();

    NBNS.begin("ESP");
}

void loop()
{
    wwwserver.handleClient();
}
ни с одной из доступных мне платформ по имени ESP я так и не смог достучаться до устройства...
Как пробовал:
1. из всех доступных мне систем (windows, iOS, linux mint, Android) в адресной строке браузера писал http://ESP, http://ESP., http://ESP.local, http://ESP:80, http://ESP.local:80
2. на Windows и Linux mint пробовал пинг на ESP, ESP., ESP.local - так-же безрезультатно....
 

pvvx

Активный участник сообщества
Код:
===== Enter Image 2 ====
interface 0 is initialized
interface 1 is initialized

Initializing WIFI ...
WIFI initialized

RTL8195A[Driver]: set ssid [*******]
RTL8195A[Driver]: start auth to **:**:**:**:**:**
RTL8195A[Driver]: auth success, start assoc
RTL8195A[Driver]: association success(res=2)
RTL8195A[Driver]: set pairwise key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4)
RTL8195A[Driver]: set group key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4) keyid:2
Interface 0 IP address : 192.168.1.122
NetBIOS init, interface 0: 'RTLWEB',  1: 'SRTL871X'
SSID: **********
IP Address: 192.168.1.122
signal strength (RSSI):-34 dBm
To see this page in action, open a browser to http://192.168.1.122 or http://rtlweb/
nbns: out 192.168.1.122, 'RTLWEB'

A client connected to this server :
[PORT]: 13256
[IP]:192.168.1.2

new client
GET / HTTP/1.1
Host: rtlweb
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4

client disonnected

A client connected to this server :
[PORT]: 13255
[IP]:192.168.1.2

new client
GET /favicon.ico HTTP/1.1
Host: rtlweb
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Accept: image/webp,image/*,*/*;q=0.8
Referer: http://rtlweb/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
DNT: 1

client disonnected

A client connected to this server :
[PORT]: 13254
[IP]:192.168.1.2

new client
GET /H HTTP/1.1
Host: rtlweb
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://rtlweb/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
DNT: 1

client disonnected
Главное:
NetBIOS init, interface 0: 'RTLWEB', 1: 'SRTL871X'
nbns: out 192.168.1.122, 'RTLWEB' --> ответ на запрос Эксплоррера http://rtlweb/
Host: rtlweb
Referer: http://rtlweb/ - в запросе Эксплоррера за страницей.


RtlDuino/SimpleServerWiFi.ino at master · pvvx/RtlDuino · GitHub :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Вложены исходники, если поправить includes, то пойдут на ESP8266.
Совместимость (эмуляция ESP8266 на RTL871x) за счет #include "rtl8195a/esp_comp.h"...
Вам надо будет поменять
#define NETBIOS_CODE_ATTR ICACHE_FLASH_ATTR
и все includes на :
#include "user_config.h"
#include "lwip/opt.h"
#include "netbios.h"

#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */

#include "lwip/udp.h"
#include "lwip/netif.h"

#include "c_types.h"
#include "user_interface.h"

Примерно так.
Объяснять дольше чем исправить и впихнуть мне в Arduino ESP8266, но я не буду этого делать. Сами учитесь...
 

Вложения

Последнее редактирование:

vikmed87

New member
УРА, товарищи!
NetBIOS работает, и windows велеколепно заходит по имени NetBIOS на 80 порт устройства.
Но осталась проблема с Android. Ведроид упорно не понимает куда ему идти с указанным именем....
 

vikmed87

New member
Кстати, заметил что Windows гараздо быстрее заходит на устройство с использованием NetBIOS чем по mDNS и bojour
 

pvvx

Активный участник сообщества
Кстати, заметил что Windows гараздо быстрее заходит на устройство с использованием NetBIOS чем по mDNS и bojour
Это смотря какой драйвер. :) Если писать на Arduino, как это сделано в ESP8266 - то всегда тормоз
Поставьте ещё SSDP драйвер... Сделаете нормальное полное подключение SD по 5 линиям данных SPI, телек в сети надет DLNA/UPNP и будет показывать... Но вроде ESP8266 не успеет гнать с SD нормальный поток... умер он давно...
 
Последнее редактирование:
Сверху Снизу