wifidog用php實現驗證流程

來源:互聯網
上載者:User

1.首先簡單說說wifidog認證的過程

用戶端首次串連到wifi後,瀏覽器請求將會被重新導向到:

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

驗證通過後,用戶端被重新導向到網關,url格式如下:

http://網關地址:網關連接埠/wifidog/auth?token=xx,

wifidong會啟動一個線程周期性地報告每一個使用者的狀態資訊,並通過如下地址發送給證明伺服器:

auth_server:/auth/?stage=

ip=

mac=

token=

incoming=

outgoing=

證明伺服器根據該狀態資訊決定是否允許該使用者繼續串連,並回複網關,回複格式為:Auth:狀態代碼,

如: Auth:1

常用狀態代碼:

0:AUTH_DENIED,表示拒絕

1:AUTH_ALLOWED,驗證通過

驗證通過後,將重新導向到如下地址:

portal/?gw_id=%s

wifidog的ping協議:

wifidog通過ping協議將目前狀態資訊發送給證明伺服器,發送地址為:

http://auth_sever/ping/?

gw_id=%s

sys_uptime=%lu

sys_memfree=%u

sys_load=%.2f

wifidog_uptime=%lu

證明伺服器須返回一個“ Pong ”作為回應。

具體php實現代碼如下

public function auth(){    //響應用戶端的定時認證,可在此處做各種統計、計費等等    /*        wifidog 會通過這個介面傳遞串連用戶端的資訊,然後根據返回,對用戶端做開通、斷開等處理,具體傳回值可以看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時,被伺服器返回AUTH_VALIDATION_FAILED時,來到該處處理                //認證失敗,請重新認證                break;            case 'denied':                //auth的stage為login時,被伺服器返回AUTH_DENIED時,來到該處處理                //認證被拒                break;            case 'activate':                //auth的stage為login時,被伺服器返回AUTH_VALIDATION時,來到該處處理                //待啟用                break;            default:                break;        }    }else{            //不回顯任何資訊    }}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.