安卓手机的强制门户没有弹出



我使用hostapd,dnsmasq和apache2在我的Raspberry Pi 3B +上通过强制门户实现wifi热点,在我实施这个项目之前,我从未接触过wifi网络。因此,我搜索了很多关于如何实现一个的帖子。

以下是我使用的配置:

/etc/apache/apache.conf:

# Apple
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^CaptiveNetworkSupport(.*)$ [NC]
RewriteCond %{HTTP_HOST} !^192.168.0.200$
RewriteRule ^(.*)$ http://192.168.0.200/index.html [L,R=302]
# Android
RedirectMatch 302 /generate_204 http://192.168.0.200/index.html
# All
RewriteCond %{REQUEST_URI} !=/index.html
RewriteRule ^(.*)$ http://192.168.0.200/index.html [L]
# 404 Redirect
ErrorDocument 404 http://192.168.0.200/index.html

/etc/dnsmasq.conf:

interface=wlan0
dhcp-range=192.168.0.201,192.168.0.210,255.255.255.0,24h
address=/#/192.168.0.200

我使用索尼H4133,华为RNE-22,Redmi Note3,三星Galaxy S8 +,三星Galaxy Tab S来测试门户。只有索尼像魅力一样工作。选项卡 S 可以弹出通知,但当我单击它时,它会将我发送到 google.com 而不是我的门户。而其他人甚至没有显示弹出窗口。

我检查了访问权限.log发现/generate_204 确实 302 重定向到我的页面并返回 200 代码。根据我的研究,除 204 以外的任何代码返回都应该显示弹出窗口,但为什么这里不是这样呢?

访问.log:

192.168.0.204 - - [04/Jan/2020:12:20:10 +0800] "GET /index.html HTTP/1.1" 200 899 "-" "MQ 3.3.8/3.0 (Android 6.0.1) Xiaomi Redmi Note 3"
192.168.0.204 - - [04/Jan/2020:12:20:11 +0800] "GET /generate_204 HTTP/1.1" 302 561 "-" "Dalvik/2.1.0 (Linux; U; Android 6.0.1; Redmi Note 3 MIUI/V10.2.1.0.MHOMIXM)"
192.168.0.204 - - [04/Jan/2020:12:20:15 +0800] "POST /getconfig HTTP/1.1" 302 531 "-" "Dalvik/2.1.0 (Linux; U; Android 6.0.1; Redmi Note 3 MIUI/V10.2.1.0.MHOMIXM)"
192.168.0.204 - - [04/Jan/2020:12:20:15 +0800] "GET /index.html HTTP/1.1" 200 862 "-" "Dalvik/2.1.0 (Linux; U; Android 6.0.1; Redmi Note 3 MIUI/V10.2.1.0.MHOMIXM)"
192.168.0.204 - - [04/Jan/2020:12:20:15 +0800] "POST /mistats/v2 HTTP/1.1" 302 531 "-" "Dalvik/2.1.0 (Linux; U; Android 6.0.1; Redmi Note 3 MIUI/V10.2.1.0.MHOMIXM)"
192.168.0.204 - - [04/Jan/2020:12:20:15 +0800] "GET /index.html HTTP/1.1" 200 862 "-" "Dalvik/2.1.0 (Linux; U; Android 6.0.1; Redmi Note 3 MIUI/V10.2.1.0.MHOMIXM)"
192.168.0.204 - - [04/Jan/2020:12:20:20 +0800] "POST /mistats/v2 HTTP/1.1" 302 531 "-" "Dalvik/2.1.0 (Linux; U; Android 6.0.1; Redmi Note 3 MIUI/V10.2.1.0.MHOMIXM)"
192.168.0.204 - - [04/Jan/2020:12:20:20 +0800] "GET /index.html HTTP/1.1" 200 862 "-" "Dalvik/2.1.0 (Linux; U; Android 6.0.1; Redmi Note 3 MIUI/V10.2.1.0.MHOMIXM)"

