分类 wifidog流程 下的文章

ddwrt+wifidog搭建热点认证系统(无线路由器web认证)

先来说说什么是热点认证系统,如果你有用过酒店或者机场的wifi,当你连上网络后试图去浏览某些页面的时候就会被从定向到一个特定的页面要求你登录啊什么的,是的,这就是热点登陆系统,可能也可以叫做wifi login portal。不管是什么,如果你理解了这概念,或者觉得有用,那么我们就来实际的搭建一下吧。

准备工作:
1、一个支持ddwrt的路由器,关于如何得到这个路由器以及那些是兼容的请上ddwrt官网自行搜索,个人比较推荐的是上淘宝买个二手的linksys wrt54g的路由器,一般这样的一个机器都有被改造过,扩充flash容量以便能安装完全版的ddwrt固件。所以下文将不会讲如何安装ddwrt固件,其实我只是自己也没安装过罢了。。

2、internet环境(其实不连应该也没什么关系,不过我没测试过)。首先有一点很重要的是,如果你把路由器只接个lan口当做交换机来用的话是无法成功的,所以这里我们必须在wan口上插根网线,并在设置里配置好二级路由,开启dhcp服务。

3、一台机器,通过lan口连接路由器,用来配置鉴权服务器。

准备完成后,举例配置如下:
ddwrt路由器 ip:192.168.11.1
鉴权服务器ip:192.168.11.128
就可以进行配置了。先配置服务器吧,wifidog官网上说使用了新的验证服务器authpuppy,于是就下载之,之后如果你想省去麻烦的php和mysql等等配置工作,建议直接使用xampp。
然后把解压的文件夹authpuppy扔到xampp默认的访问目录htdocs下,修改authpuppy部分目录的权限(详细的参看官网设置,这里就整个目录777了)。

开打浏览器输入localhost/authpuppy/web/后来到安装页面,根据要求安装就是了,这部应该没什么问题,需要你建立数据库就按照要求建个就是了,用户名则可以随便分配。
安装完之后用新建的管理员账号登陆,选择manage node,新建一个node,注意这里有个GW ID的设置,随便设个,但必须在路由器端的wifidog设置中也使用这个id,不然无法进行认证。到此为止鉴权服务器的简单功能应该算是配置完成了,之后加入复杂的功能等等则可以通过官网提供的插件和api或者自己看源码理解,可能我下次会说到,这里就不提了。

接着是路由器的配置,点开"服务"标签,二级标签选"热点",在里面会看到被禁用的狗狗,开启之,依下设置(图片稍后奉上):
网管ID,就是前面服务器设的那个GW ID
服务器名,随意了
下面一些默认不要动
鉴权服务器主机名,安装authpuppy服务器的ip地址192.168.11.128
SSL服务禁用
端口,还是看你服务器的配置,默认是80。
鉴权服务器路径,/authpuppy/web/
填写完成后按应用就可以了。这时候你可以登录到路由器上的wifidog看看dog是否正常工作。在浏览器中输入:192.168.11.1:2060/wifidog/status
状态如图(继续稍后。。。)就说明成功了,不过此时还有一部非常重要的事要做,那就是进入路由器管理菜单,重启路由器,之前一直由于这个原因搞了我很久。

测试,随便找个带wifi的电脑或手机,连上我们设的热点后,任意访问个页面,此时如果页面成功跳转了那么便大功告成,没有的话检测看看原因,一般如果wifidog状态正常的话是不会出问题的。
over~其实配置起来还是蛮简单的,关键还是在于后续的开发和管理上面。

本文章由 http://www.wifidog.pro/2014/12/12/ddwrt-wifidog%E8%AE%A4%E8%AF%81%E7%83%AD%E7%82%B9.html 整理编辑,转载请注明出处

编写自己的WifiDog认证服务器

使用的是php来编写auth_server服务器,因为这样比较简单。
1· 首先是login.php:
路由器协议:gw_address=%s&gw_port=%d&gw_id=%s&url=%s
gw_id 我这里使用的是路由器的MAC

<?php  
    include './tool/MySQLHelper.php';  
    if (!empty($_GET["gw_id"])){  
        $result = selectMacByToken($_GET["gw_id"]);  
        if (!empty($result)){  
            header("location: http://192.168.1.1:2060/wifidog/auth?token=".$result);  
        }  
        else {  
            header("location: http://xxxxx/WelcomePage.php?mac=".$_GET["gw_id"]);  
        }  
    }  
    else {  
        header("location: http://xxxxx/WelcomePage.php?mac=".$_GET["mac"]);  
   }  
?> 

2· 然后是 ping.php:
路由协议:http://auth_sever/ping/?gw_id=%s&sys_uptime=%lu&sys_memfree=%u&sys_load=%.2f&wifidog_uptime=%lu
这里没有做额外的处理,只是简单地向wifidog回应一个Pong

