標籤:郵箱 配置 message present portal 區分 文檔 地址 聲明
原創性聲明
此博文的出處 為 http://blog.csdn.net/zhujunxxxxx/article/details/25384909假設進行轉載請註明出處。本文作者原創,郵箱[email protected],如有問題請聯絡作者
步驟
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; } //加入心跳Tlog功能 /* 此處可擷取 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實現驗證流程