【问题标题】:How do I implement a simple Captive Portal with `http.server`?如何使用 `http.server` 实现一个简单的 Captive Portal?
【发布时间】:2017-10-06 13:23:15
【问题描述】:
我想提供一个 Captive Portal - 页面会提示用户在开始使用我的 Raspberry 上的 http.server 从我的无线网络(通过 WiFi)浏览网页之前同意某些条款运行最新版本 Raspbian 的 Pi。
我正在运行 http.server(Python3 附带),并且在 Pi 上本地有一个网页 portal.html。这是我希望用户在连接到我的 Pi 时被重定向到的页面。假设该页面的本地IP是192.168.1.5:80/portal.html
我的想法是,当他们连接并接受条款和条件后,我会以某种方式允许他们连接。
我该怎么做?
【问题讨论】:
标签:
python-3.x
networking
simplehttpserver
captivenetwork
captiveportal
【解决方案1】:
您需要制定相关文件,其中包含所有必要的条款和条件,将条件的接受与特定用户联系起来。您可以实现简单的登录,并将字符串(名称 - ID)链接到布尔值,例如“accepted = true”。如果您不需要存储用户数据,只需重定向yo您的文档以及选中“同意”时,请允许用户连接。
【解决方案2】:
所以“老式”强制门户(我相信)只会劫持未加密的 HTTP GET 请求并强制浏览器重定向到门户页面。虽然简单,但它也展示了不安全的 HTTP 是多么疯狂。
现在操作系统针对强制门户实施了更安全的机制。 RFC 7710 详细说明了确切的机制。还有一些特定于操作系统的要求,例如 OS X 要求http://captive.apple.com/hotspotdetect.html 是可访问的。您需要实现所有这些以重定向到您的页面。