1.首先簡(jiǎn)單說說wifidog認(rèn)證的過程
客戶端首次連接到wifi后,瀏覽器請(qǐng)求將會(huì)被重定向到:
login/?gw_address=%s&gw_port=%d&gw_id=%s&url=%s
驗(yàn)證通過后,客戶端被重定向到網(wǎng)關(guān),url格式如下:
http://網(wǎng)關(guān)地址:網(wǎng)關(guān)端口/wifidog/auth?token=xx,
wifidong會(huì)啟動(dòng)一個(gè)線程周期性地報(bào)告每一個(gè)用戶的狀態(tài)信息肉拓,并通過如下地址發(fā)送給認(rèn)證服務(wù)器:
auth_server:/auth/?stage=
ip=
mac=
token=
incoming=
outgoing=
認(rèn)證服務(wù)器根據(jù)該狀態(tài)信息決定是否允許該用戶繼續(xù)連接御板,并回復(fù)網(wǎng)關(guān)茁肠,回復(fù)格式為:Auth:狀態(tài)碼季惩,
如: Auth:1
常用狀態(tài)碼:
0:AUTH_DENIED,表示拒絕
1:AUTH_ALLOWED掘剪,驗(yàn)證通過
驗(yàn)證通過后平委,將重定向到如下地址:
portal/?gw_id=%s
wifidog的ping協(xié)議:
wifidog通過ping協(xié)議將當(dāng)前狀態(tài)信息發(fā)送給認(rèn)證服務(wù)器,發(fā)送地址為:
http://auth_sever/ping/?
gw_id=%s
sys_uptime=%lu
sys_memfree=%u
sys_load=%.2f
wifidog_uptime=%lu
認(rèn)證服務(wù)器須返回一個(gè)“ Pong ”作為回應(yīng)夺谁。
具體php實(shí)現(xiàn)代碼如下
public function auth()
{
//響應(yīng)客戶端的定時(shí)認(rèn)證廉赔,可在此處做各種統(tǒng)計(jì)、計(jì)費(fèi)等等
/*
wifidog 會(huì)通過這個(gè)接口傳遞連接客戶端的信息匾鸥,然后根據(jù)返回蜡塌,對(duì)客戶端做開通、斷開等處理勿负,具體返回值可以看wifidog的文檔
wifidog主要提交如下參數(shù)
1.ip
2. mac
3. token(login頁面下發(fā)的token)
4.incoming 下載流量
5.outgoing 上傳流量
6.stage? 認(rèn)證階段馏艾,就兩種 login 和 counters
*/
$stage = $_GET['stage'] == 'counters'?'counters':'login';
if($stage == 'login')
{
//XXXX跳過login 階段的處理XXXX不能隨便跳過的
//默認(rèn)返回 允許
echo "Auth: 1";
}
else if($stage == 'counters')
{
//做一個(gè)簡(jiǎn)單的流量判斷驗(yàn)證,下載流量超值時(shí)奴愉,返回下線通知琅摩,否則保持在線
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(用戶郵件驗(yàn)證超時(shí),防火墻關(guān)閉該用戶)
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 (用戶郵件驗(yàn)證時(shí)锭硼,向用戶開放email)
-1 - AUTH_ERROR - An error occurred during the validation process
*/
}
public function portal()
{
/*
wifidog 帶過來的參數(shù) 如下
1. gw_id
*/
//重定到指定網(wǎng)站 或者 顯示splash廣告頁面
redirect('http://www.baidu.com', 'location', 302);
}
public function ping()
{
//url請(qǐng)求 "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));
//判斷各種參數(shù)是否為空
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提供的 如下參數(shù)
1.gw_id? 來自wifidog 配置文件中房资,用來區(qū)分不同的路由設(shè)備
2.sys_uptime 路由器的系統(tǒng)啟動(dòng)時(shí)間
3.sys_memfree 系統(tǒng)內(nèi)存使用百分比
4.wifidog_uptime wifidog持續(xù)運(yùn)行時(shí)間(這個(gè)數(shù)據(jù)經(jīng)常會(huì)有問題)
*/
//返回值
echo 'Pong';
}
/**
* wifidog 的gw_message 接口,信息提示頁面
*/
function gw_message()
{
if (isset($_REQUEST["message"])) {
switch ($_REQUEST["message"]) {
case 'failed_validation':
//auth的stage為login時(shí)账忘,被服務(wù)器返回AUTH_VALIDATION_FAILED時(shí)志膀,來到該處處理
//認(rèn)證失敗,請(qǐng)重新認(rèn)證
break;
case 'denied':
//auth的stage為login時(shí)鳖擒,被服務(wù)器返回AUTH_DENIED時(shí)溉浙,來到該處處理
//認(rèn)證被拒
break;
case 'activate':
//auth的stage為login時(shí),被服務(wù)器返回AUTH_VALIDATION時(shí)蒋荚,來到該處處理
//待激活
break;
default:
break;
}
}else{
//不回顯任何信息
}
}
本文由http://www.wifidog.pro/2015/01/21/wifidog-php.html?整理編輯戳稽,轉(zhuǎn)載請(qǐng)注明出處