原创性声明

此博文的出处 为 http://blog.csdn.net/zhujunxxxxx/article/details/25384909假设进行转载请注明出处。本文作者原创,邮箱zhujunxxxxx@163.com,如有问题请联系作者

步骤

1.首先简单说说wifidog认证的过程

client首次连接到wifi后。浏览器请求将会被重定向到:

login/?gw_address=%s&gw_port=%d&gw_id=%s&url=%s

验证通过后,client被重定向到网关,url格式例如以下:

http://网关地址:网关port/wifidog/auth?token=

wifidong会启动一个线程周期性地报告每个用户的状态信息,并通过例如以下地址发送给认证

server:

auth_server:/auth/?stage=

ip=

mac=

token=

incoming=

outgoing=

认证server依据该状态信息决定是否同意该用户继续连接,并回复网关,回复格式为:Auth:状态码。

如:Auth:1

经常使用状态码:

0:AUTH_DENIED。表示拒绝

1:AUTH_ALLOWED,验证通过

验证通过后。将重定向到例如以下地址:

portal/?

gw_id=%s

wifidog的ping协议

wifidog通过ping协议将当前状态信息发送给认证server。发送地址为:

http://auth_sever/ping/?

gw_id=%s

sys_uptime=%lu

sys_memfree=%u

sys_load=%.2f

wifidog_uptime=%lu

认证server须返回一个“Pong”作为回应。

详细php实现代码例如以下

public function auth()
{
//响应client的定时认证,可在此处做各种统计、计费等等
/*
wifidog 会通过这个接口传递连接client的信息。然后依据返回。对client做开通、断开等处理,详细返回值能够看wifidog的文档
wifidog主要提交例如以下參数
1.ip
2. mac
3. token(login页面下发的token)
4.incoming 下载流量
5.outgoing 上传流量
6.stage 认证阶段,就两种 login 和 counters
*/ $stage = $_GET['stage'] == 'counters'? 'counters':'login';
if($stage == 'login')
{
//XXXX跳过login 阶段的处理XXXX不能随便跳过的
//默认返回 同意
echo "Auth: 1";
}
else if($stage == 'counters')
{ //做一个简单的流量推断验证,下载流量超值时,返回下线通知,否则保持在线
if(!empty($_GET['incoming']) and $_GET['incoming'] > 10000000)
{
echo "Auth: 0";
}else{
echo "Auth: 1\n";
}
}
else
echo "Auth: 0"; //其它情况都返回拒绝 /*
返回值:主要有这两种就够了
0 - 拒绝
1 - 放行 官方文档例如以下
0 - AUTH_DENIED - User firewall users are deleted and the user removed.
6 - AUTH_VALIDATION_FAILED - User email validation timeout has occured and user/firewall is deleted(用户邮件验证超时,防火墙关闭该用户)
1 - AUTH_ALLOWED - User was valid, add firewall rules if not present
5 - AUTH_VALIDATION - Permit user access to email to get validation email under default rules (用户邮件验证时,向用户开放email)
-1 - AUTH_ERROR - An error occurred during the validation process
*/
}
public function portal()
{
/*
wifidog 带过来的參数 例如以下
1. gw_id
*/
//重定到指定站点 或者 显示splash广告页面
redirect('http://www.baidu.com', 'location', 302); }
public function ping()
{
//url请求 "gw_id=$gw_id&sys_uptime=$sys_uptime&sys_memfree=$sys_memfree&sys_load=$sys_load&wifidog_uptime=$wifidog_uptime";
//log_message($this->config->item('MY_log_threshold'), __CLASS__.':'.__FUNCTION__.':'.debug_printarray($_GET)); //推断各种參数是否为空
if( !(isset($_GET['gw_id']) and isset($_GET['sys_uptime']) and isset($_GET['sys_memfree']) and isset($_GET['sys_load']) and isset($_GET['wifidog_uptime']) ) )
{
echo '{"error":"2"}';
return;
}
//加入心跳日志处理功能
/*
此处可获取 wififog提供的 例如以下參数
1.gw_id 来自wifidog 配置文件里,用来区分不同的路由设备
2.sys_uptime 路由器的系统启动时间
3.sys_memfree 系统内存使用百分比
4.wifidog_uptime wifidog持续执行时间(这个数据常常会有问题)
*/ //返回值
echo 'Pong';
}
/**
* wifidog 的gw_message 接口。信息提示页面
*/
function gw_message()
{
if (isset($_REQUEST["message"])) {
switch ($_REQUEST["message"]) {
case 'failed_validation':
//auth的stage为login时。被server返回AUTH_VALIDATION_FAILED时,来到该处处理
//认证失败。请又一次认证
break;
case 'denied':
//auth的stage为login时,被server返回AUTH_DENIED时。来到该处处理
//认证被拒
break;
case 'activate':
//auth的stage为login时,被server返回AUTH_VALIDATION时。来到该处处理
//待激活
break;
default:
break;
}
}else{
//不回显不论什么信息
}
}