<?php
    echo "Pong";
?>

3· 接着是 auth.php:
路由协议:http://auth_server/auth/?stage=%s&ip=%s&mac=%s&token=%s&incoming=%s&outgoing=%s
这里根据一些参数来获取$result,从而决定是否允许认证

<?php
    if ($_GET["token"] == "123"){
         echo "Auth: 1";
        return;
    }

    if (!empty($_GET["token"]) && isset($_GET["token"])){
        isValidate($result);
        return;
    }
    else if((!empty ($_GET["mac"])) && isset($_GET["mac"])){
        $result = isSubscribeByMac($_GET["mac"]);
        isValidate($result);
        return;
    }
    else
    {
        echo "Auth: 0";
    }
    function isValidate($result){
        if ($result == 1){
            echo "Auth: 1";
        }
        else {
            echo "Auth: 0";
        }
    }
?>

本文章由 http://www.wifidog.pro/2014/12/11/WifiDog%E8%AE%A4%E8%AF%81%E6%9C%8D%E5%8A%A1%E5%99%A8.html 整理编辑,转载请注明出处

wifidog+authpuppy搭建web认证系统

authpuppy的安装配置可参考http://www.authpuppy.org/doc/Getting_Started, 除了部分细节,基本可完全按其成功配置。
同时需要安装mysql(数据库)和 Apache(http server).

附wifidog配置wifidog.conf:

GatewayID default
ExternalInterface pppoe-wan
GatewayInterface br-lan
AuthServer {
  Hostname 192.168.1.111
  HTTPPort 80
  Path /authpuppy/web/
}
HTTPDMaxConn 100
ClientTimeout 10
FirewallRuleSet global {
  FirewallRule allow to 123.150.205.139 #S
  FirewallRule allow to 125.39.111.239 #S
  FirewallRule allow to 42.121.98.148 #S
  FirewallRule allow to 74.117.62.156 #S
  FirewallRule allow to 74.117.62.157 #S
  FirewallRule allow to 8.8.8.8 #S
}
FirewallRuleSet validating-users {
  FirewallRule allow to 0.0.0.0/0
}
FirewallRuleSet known-users {
  FirewallRule allow to 0.0.0.0/0
}
FirewallRuleSet unknown-users {
  FirewallRule allow udp port 53
  FirewallRule allow tcp port 53
  FirewallRule allow udp port 67
  FirewallRule allow tcp port 67
  FirewallRule block udp port 8000
}

wifidog.conf字段的含义可参考http://dev.wifidog.org/browser/trunk/wifidog/wifidog.conf

本文章由 http://www.wifidog.pro/2014/12/11/wifidog-authpuppy-1.html 整理编辑,转载请注明出处

WifiDog 认证协议研究之 Auth Server

认证流程如下图:
QQ图片20141211141018.png

认证流程详解:
1.Login登录(参照 login/index.php)
服务器验证后,Redirect to GW,携带 token
http://$_REQUEST[gw_address]:$_REQUEST[gw_port]/wifidog/auth?token=$token
2.Validation of ID
服务器返回 Status
Auth: 1
Messages: | 认证信息(如错误之类的消息)
common.php中有如下定义:
/* Constant shared with the gateway

  • NEVER edit these, as they mush match the C code of the gateway */
    define('ACCOUNT_STATUS_ERROR', -1);
    define('ACCOUNT_STATUS_DENIED', 0);
    define('ACCOUNT_STATUS_ALLOWED', 1);
    define('ACCOUNT_STATUS_VALIDATION', 5);
    define('ACCOUNT_STATUS_VALIDATION_FAILED', 6);
    define('ACCOUNT_STATUS_LOCKED', 254);

auth.h中也有相应定义:

/** 
  * @brief Authentication codes returned by auth server. 
  * 
  * Authentication result codes returned by auth_server_request() corresponding 
 * to result code from the central server itself. 
*/  
typedef enum {  
    AUTH_ERROR = -1, /**< An error occured during the validation process*/  
    AUTH_DENIED = 0, /**< Client was denied by the auth server */  
    AUTH_ALLOWED = 1, /**< Client was granted access by the auth server */  
    AUTH_VALIDATION = 5, /**< A misnomer.  Client is in 15 min probation to validate his new account */  
    AUTH_VALIDATION_FAILED = 6, /**< Client had X minutes to validate account by email and didn't = too late */  
    AUTH_LOCKED = 254 /**< Account has been locked */  
} t_authcode;  

本文章由 http://www.wifidog.pro/2014/12/11/wifidog-%E5%8D%8F%E8%AE%AEauth-server.html整理编辑,转载请注明出处