PHPでwifidog認証サーバーを書く

WBOY
リリース: 2016-06-23 13:24:54
オリジナル
1735 人が閲覧しました

ルーターの WiFidog 設定

主な設定 認証サーバーのホスト名 (ドメイン名または IP を使用できます) と 太字の認証サーバーのパス

ルーターは次の 4 つのアドレスを要求します:

http ://認証サーバー/パス/ログイン
http://認証サーバー/パス/auth
http://認証サーバー/パス/ping
http://認証サーバー/パス/ポータル
http://認証サーバー/ path/gw_message.php

そのため、リクエストごとにindex.phpの次のフォルダーを作成する必要があります

予備知識

クライアントが初めてWi-Fiに接続するとき、ブラウザリクエストはログインとパラメータの伝達にリダイレクトされます

login/?gw_address=router ip&gw_port=router wifidog port&gw_id=user id&url=リダイレクトされる前にユーザーが参照したアドレス

(2013 バージョンの wifidog にはさらに多くの mac パラメータがあります)

login/index.php に必要なものこれは、検証に合格した後にゲートウェイにリダイレクトすることを意味します:

http://gateway address:gateway port/wifidog/auth?token=

その後、wifidog はユーザーのステータスを定期的に報告するスレッドを開始します:

/auth? stage=&ip=&mac=&token=&incoming=&outcoming=

/auth/index.php は、ユーザーがインターネットサーフィンを続けることを許可するかどうかを返す必要があります。 応答形式は次のとおりです: Auth: status code ( 0: 拒否、1: 検証済み)

検証が成功した後、ルーターは /portal/?gw_id=%s

をリクエストします

/portal/index.php で、最初のリクエストの url パラメーターへのリダイレクトを記述するか、カスタム URL へのリダイレクト

/ping/index.php の機能は、認証サーバーがクラッシュしていないことをルーターに伝えることです。/gw_message/index.php の機能は、エラーが発生したときにユーザーにエラー メッセージを表示することです。 1. 1 つ目はリダイレクトです。初めてログインするとき、ユーザーがアクセスした URL は次のアドレスにリダイレクトされます:

/login/index.php

<?php//获取url传递过来的参数parse_str($_SERVER['QUERY_STRING'], $parseUrl);//gw_address、gw_port、gw_id是必需参数,缺少不能认证成功.if( !array_key_exists('gw_address', $parseUrl) || !array_key_exists('gw_port', $parseUrl) || !array_key_exists('gw_id', $parseUrl)){    exit;}//如果提交了账号密码if(isset($_POST['name']) && isset($_POST['password'])){    $username = $_POST['name'];    $password = $_POST['password'];    $db = new mysqli('localhost', 'root', '', 'test');    if(mysqli_connect_errno()){        echo mysqli_connect_error();        die;    }    $db->query("set names 'utf8'");    $result = $db->query("SELECT * FROM user WHERE username='{$username}' AND password='{$password}'");    if($result && $result->num_rows != 0){        //数据库验证成功        $token = '';        $pattern="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ";        for($i=0;$i<32;$i++)            $token .= $pattern[ rand(0,35) ];        //把token放到数据库,用于后续验证(auth/index.php)        $time = time();        $sql = "UPDATE user SET token='{$token}',logintime='{$time}'";        $db->query($sql);        $db->close();        //登陆成功,跳转到路由网管指定的页面.        $url = "http://{$parseUrl['gw_address']}:{$parseUrl['gw_port']}/wifidog/auth?token={$token}";        header("Location: ".$url);    }else{        //认证失败        //直接重定向本页 请求变成get        $url='http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"];        header("Location: ".$url);    }}else{    //get请求    //一个简单的表单页面    $html = <<< EOD    <html>        <head>            <title>portal login</title>        </head>        <body>            <form action="#" method="post">            username:<input type="text" name="username" />            password:<input type="password" name="password" />            <input type="submit" value="submit" />            </form>        </body>    </html>EOD;    echo $html;}
ログイン後にコピー

2.プロトコル:

/auth/?stage=% s&ip=%s&mac=%s&token=%s&incoming=%s&outcoming=%s

パラメータの説明:

stage: 認証段階、ログインとカウンターの 2 種類があります
token: によって発行されたトークンログイン ページ

受信: ダウンロード トラフィック

送信: アップロード トラフィック

/auth/index.php

<?php//获取url传递过来的参数parse_str($_SERVER['QUERY_STRING'], $parseUrl);//需要多少参数用户可自己顶if( !array_key_exists('token', $parseUrl) ){    //拒绝    echo "Auth:0";    exit;}$db = new mysqli('localhost', 'root', '', 'test');$db->query("set names 'utf8'");$token = $parseUrl['token'];$sql = "SELECT * FROM user WHERE token='{$token}'";$result = $db->query($sql);if($result && $result->num_rows != 0){    //token匹配,验证通过    echo "Auth:1";}else{    echo "Auth:0";}
ログイン後にコピー

3.Ping プロトコル

/ping/?gw_id=%s&sys_uptime=%lu&sys_memfree=%u&sys_load=%.2f&wifidog_uptime=%lu

wifidog は認証サーバーに情報を送信します。wifidog の現在の状況を報告するために、この情報は上記のリンクに示されているように、HTTP プロトコルを通じて送信されます。パラメーターはおそらく文字通りのものであり、私はそうではありません。認証サーバーとして、auth_server は「Pong」で応答する必要があります。

主な機能は、認証サーバーがまだ生きていてクラッシュしていないことを確認することです。もう 1 つの機能は、認証サーバーがルーティング負荷などの情報を収集できることです。ルーターは定期的にこのスクリプトにアクセスし、スクリプトは Pong に応答する必要があります。応答しないと、認証サーバーが無効であるとみなされ、エラーが発生します。

/ping/index.php

<?phpecho "Pong";?>
ログイン後にコピー

4. 認証成功後にジャンプ

portal/?gw_id=%s


認証が成功すると、wifidog はユーザーをこのページにリダイレクトします。

/portal/index.php

<?php//认证前用户访问任意url,然后被重定向登录页面,session记录的是这个“任意url”.$url = $_SESSION["url"];//如果login参数url保存到session中//跳转到登陆前页面.header("Location: ".$url);
ログイン後にコピー

5. 検証が失敗した場合は、失敗の理由に基づいて次のページにリダイレクトされます

gw_message.php?message=denied

gw_message.php?message=activate

gw_message.php ?message=failed_validation

/gw_message.php

うわー

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート