You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

树莓派Hostapd热点优化:实现自动跳转或Captive Portal引导访问本地站点

实现树莓派WiFi热点连接后自动跳转至本地站点

我来帮你搞定这个需求——让用户连上网后自动跳转到你的本地站点,完全不用手动输网址。核心就是利用移动设备自带的Captive Portal(强制门户)检测机制,设备连接新WiFi后会自动发送检测请求,我们拦截这些请求并重定向到你的目标站点就行,完全不用搞条款认证那一套。下面是具体步骤:

1. 配置dnsmasq拦截设备检测请求

几乎所有移动设备(安卓、苹果、Windows)连接新WiFi后,都会向特定域名发送网络连通性检测请求,我们要把这些域名解析到树莓派的热点IP,让设备的检测请求落到树莓派上。

编辑dnsmasq配置文件:

sudo nano /etc/dnsmasq.conf

添加以下内容(把192.168.4.1换成你的树莓派热点实际IP):

address=/connectivitycheck.gstatic.com/192.168.4.1
address=/www.msftconnecttest.com/192.168.4.1
address=/www.msftncsi.com/192.168.4.1

保存后重启dnsmasq生效:

sudo systemctl restart dnsmasq

2. 搭建HTTP服务处理重定向

我们需要一个简单的HTTP服务,把设备发来的检测请求直接重定向到你的本地站点http://examplepi.com。这里推荐用Nginx,稳定又省心:

安装Nginx

sudo apt update && sudo apt install nginx -y

配置重定向规则

编辑Nginx默认站点配置:

sudo nano /etc/nginx/sites-available/default

把默认的location /块替换成以下内容:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;

    # 处理所有常规请求
    location / {
        return 302 http://examplepi.com;
    }

    # 针对性处理苹果设备的检测路径
    location /hotspot-detect.html {
        return 302 http://examplepi.com;
    }

    # 针对性处理安卓设备的检测路径
    location /generate_204 {
        return 302 http://examplepi.com;
    }
}

保存后重启Nginx:

sudo systemctl restart nginx

备选:用Python快速搭建(适合测试)

如果不想装Nginx,也可以用Flask写个极简重定向服务:

from flask import Flask, redirect

app = Flask(__name__)

# 匹配所有设备的检测路径
@app.route('/')
@app.route('/generate_204')
@app.route('/hotspot-detect.html')
def redirect_to_target():
    return redirect('http://examplepi.com', code=302)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

先安装Flask:pip install flask,然后运行脚本即可。

3. 测试效果

用手机连接树莓派的WiFi热点:

  • 安卓设备通常会自动弹出浏览器,直接跳转到你的本地站点
  • 苹果设备会弹出「登录到网络」的提示框,点击后就会打开你的站点
  • Windows设备会在右下角弹出网络提示,点击后也会跳转

这样就完全简化了用户的操作步骤,连上网就直达你的站点了。

内容的提问来源于stack exchange,提问作者Ryan Bobrowski

火山引擎 最新活动