【问题标题】:Captive portal - Apple devices not getting automatic browser popup强制门户 - Apple 设备没有自动弹出浏览器
【发布时间】:2017-05-10 16:21:41
【问题描述】:

我在 Ubiquity Unifi 基础架构上创建了一个自定义强制门户(外部托管,使用 PHP 制作)。一切正常,除了:

Apple 设备(OSX、iOS)在连接时不会通过强制门户获得通常的弹出窗口。

我的雇主要求这样做。有什么想法吗?

【问题讨论】:

  • 您使用的是内部托管控制器还是云控制器?什么环境? linux?视窗?版本?

标签: ios macos wifi captivenetwork captiveportal


【解决方案1】:

我根据:https://serverfault.com/questions/679393/captive-portal-popups-the-definitive-guide解决了我自己的问题

iOS 和 OSX 设备向 URL 发出请求以检测强制门户。规则如下:

  1. 获取/发布http://foo.com/bar.html
  2. 如果 bar.html == [预期内容] > 打开 Internet
  3. 如果 bar.html != [预期内容] > 强制门户
  4. 如果 bar.html[status] != SUCCESS > 无网络

但是,当用户第一次访问强制门户时,我使用 HTTP 标头重定向用户。这不属于上述任何规则,因此会阻止 Apple 设备检测到存在强制门户。

这是我的最终代码,它从热点提供的奇怪 URL 重定向到我的门户:

<?php
/* Trying to get Apple to show the WiFi popup */
if (!empty($_REQUEST['url']) && (strstr($_REQUEST['url'],'success.html') || strstr($_REQUEST['url'],'detect.html'))) {
    echo '
    Redirecting...
    <script type="text/javascript">
    window.location = "/index.html";
    </script>';
    exit;
}

header("Location:/index.html?". $_SERVER['QUERY_STRING']);

如您所见,Apple 设备需要看到一些实际内容,而不是重定向。

我还将 .php 文件扩展名重写为 .html。

希望这对其他人有所帮助。

【讨论】:

  • If bar.html != [expected content] &gt; Captive Portal: 预期的内容应该是什么?必须定义哪些内容才能使用 iOS 制作移动设备以识别强制门户?对我来说似乎有点模糊......我想知道iOS是否可以像Android一样工作,期待来自URL的204..
  • @ivanleoncz 你试过这个吗?似乎苹果需要一些内容(不管是什么),而不是没有正文的重定向。我会试试这个,因为我遇到了同样的问题。
  • 不@SandroAntonucci,我没有。实际上,我正在开发一个用 Python 编写的 CaptivePortal 项目,作为 Squid 的守卫。我才刚刚开始,但您可以跟踪进度,并且考虑到这个主题,我可能会创建一些方法。 github.com/ivanlmj/PyCaptive
  • 我可以确认这是可行的,对于 iOS 7,我也测试过它检查 captive.apple.com 中的随机 URL,您可以使用您的网络服务器进行 302 重写,以重定向与该主机的每个请求无缝连接到同一页面。 iOS 10 检查hotspot-detect.html
  • 我正在使用 iptables 拦截数据包并将其重定向到网络服务器的 IP 地址,但它不起作用。它适用于android、linux和windows。没有测试过其他移动操作系统,但肯定不适用于 ios。
猜你喜欢
  • 2013-07-30
  • 2016-04-01
  • 1970-01-01
  • 2014-06-02
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
相关资源
最近更新 更多