我正在尝试在小型嵌入式设备上实施强制门户。
据我了解,我所需要的只是捕获智能手机对特殊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
使用邮递员/ Chrome,我被重定向到192.168.1.1/,并且所需页面已加载。但是我测试了4个android设备,只有一个显示了一个弹出窗口。 ios同样的问题。我捕获到一个请求,/hotspot-detect.html
返回了与上述相同的响应,但没有任何反应。我在这里想念什么?
谢谢!
答案 0 :(得分:0)
据我了解,如果您返回的不是专属于门户网站的特定测试站点返回的内容(即,http://google.com/generate_204返回的内容是请求的URI,或者http://captive.apple.com//hotspot-detect.html返回的内容是被请求的URI)。请求的URI),然后会显示您返回的内容,即所谓的启动屏幕。返回这些URL返回的内容应该可以抑制启动屏幕,并使设备误以为它已连接到Internet。
答案 1 :(得分:0)
我找到了答案。重定向响应中的位置标头必须看起来有所不同。特别是:
Location: http://192.168.1.1/
这解决了这个问题。