0

我正在尝试在小型嵌入式设备上实现强制门户。

据我了解,我需要的只是捕获对特殊 url 的智能手机请求并发送包含强制门户页面的响应。为了不维护所有可能的 URL 列表,我设置了一个 DNS,它将所有主机解析为我的设备 IP。

现在,当我将 android 设备连接到我的网络时,我会收到一个请求/generate_204并发送重定向响应。以下是 curl 命令的请求和响应示例:

curl -v http://google.com/generate_204 

*   Trying 192.168.1.1...
* Connected to google.com (192.168.1.1) port 80 (#0)
> GET /generate_204 HTTP/1.1
> Host: google.com
> User-Agent: curl/7.47.0
> Accept: */*
> 
< HTTP/1.1 302 Found
< Content-Type: text/html
< Content-Length: 0
< Location: /
< 
* Connection #0 to host google.com left intact

使用 Postman/Chrome 我被重定向到 192.168.1.1/ 并加载了所需的页面。但是我测试了 4 台安卓设备,只有一台向我展示了一个弹出窗口。ios也有同样的问题。/hotspot-detect.html我收到了一个返回与上述相同响应的请求,但什么也没发生。我在这里想念什么?

谢谢!

4

2 回答 2

0

我的理解是,如果您返回的不是强制专用门户测试站点返回的内容(即,如果是请求的 URI 或http://captive.apple.com ,则http://google.com/generate_204返回的内容) //hotspot-detect.html如果那是请求的 URI,则返回)然后将显示您返回的内容,即所谓的闪屏。返回这些 URL 所返回的内容应该会抑制启动屏幕,并让设备误以为它已连接到 Internet。

于 2019-04-22T02:06:07.643 回答
0

我找到了答案。重定向响应中的位置标头必须看起来不同。尤其是:

Location: http://192.168.1.1/

这解决了这个问题。

于 2019-04-25T15:09:10.507 回答