- 物联网开发系列:
- 物联网开发之旅① WiFi to Ethernet: 树莓派共享无线连接至有线网口,自动通过Captive Poartal验证
- 物联网开发番外篇之 Captive Portal验证原理
文章目录
- 工作原理
- 技术细节
- 登录页面的实现
- 自动化登录
登录界面的原理主要涉及到Web认证,即通过一个网页来验证用户的身份信息。这种方式通常用于公共WiFi网络,例如你在咖啡店、机场或酒店连接到WiFi时所遇到的。以下是这种登录界面如何进行用户认证的基本原理:
工作原理
-
初始连接:
- 用户连接到WiFi网络(例如
STGUEST
),并获取到一个IP地址。此时,用户能够访问本地网络但不能访问互联网。
- 用户连接到WiFi网络(例如
-
捕获门户(Captive Portal)检测:
- 当用户尝试打开任何网页时,网络设备会拦截请求并重定向到登录页面。这是通过一个技术叫做
DNS劫持
或HTTP重定向
实现的。
- 当用户尝试打开任何网页时,网络设备会拦截请求并重定向到登录页面。这是通过一个技术叫做
-
显示登录页面:
- 用户的浏览器会被重定向到一个特定的登录页面(例如
https://stguest.st.com
)。这个页面通常由网络设备或路由器托管。
- 用户的浏览器会被重定向到一个特定的登录页面(例如
-
提交登录信息:
- 用户在登录页面输入用户名和密码,并提交表单。表单数据通过HTTP POST请求发送到服务器(例如
https://stguest.st.com/login
)。
- 用户在登录页面输入用户名和密码,并提交表单。表单数据通过HTTP POST请求发送到服务器(例如
-
用户认证:
- 服务器接收表单数据,验证用户名和密码。这通常通过查询数据库或调用外部认证服务来完成。如果验证成功,服务器会记录用户设备的MAC地址或IP地址,并允许其访问互联网。
-
授予访问权限:
- 认证成功后,服务器更新网络设备的配置,允许该设备访问互联网。通常是通过更新网络设备的访问控制列表(ACL)来实现的。
-
访问互联网:
- 用户的设备现在可以访问互联网,浏览器会被重定向到原本请求的页面或一个默认的欢迎页面。
技术细节
-
DNS劫持:
当用户连接到WiFi网络并尝试访问一个网站时,网络设备会拦截DNS请求并返回登录页面的IP地址,而不是用户请求的网站的IP地址。 -
HTTP重定向:
如果用户访问的是HTTP网站,网络设备会拦截HTTP请求并返回302重定向响应,指向登录页面。 -
MAC地址认证:
认证成功后,网络设备会将用户设备的MAC地址添加到白名单中,允许其访问互联网。 -
会话管理:
为了跟踪已认证的用户,服务器通常会使用会话管理机制(如Cookie或Session)。这确保用户不需要在每次请求时都进行认证。
登录页面的实现
登录页面通常是一个简单的HTML表单,提交的表单数据通过HTTP POST请求发送到认证服务器。下面是一个简单的示例:
<!DOCTYPE html>
<html>
<head>
<title>WiFi Login</title>
</head>
<body>
<h2>Welcome</h2>
<form method="POST" action="https://[Login Domain]/login">
<label for="username">Username:</label>
<input type="text" id="username" name="username"><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password"><br><br>
<input type="hidden" name="buttonClicked" value="4">
<input type="hidden" name="redirect_url" value="">
<input type="hidden" name="err_flag" value="0">
<input type="hidden" name="info_flag" value="0">
<input type="hidden" name="info_msg" value="0">
<input type="submit" value="Sign on">
</form>
</body>
</html>
自动化登录
为了自动化这个过程,你可以编写一个脚本,模拟浏览器的行为,通过HTTP POST请求提交登录表单。这可以通过工具如curl
来实现:
#!/bin/bash
# 提交登录表单
curl -X POST https://[Login Domain]/login \
-d "username=your_username" \
-d "password=your_password" \
-d "buttonClicked=4" \
-d "redirect_url=" \
-d "err_flag=0" \
-d "info_flag=0" \
-d "info_msg=0"
通过了解登录界面的原理,可以更好地理解如何进行用户认证以及如何自动化这个过程。如果有任何进一步的问题或需要更多细节,欢迎在评论区进行讨论。