wifidog用php实现验证流程的更多相关文章

  1. zabbix身份验证流程解析&绕过身份验证的方法

    由于实验室产品的监控模块的需求,需要绕过zabbix的验证模块,实现从二级平台到zabbix的无缝接入. 测试发现,zabbix的身份验证并不是想象的那么简单,为了实现功能,遂进行源码分析. zabb ...

  2. Spring Security 概念基础 验证流程

    Spring Security 概念基础 验证流程 认证&授权 认证:确定是否为合法用户 授权:分配角色权限(分配角色,分配资源) 认证管理器(Authentication Manager) ...

  3. 转 Web用户的身份验证及WebApi权限验证流程的设计和实现

    前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个功能复杂的业务应用系统,通过角色授权来控制用户访问,本文通过Form认证,Mvc的Controller基类及Action的权 ...

  4. 【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程

    [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本 ...

  5. Python 爬虫入门(四)—— 验证码上篇(主要讲述验证码验证流程,不含破解验证码)

    本篇主要讲述验证码的验证流程,包括如何验证码的实现.如何获取验证码.识别验证码(这篇是人来识别,机器识别放在下篇).发送验证码.同样以一个例子来说明.目标网址 http://icp.alexa.cn/ ...

  6. [置顶] Web用户的身份验证及WebApi权限验证流程的设计和实现 (不是Token驗證!!!不是Token驗證!!!都是基於用户身份的票据信息驗證!!!)

     转发 http://blog.csdn.net/besley/article/details/8516894 不是Token驗證!!!不是Token驗證!!!都是基於用户身份的票据信息驗證!!! [ ...

  7. Web用户的身份验证及WebApi权限验证流程的设计和实现 asp.net mvc AllowAnonymous 不起作用, asp.net mvc 匿名访问

    原文地址: https://blog.csdn.net/zjlovety/article/details/17095627 前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个 ...

  8. Form组件的验证流程及扩展(钩子)

    Form组件的验证流程及扩展(钩子) 常用的form class TestForm(Form): t1 = fields.CharField( widget=widgets.Textarea # 输入 ...

  9. Kerberos身份验证流程

    介绍:Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议.它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证. 在 Kerberos 认证中,最主要的问题是如何 ...

随机推荐

  1. Boostrap零散

    12 row 是核心控件 class="form-control" 弹窗口<input data-toggle="modal" data-target=& ...

  2. Java类和对象5

    写一个Java应用程序,该应用程序包括2个类:Print类和主类E.Print类里有一个方法output()功能是输出100 ~ 999之间的所有水仙花数(各位数字的立方和等于这个三位数本身,如: 3 ...

  3. 《剑指offer》栈的压入、弹出序列

    一.题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  4. SSL和SSH

    简单的来说:SSL是安全传输的一种安全协议,SSH只是在传输的时候为了防止"中间人"篡改数据而提供的安全的"通道" 在使用的时候我们只关心传输数据的安全性,那么 ...

  5. notepad++调用python3中文乱码

    使用notepad++,配置好快捷键调用python3,一切就绪,仿佛就差代码了,结果一使用, 中文乱码,一直没有好的解决办法. 最后只能在代码中增加一行重写向输出解决,示例如下: #!/usr/bi ...

  6. Maven 工程 POM.XML文件最全详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  7. 题解 P2504 【[HAOI2006]聪明的猴子】

    这道题要坑死人啊... 第一次做40分,其他RE,改了一次之后就变成20分了... 究其原因,是有一个数组(dis)开的太小了,于是最后本蒟蒻就随手开了个五百万,然后,就AC了. 看到有一篇题解说求距 ...

  8. 【Henu ACM Round#19 F】Dispute

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 这一题和这一题很像 (链接 ) 会发现如果a[i]!=b[i]那么就按下i就好了. 然后改变和他相邻的点. 此后a[i]再也不可能和 ...

  9. Java中发送http的get、post请求

    近期做项目中,须要把消息通过中间件的形式通过http请求的方式推送给第三方,因此用到了http协议,小编花费了一个多小时.对于http协议中的post和get请求,封装了一个工具类.以下与大家分享一下 ...

  10. 多client并发登录

    //LoginClient.java package mySocket; import java.io.BufferedReader; import java.io.InputStreamReader ...