我通常不会寻求帮助,但是我已经在这个问题上困惑了好几天了——如果有人能给我一些指点的话我将非常感激。
我创建了一个 wifi 热点(强制门户/围墙花园) - 使用 Windows Server 2012、Unbound DNS 和 Apple Extreme 路由器。我运行了 IIS,它使用 URL 重写器处理重定向,并且一切对于 iOS 设备都很好。
我正在尝试让 Android 设备在加入 wifi 网络时显示弹出式 CNA 窗口。我通过 web.config 中的此规则执行此操作
<rule name="android rule" enabled="true" stopProcessing="false">
<match url="(.*)generate_204(.*)" />
<!-- <action type="Redirect" url="http://supplierfinder.ubm-com.net/WebPage.cshtml" appendQueryString="false" redirectType="Temporary" /> -->
<action type="Rewrite" url="WebPage.cshtml" appendQueryString="false" />
</rule>
我确信此重定向有效,并在设备连接到网络时提供页面。以下是日志条目
2015-09-05 19:06:48 W3SVC2 WIN-8CHVURO21ID 10.0.1.2 GET /generate_204 - 80 - 10.0.1.12 HTTP/1.1 Dalvik/1.6.0+(Linux;+U;+Android+4.4.2;+GT-N7100+Build/KOT49H) - - clients3.google.com 200 0 0 4143
正如你所见 - 我得到了 androidhttp://client32.google.com/generate_204请求进来了 - 我用 URL 重写响应一个有效页面(正在提供服务)200。我期望发生的是 Android 设备会再次执行请求 - 然后打开浏览器并显示页面。但这并没有发生。
我已经检查过围墙花园连接的 Android 源代码,据我所知,我返回的内容看起来是有效的......(下面是来自 Android 操作系统的源代码 - 请注意 204 逻辑)。
urlConnection.setReadTimeout(WALLED_GARDEN_SOCKET_TIMEOUT_MS);
urlConnection.setUseCaches(false);
urlConnection.getInputStream();
// We got a valid response, but not from the real google
return urlConnection.getResponseCode() != 204;
} catch (IOException e) {
if (DBG) {
log("Walled garden check - probably not a portal: exception " + e);
}
return false;
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
如果您能指出我做错的地方,我将非常感激。
设置为
Windows Server 2012 - 使用 Unbound DNS、带有 URL Rewrite 扩展的 IIS 8.5(已启用端口 80 上的 http)Airport Extreme 路由器上的 DHCP 服务器(因为我无法禁用它)
我的 DNS 如下所示
接口:0.0.0.0
访问控制:10.0.0.0/8 允许
local-zone: "." redirect
local-data: ". A 10.0.1.2"
我目前陷入了困境 - 在谷歌中搜索解决方案有点徒劳无功,因为每个人都使用第三方产品进行强制门户 - 我开始认为我也应该采取这种方法:)
感谢阅读...干杯
史蒂夫