192.168.0.205 - - [04/Jan/2020:12:23:31 +0800] "GET /generate_204 HTTP/1.1" 302 570 "-" "Dalvik/2.1.0 (Linux; U; Android 8.0.0; RNE-L22 Build/HUAWEIRNE-L22)"
192.168.0.205 - - [04/Jan/2020:12:23:31 +0800] "GET /generate_204 HTTP/1.1" 302 560 "-" "Dalvik/2.1.0 (Linux; U; Android 8.0.0; RNE-L22 Build/HUAWEIRNE-L22)"
192.168.0.205 - - [04/Jan/2020:12:23:31 +0800] "GET /generate_204 HTTP/1.1" 302 560 "-" "Dalvik/2.1.0 (Linux; U; Android 8.0.0; RNE-L22 Build/HUAWEIRNE-L22)"
192.168.0.205 - - [04/Jan/2020:12:23:44 +0800] "GET /generate_204 HTTP/1.1" 302 570 "-" "Dalvik/2.1.0 (Linux; U; Android 8.0.0; RNE-L22 Build/HUAWEIRNE-L22)"
192.168.0.205 - - [04/Jan/2020:12:23:56 +0800] "GET /generate_204 HTTP/1.1" 302 570 "-" "Dalvik/2.1.0 (Linux; U; Android 8.0.0; RNE-L22 Build/HUAWEIRNE-L22)"
apache.conf

是你的问题。以另一种方式配置 Apache2。
每个操作系统都有自己不同的互联网访问检测方式。

机制基本上是这样的:

GET/POST http://x.com/bar.html
If bar.html == [expected content] > Open Internet
If bar.html != [expected content] > Captive Portal
If bar.html[status] != SUCCESS > No Network  

每个设备,以及Android不同的制造商,行为不同。例如,查看此列表:

xperia z5:
connectivitycheck.gstatic.com:80
clients3.google.com:80
---------------------
galaxy j3 2016:
172.217.21.14:80    connectivitycheck.android.com
---------------------
galaxy j7 2015:
172.16.98.10:80
connectivitycheck.gstatic.com:80
---------------------
galaxy note4:
nothing!
---------------------
ios 11:
captive.apple.com/hotspot-detect.html
---------------------
windows 10:
www.msftconnecttest.com

我建议为每个设备/制造商制作另一个 apache 配置文件。


在 apache 中为 android 创建一个目录

cd /var/www/html/
sudo mkdir android 

创建一个简单的索引.html文件,该文件将出现在Android设备的启动页面上。

在nano(或您喜欢的文本编辑器(中创建android.conf并复制以下代码以为Android设备创建"重定向规则"。

sudo nano /etc/apache2/sites-enabled/android.conf  

把这些行:

<VirtualHost *:80>
Servername connectivitycheck.gstatic.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/android
RedirectMatch 302 /generate_204 /index.html
ErrorLog ${APACHE_LOG_DIR}/android_error.log
CustomLog ${APACHE_LOG_DIR}/android_access.log combined
</VirtualHost>

保存文件并退出。

做。按照其他设备的过程进行操作。另外,请查看此链接以获取更多信息。

感谢@Orlando诺瓦斯罗德里格斯,确实将 dhcp 范围设置为 200.200.200.10/200.200.200.250 触发强制门户和一个弹出窗口说登录这个 wifi 我正在使用 dnsmasq,

--dhcp-range=200.200.200.10,200.200.200.250,255.255.255.0,8h

并重定向到托管强制门户页面的 apache 服务器 --address=/#/200.200.200.1

测试于:

•三星 j7 专业版 2019 安卓 9 dhcp-9

•三星 A70 2020 安卓 11 DHCP-11

•华为 p 智能 2019 DHCP-10

•安卓 4.4 奇巧 dhcp-5.5

我尝试了几个强制门户,但没有一个适用于三星设备。我使用 192.168.12.1 作为 IP 地址。

最后,经过多次测试,我找到了解决方案:您不能使用像 192.186.45.1 或我正在使用的 IP 地址。因此,我将 DNS 服务器 IP 地址设置为 200.200.200.1,并将 DHCP 服务器范围设置为 200.200.200.10 - 200.200.200.250。在这些更改之后,它在我测试的所有设备上都对我有用,甚至在三星Note 8上也是如此。

相关内容

  • 没有找到相关文章

最新更新