我知道在机场,例如,我已连接到他们的AP,它会弹出一个浏览器窗口登录我的设备。是否可以使用lua中的NodeMCU,甚至使用c固件?
答案 0 :(得分:1)
这可以通过将连接客户端[通过DHCP]的DNS服务器设置为某种DNS代理来实现。它不需要是一个功能齐全的DNS服务器,它只需要能够为任何主机名查询返回静态DNS答案或将请求转发给真正的DNS服务器,以解决主机名像往常一样。
静态答案通过伪造DNS答案有效地劫持了DNS级别的Web请求,导致所有主机名解析为本地Web服务器的IP地址。该本地Web服务器忽略任何Uri详细信息,并为每个请求提供登录提示。它还必须维护已经过身份验证的客户端MAC地址列表。
NodeMCU确实有一个内置的DHCP服务器,作为其内置WiFi AP的一部分,但在ESP8266的有限内存中同时运行Web和DNS代理将是一个绝招。我认为其中两个协同工作,使用SPI总线进行接口可能是可行的......甚至可能有三个,一个致力于维护经过身份验证的MAC列表,使它们到期等等。
请注意,我在ESP 8266上完成的唯一部分是一些非常简单的Web服务器功能,因此它主要是理论。如果你尝试一下,我会非常有兴趣听到它。 : - )
答案 1 :(得分:1)
您可能想要尝试基于NodeMCU的CaptiveIntraweb项目(https://github.com/reischle/CaptiveIntraweb)。
在ESP8266社区论坛上还有一个讨论解决方案细节的线程(http://www.esp8266.com/viewtopic.php?f=32&t=3618)。