• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь DNS server LUA

kobb500

New member
Здравствуйте, пытаюсь сделать WEB сервер на NODEMCU LUA, хочу чтобы при подключении к устройству в режиме точки доступа можно было попадать на WEB страницу с любого адреса.
Прошивку скомпилировал и взял отсюда: NodeMCU custom builds
Нашел тему, где обсуждается это с примерами: AP + captive portal? · Issue #59 · nodemcu/nodemcu-firmware
Ну в общем перепробовал оттуда все варианты, когда начинаю использовать в своём коде DNS сервер, то при подключении клиента к моему устройства сразу же возникает ошибка и перезагрузка.
Кто-нибудь использовал локальный DNS сервер?
Буду рад пообщаться, кто уже реализовал в своем проекте это.
У меня пока не получается.
 

kobb500

New member
Привет ребята, не думал, что так быстро найдется решение, как оказалось, китайцы обновили свой проект и убрали оттуда что-то, я не стал разбираться, ошибка указывала все время на одну и ту-же строку в разных кодах.
В общем тему можно закрывать, но если интересно, то можно продолжить и поделится опытом.
Вот мои коды программы:
Код:
function startup()
    if file.open("init.lua") == nil then
      print("init.lua deleted")
    else
      print("Running")
      file.close("init.lua")
      dofile("dns.lua")
      dofile("web.lua")

    end
end

--init.lua
print("set up wifi mode")

wifi.setmode(wifi.SOFTAP)
--wifi.setphymode(wifi.PHYMODE_B)

cfg={}
cfg.ssid="NODEMCU"
cfg.pwd="12345678"
cfg.auth=wifi.WPA2_PSK
cfg.save=false
wifi.ap.config(cfg)

local mytimer = tmr.create()
mytimer:register(1000, tmr.ALARM_SINGLE, function()
    if wifi.ap.getip()== nil then
        print("IP unavaiable, Waiting...")
    else
        mytimer:stop()
        print("Config done, IP is "..wifi.ap.getip())
        print("You have 5 seconds to abort Startup")
        print("Waiting...")
        local mytimer1 = tmr.create()
        mytimer1:register(5000, tmr.ALARM_SINGLE,startup)
        mytimer1:start()
      
    end
end)
mytimer:start()

Код:
print("start DNS");
local dns_ip = "\192\168\4\1";

local s = net.createUDPSocket();
s:on("receive", function(con, req, port, ip)
    local ix = 13
    while req:byte(ix) > 0  do
        ix = ix + 1 + req:byte(ix)
    end

    if "\0\1" == req:sub(ix + 1, ix + 2) then
        local id, nr, query, check, class = struct.unpack("c2xxc2xxxxxxc"..(ix-12).."i2c2", req)
        if id then
            con:send(port, ip, id .. "\129\128" .. nr .. "\0\1\0\0\0\0" .. query .. "\0\1" ..
                                class .. "\192\12\0\1" .. class .. "\0\0\0\218\0\4" .. dns_ip)
        end
    end
end)

s:on("sent", function(con)
    con:close()
    con:listen(53)
end)

s:listen(53)

return s

Код:
print("start web")
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
  conn:on("receive",function(conn,payload)
    print(payload)
    conn:send("<h1> Hello, NodeMCU!!! </h1>")
  end)
  conn:on("sent",function(conn) conn:close() end)
end)
Как видно из кода, это всего лишь заготовка для какого-нибудь веб проекта на ESP8266
Надеюсь кому-то это сэкономит время.
 

blak soft

Member
добрый день понимаю что уже много времени прошло с момента написания последнего сообщения, но может кто нибудь еще отслеживает.
что бы не плодить темы хотелось бы задать вопрос
повторил данный проект скрипт dns принимает формирует ответы и отправляет ответы, а вот перехода на web страницу не происходит, хотя когда набираю 192.164.4.1 в адресной строке все работает что может быть не так
 

blak soft

Member
Вся проблема в том что сейчас все интернет страницы на https а это 443 порт и с шифрованием
Будем пробовать решать эту проблему о результатах напишу
 
Сверху Снизу