NodeMCU强制门户网站服务器响应HTTP,但不响应HTTPS

问题描述 投票:0回答:1

我正在建立一个基于this的强制门户网站。我的目标是让连接的任何人重定向并提供存储在ESP8266文件系统中的index.html页面,从中可以导航到类似存储的其他页面。该代码通过在名为“urls.txt”的文本文件中查找URL来区分外部站点和本地站点。一切正常,只要用户尝试访问纯http站点,但在尝试访问HTTPS站点时不会重定向用户。例如,尝试连接到“www.google.com”会失败,但“www.nerfha​​ven.com”会成功。

这是来自server.lua的一些代码:

srv=net.createServer(net.TCP) 
srv:listen(80,function(conn) 

   local rnrn=0
   local Status = 0
   local DataToGet = 0
   local method=""
   local url=""
   local vars=""

  conn:on("receive",function(conn,payload)

    if Status==0 then
        _, _, method, url, vars = string.find(payload, "([A-Z]+) /([^?]*)%??(.*) HTTP")
        -- print(method, url, vars)                          
    end

[...]

    conn:send("HTTP/1.1 200 OK\r\n\r\n")  

[...]

local foundmatch = 0    

    file.open("urls.txt", "r") 
    print("potato")
        for i = 108,1,-1 do
            line = file.readline()
            --print(line)
            if string.match(line, url) then
                foundmatch=1
                print("found " .. url)

            end
        end
        print("potato2")
        file.close()

[...]

  conn:on("sent",function(conn) 
  print("sending data")
    if DataToGet>=0 and method=="GET" then
        if file.open(url, "r") then            
            file.seek("set", DataToGet)
            local line=file.read(512)
            file.close()
            if line then
                conn:send(line)
                -- print ("sending:" .. DataToGet)
                DataToGet = DataToGet + 512    
                if (string.len(line)==512) then
                    return
                end
            end
        end        
    end

    conn:close() 
  end)
end)  

我认为这应该有效,因为我认为无法区分HTTP和HTTPS网站,其中任何一个都应该被简单地删除并替换为本地版本(index.html或urls.txt中的某些内容)。相反,它似乎根本没有发送任何回应。

https esp8266 nodemcu
1个回答
1
投票

您共享的代码仅侦听端口80 - HTTP端口。它无法响应HTTPS请求,因为HTTPS使用端口443。

首先,除了端口80之外,您还需要侦听端口443。

在端口443上打开连接后,您需要运行TLS(传输层安全性,“HTTPS”中的“S”)并协商安全连接,然后才能开始通过安全连接处理HTTP。

NodeMCU确实有一个TLS library,但它似乎只是作为客户端运行,而不是服务器,所以除非你能找到其他人这样做你自己在这里,这是一个很大的项目。

假设您正常工作,任何连接到“强制网络门户”的浏览器都会左右抛出SSL证书错误,因为您的服务器正在执行TLS旨在防止的行为 - 冒充其他网站。您将无法使用证书证明您是www.google.com,因此浏览器会强烈建议用户发生不良事件并且不应继续操作。

从根本上说,首先,你没有得到任何HTTPS答案的原因是你没有收听HTTPS端口。

© www.soinside.com 2019 - 2024. All rights reserved.