有没有办法在 windows 热点上实施强制门户?

Is there a way to implement captive portal on windows hotspot?

我正在寻找一种方法来为 windows 10 - 移动热点实施强制门户。这个想法是将连接到热点的所有设备重定向到网页。

我找到了这个 article,它在 linux 中展示了如何做到这一点。

但我一直未能找到 windows 的类似版本。类似 this 的帖子被证明是死胡同。

如果需要,我可以使用简单的 nginx 服务器向客户端提供 302 重定向响应,但不喜欢使用任何现有的实现强制门户的软件。

更新

我已使用变通方法在客户端(linux 笔记本电脑、android 设备等)上成功触发强制门户。

每当设备连接到热点时,它都会向一些预定义的网站发送请求,以检查 wifi 连接是否可以访问互联网。如果它收到 302 响应,它会生成强制门户 window.

所以我在 windows 机器上的主机文件中添加了以下条目。

127.0.0.1 clients3.google.com  #android
127.0.0.1 connectivitycheck.gstatic.com  #android
127.0.0.1 nmcheck.gnome.org  #ubuntu

然后这些请求将使用主机文件条目在本地解析并发送到 nginx 服务器,该服务器为所有 http 请求提供 302 重定向。

我在上面的 UPDATE 中提到的设置最终被调整到我想要的位置。我使用了 dnschef,一个开源的 dns 服务器,可以完美地用作命令行客户端。 接下来的步骤。

  1. 启动windows移动热点。

  2. 转到网络适配器 => Select 热点适配器 => 更改 IPv4 设置 => 将 127.0.0.1 设置为 DNS 服务器。

  3. 使用 --fakeip = 192.168.137.1
  4. 启动 dnschef
  5. 在 192.168.137.1 上启动一个 http 服务器,并对所有请求给予 302 重定向响应。

就是这样!每当设备连接到热点时,它都会尝试连接到任何一个用于确定互联网连接的预设网站。这些请求将由 dnschef 在本地解析到我们的 Nginx 服务器。 Nginx 服务器然后提供 302 重定向,触发客户端上的强制门户。

我使用 dnscrypt-proxy 尝试了类似的方法,它提供专门的 captive-portal 支持。因为,这只不过是 dns 伪装,有几种方法可以实现,对某些“connection-checking”域的请求被定向到本地网络服务器。

与接受的答案不同,我找到了一种更简单、更灵活的方法,即使用 windows 主机文件 ,而不使用任何 third-party dns 代理.我没有将 connection-checking 域与本地主机相关联,而是将它们映射到物理 wifi 接入点 IP 地址(即 192.168.137.1)。这会导致 wifi 客户端直接将其 connection-checking 请求发送到网络服务器,即本地 pc 上的 运行 并侦听端口 80 上的所有连接。

主机文件:

192.168.137.1       captive.apple.com               
192.168.137.1       clients3.google.com     
192.168.137.1       nmcheck.gnome.org       
192.168.137.1       connectivitycheck.gstatic.com   
192.168.137.1       connectivitycheck.android.com   
192.168.137.1       www.msftncsi.com                
192.168.137.1       dns.msftncsi.com                
192.168.137.1       www.msftconnecttest.com         
192.168.137.1       ipv6.msftconnecttest.com        
192.168.137.1       ipv4only.arpa                   

此网络服务器(在我的例子中是 asp.net 核心)将客户端重定向到登录页面,除非它们已经注册。在这种情况下,网络服务器可能会像“真实”服务器一样响应调用,这些服务器位于那些 connection-checking 域之后,以便不重定向已经成功登录的客户端。