WIFIdog 协议分析与应用

WIFIdog 简单说就是用户在wifi环境下使用wifi交互登陆的方法

Wifidog Portal认证示例PHP脚本

wifi 路由推荐使用海蜘蛛 3.3 wifi营销固件

这里路由简称 AP

验证服务器简称 AUTH SERVSER

AP 请求是使用$_GET 方法传递数据给AUTH SERVSER

请求参数

下面的参数获取为简写

$stage = isset($_GET["stage"]) ? $_GET["stage"] : null;

$ip = isset($_GET["ip"]) ? $_GET["ip"] : null;

$mac = isset($_GET["mac"]) ? $_GET["mac"] : null;

$token = isset($_GET["token"]) ? $_GET["token"] : null;

$incoming = isset($_GET["incoming"]) ? $_GET["incoming"] : null;

$outgoing = isset($_GET["outgoing"]) ? $_GET["outgoing"] : null;

$gw_id = isset($_GET["gw_id"]) ? $_GET["gw_id"] : null;

实例

先介绍数据库的结构,我构建的数据库名是portal,表名是User,用于记录等录用用户的用户名、密码等的信息:

create database portal;

CREATE TABLE `User` (

`Username` varchar(255) NOT NULL,

`Password` text NOT NULL,

`Token` text,

`LoginTime` datetime DEFAULT NULL,

`Gw_address` text,

`Gw_port` text,

`Gw_id` text,

`Mac` text,

`Url` text,

PRIMARY KEY (`Username`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

首先介绍的是登陆脚本,即上一篇文章介绍的LoginScriptPathFragment配置项配置的脚本(详细介绍见上一篇文章)。

auth.php,主要用于认证服务器验证路由网关提交的token。

//首先获取URL传递过来的参数,包括stage、ip、mac、token、incoming、outgoing和gw_id.

$stage = isset($_GET["stage"]) ? $_GET["stage"] : null;

$ip = isset($_GET["ip"]) ? $_GET["ip"] : null;

$mac = isset($_GET["mac"]) ? $_GET["mac"] : null;

$token = isset($_GET["token"]) ? $_GET["token"] : null;

$incoming = isset($_GET["incoming"]) ? $_GET["incoming"] : null;

$outgoing = isset($_GET["outgoing"]) ? $_GET["outgoing"] : null;

$gw_id = isset($_GET["gw_id"]) ? $_GET["gw_id"] : null;

//mac和token是必需参数,不能为空,只有mac和token均不为空才有可能通过验证,缺失参数将不显示登录表单.

if(!empty($mac) && !empty($token)){

//mysql连接,相应的参数mysql_host、mysql_user和mysql_password需要换成你自己的参数.

$con = mysql_connect(‘mysql_host’, ‘mysql_user’, ‘mysql_password’);

//数据库连接失败,验证不通过.

if(!$con){

echo "Auth: 0";

}

else{

//选择mysql数据库,如果你的数据库名不是portal,请自行更改.

mysql_select_db(‘portal’, $con);

//用户登陆成功后,会把用户的参数(ip、mac和系统自动生成的token等)记录到数据库,系统主要通过mac识别用户,当然这种方式在大规模系统中可能存在漏洞.

$result = mysql_query("SELECT * FROM User WHERE Mac='".$mac."' AND Token='".$token."'");

//如果token匹配,验证通过,否则验证失败.

if(!empty($result) && mysql_num_rows($result) != 0){

echo "Auth: 1";

}

else{

echo "Auth: 0";

}

}

}

else{

echo "Auth: 0";

}

?>

接下来介绍的是登陆成功脚本,即上文介绍的PortalScriptPathFragment配置项配置的脚本(详细介绍见上一篇文章)。

portal.php,主要作用是告知用户登录成功,并跳转用户登录前访问的页面。

//告知用户登陆成功.

echo ‘登录成功’;

//认证前用户访问任意url,然后被重定向登录页面,session记录的是这个“任意url”.

$url = $_SESSION["url"];

//跳转到登陆前页面.

header("Location: ".$url);

?>

当然,这个脚本没有任何界面,为提升用户体验,你可以设计一个好的界面,显示登陆成功信息。

接下来介绍的是错误信息展示脚本,即上文介绍的MsgScriptPathFragment配置项配置的脚本,(详细介绍见上一篇文章)。

gw_message.php,主要作用是当认证过程出现错误的时候,向用户显示用户信息。

$message = null;

if(isset($_GET["message"])){

$message = $_GET["message"];

}

echo $message;

?>

脚本非常简单,错误信息就在message参数中,告知用户即可。当然这个错误信息是英文的,如有需要,可以做做翻译,以提升用户体验。这个脚本同样没有任何界面,需自行设计。

接下来介绍的是心跳脚本,即上文介绍的PingScriptPathFragment配置项配置的脚本,(详细介绍见上一篇文章)。

ping.php,其主要作用是路由确认认证服务器仍然存活,没有死机,另外一个功能是认证服务器可以收集路由的负载等的信息。路由器会定时访问这个脚本,脚本必须回复Pong,否则将认为认证服务器失效而出错。

echo ‘Pong’;

?>

最后介绍的是登陆脚本,即上文介绍的AuthScriptPathFragment配置项配置的脚本,(详细介绍见上一篇文章)。

login.php,主要作用是显示登录界面,用户登陆成功后,跳转到路由器网关的特定接口。

//获取url传递过来的参数

$gw_address = isset($_GET["gw_address"]) ? $_GET["gw_address"] : null;

$gw_port = isset($_GET["gw_port"]) ? $_GET["gw_port"] : null;

$gw_id = isset($_GET["gw_id"]) ? $_GET["gw_id"] : null;

$mac = isset(isset($_GET["mac"]) ? isset($_GET["mac"] : null;

$url = isset($_GET["url"]) ? $_GET["url"] : null;

//gw_address、gw_port、gw_id和mac是必需参数,缺少不能认证成功.

if(!empty($gw_address) && !empty($gw_port) && !empty($gw_id) && !empty($mac)){

//参数初始化

$post_username = null;

$post_password = null;

$error_message = null;

//如果用户提交用户名和密码,进行验证

if(isset($_POST["username"]) && isset($_POST["password"])){

$post_username = $_POST["username"];

$post_password = $_POST["password"];

//mysql数据库连接,相应的参数mysql_host、mysql_user和mysql_password需要换成你自己的参数.

$con = mysql_connect(‘mysql_host’, ‘mysql_user’, ‘mysql_password’);

//数据库连接失败,展示错误信息

if(!$con){

$error_message = "数据库连接错误!".mysql_error();

//login_view.php展示的是登陆表单(下文介绍),如有错误,展示错误信息.

include("login_view.php");

}

else{

//选择mysql数据库,如果你的数据库名不是portal,请自行更改.

mysql_select_db(‘portal’, $con);

//用户名和密码验证.

$result = mysql_query("SELECT * FROM User WHERE Username='".$post_username."' AND Password='".$post_password."'");

if(!empty($result) && mysql_num_rows($result) != 0){

//用户名和密码验证成功,生成随机token.

$token = "";

$pattern="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ";

for($i=0;$i<32;$i++){

$token .= $pattern{mt_rand(0,35)};

}

//把token等参数写入数据库,已被用于后续验证(上文提到的auth.php).

mysql_query("Update User SET Token='".$token."', LoginTime='".date("Y-m-d H:i:s")."', Gw_address='".$gw_address."', Gw_port='".$gw_port."', Gw_id='".$gw_id."', Mac='".$mac."', Url='".$url."' WHERE Username='".$post_username."'");

$error_message = mysql_error();

//把用户名和url存进session,以备后续使用.

session_start();

$_SESSION['username'] = $post_username;

$_SESSION['url'] = $url;

//登陆成功,跳转到路由网管指定的页面.

header("Location: http://".$gw_address.":".$gw_port."/wifidog/auth?token=".$token);

}

else{

//登录失败,显示错误信息.

$error_message = "用户名或密码错误!";

include("login_view.php");

}

}

}

else{

include("login_view.php");

}

}

?>

Login_view.php登陆表单。

Portal Login

">

Username

Password
本文由http://www.wifidog.pro/2015/02/06/wifidog%E5%88%86%E6%9E%90-1.html 整理编辑,转载请注明出处

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,159评论 22 257
  • sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息。 ======...
    wind_飘阅读 2,025评论 0 5
  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sq...
    xuningbo阅读 10,235评论 2 22
  • 我喜欢你,当你说要和我结婚的时候,一夜未眠,五味杂陈。怕你是因为感动而选择我,不是因为爱情。 从我第一眼看见你,就...
    裴扬阅读 210评论 0 0