分类 wifidog服务器 下的文章

wifidog报错: Auth server did NOT say pong!

在wifidog启动过程中,我们可能会经常看到这种log:
Auth server did NOT say pong!

这个debug信息是再告诉我们,wifidog的ping协议没有收到来自auth server 的pong 回应。
首先解释下什么是ping协议。这种协议是路由器用来告诉auth server 路由器当前的状态,协议格式:
http://auth_server/ping/?gw_id=xxx&sys_uptime=xxx&sys_memfree&sys_load=xxx&wifidog_uptime=xxx
gw_id是路由器的标识符,sys_uptime是路由器启动时间,sys_memfree是路由器的内存剩余,sys_load是系统负载,wifidog_uptime是wifidog启动时间,路由器将这些信息发送给auth server,server 回"Pong" 来表示server知道这台路由器还在工作。

下面是出现上述log的代码:

do {   
        FD_ZERO(&readfds);   
        FD_SET(sockfd, &readfds);   
        timeout.tv_sec = 30; /* XXX magic... 30 second */   
        timeout.tv_usec = 0;   
        nfds = sockfd + 1;   

        nfds = select(nfds, &readfds, NULL, NULL, &timeout);   

        if (nfds > 0) {   
            /** We don't have to use FD_ISSET() because there  
             *  was only one fd. */   
            numbytes = read(sockfd, request + totalbytes, MAX_BUF - (totalbytes + 1));   
            if (numbytes < 0) {   
                debug(LOG_ERR, "An error occurred while reading from auth server: %s", strerror(errno));   
                /* FIXME */   
                close(sockfd);   
                return;   
            }   
            else if (numbytes == 0) {   
                done = 1;   
            }   
            else {   
                totalbytes += numbytes;   
                debug(LOG_DEBUG, "Read %d bytes, total now %d", numbytes, totalbytes);   
            }   
        }
else if (nfds == 0) {   
            debug(LOG_ERR, "Timed out reading data via select() from auth server");   
            /* FIXME */   
            close(sockfd);   
            return;   
        }   
        else if (nfds < 0) {   
            debug(LOG_ERR, "Error reading data via select() from auth server: %s", strerror(errno));   
            /* FIXME */   
            close(sockfd);   
            return;   
        }   
    } while (!done);   
    close(sockfd);   

    debug(LOG_DEBUG, "Done reading reply, total %d bytes", totalbytes);   

    request[totalbytes] = '\0';   

    debug(LOG_DEBUG, "HTTP Response from Server: [%s]", request);   

    if (strstr(request, "Pong") == 0) {   
        debug(LOG_WARNING, "Auth server did NOT say pong!");   
        /* FIXME */   
    }   
    else {   
        debug(LOG_DEBUG, "Auth Server Says: Pong");   
    }

这段log 出现在wifidog 在接收server 的响应包里没有出现Pong字符串。

本文章由 http://www.wifidog.pro/2015/02/25/wifidog%E7%9A%84ping%E5%8D%8F%E8%AE%AE.html 整理编辑,转载请注明出处

编写自己的WifiDog认证服务器

次我使用的是php来编写auth_server服务器,因为这样比较简单。
1.首先是login.php

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

2.ping.php:

<?php  
echo "Pong";  
?>  

这里没有做额外的处理,只是简单地向wifidog回应一个Pong。
3.auth.php

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

if (!empty($_GET["token"]) && isset($_GET["token"])){
   &nbsp;//获取$result的过程//
    isValidate($result);
   &nbsp;//**后续处理**//
    return;
}
else if((!empty ($_GET["mac"])) && isset($_GET["mac"])){
   &nbsp;//**获取result*//
    $result = isSubscribeByMac($_GET["mac"]);
    isValidate($result);
    return;
}
else
{
    echo "Auth: 0";
}

// 输出是否合法.
function isValidate($result){
    if ($result == 1){
        echo "Auth: 1";
    }
    else {
        echo "Auth: 0";
    }
}
?>

这里根据一些参数来获取$result,从而决定是否允许认证。

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

搭建自己的wifidog认证服务器

本人刚刚开始研究这个,看到有很多人在求自建认证服务器,心得如下,实现 wifidog 4 个接口: portal,login,auth,ping (还有一个get_gw_message.php 的接口,可不用实现)
简单来说,就是路由器会以GET方式请求 你的服务器(加入了白名单) 以下四个地址:
http://认证服务器/路径/login
http://认证服务器/路径/auth
http://认证服务器/路径/ping
http://认证服务器/路径/portal

以下以php为例子,实现
( 我是写了一个rewrite , 把所有请求转发到了 index.php?q=,当然,你也可以每个请求建立一个文件夹下一个 index.php)

具体代码如下:

$q = $_GET['q'] ;
$q = explode('/',$q) ;
$q = $q[0] ;
$a = '' ;
if(!empty($q[1])) $a = $q[1] ;


if($q == 'portal'){
        print 'portal' ;
}

if($q == 'login'){
        print 'login' ;
        $gw_port = $_GET['gw_port']  ;
        $gw_address = $_GET['gw_address']  ;
        //token 自己生成一个
        print '<br /><a href="http://'.$gw_address.':'.$gw_port.'/wifidog/auth?token=789">login</a>' ;
}

if($q == 'auth'){
        $token =  $_GET['token']  ;
        if($token == '789') print "Auth: 1"; 
        else print "Auth: 0"; 
}



if($q == 'ping') print 'Pong' ;

如果你想看一下,路由器到底请求了你些什么,可以看日志或者自己加个写入

$time = date('YmdHis') ;
file_put_contents(dirname(__FILE__) . '/get_'.$q.'_'.$time.'.txt',var_export($_GET,true)) ;

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

DD-Wrt WiFiDog用自建服务器进行WEB认证

首先准备一台刷好DD-Wrt的路由器,进行基本的的联网配置,保证能够正确的连接上网,申请个WEB空间并绑定域名,然后可以安装配置wifidog了.
去WiFidog网站下载认证服务器网站文件,点Download,提示已启用新网址http://www.authpuppy.org,请这个网址下载,点Download,选择 authpuppy-1.0.0-stable.tgz (md5, sig)下载,把下载下来的文件解压,传到你申请的服务器的网站根目录,创建一个mysql或PostgreSQL数据库,建议用PostgreSQL,我用mysql安装没成功,在浏览器中打开http://你的域名/web,运行安装向导,点Let's Go开始,检查文件目录权限,点Next继续,Db type选择数据库类型,Db server填你的数据库地址默认localhost,Db name填你创建的数据库名称,Db username Dbpassword 填入你登陆的数据库用户名密码,然后继续会创建数据表,输入管理员账号密码,然后完成了,如果无法创建请检查数据库配置,认证服务器就安装完成了,下一步就可以配置了.

打开http://你的域名/web打开管理登陆页面,点Administrative login输入管理员账号登陆.Server configuration进行服务器配置,Site name填入服务器的名称,Main url填入一个链接,这个链接是认证页面logo所链接的页面,不是认证网关地址,Show administrative login link?显示管理登陆链接,Show network login link显示用户登录链接,Show node and connection information显示连接信息链接,Support link用户支持的链接,Support text用户支持信息,Logo选择网站logo图片,Email from给用户发送邮件的发件人,不填会影响用户自主注册的认证邮件发送,Name from发件人,Connection expiry登陆后连接超时时间,Available languages可用的语言列表,设置好后 save保存.

User创建管理管理员账号与客服账号
Manage nodes管理节点,new新建.然后新窗口打开路由器的管理页面,服务-热点,wifidog-启用

wifidog认证服务器        路由器            说明

Name                    Web服务器名        服务器名称

gw id                   网关ID            节点网关ID

Description                               节点描述         

Deployment status                         运行状态选ln planning

Address civic number等                    联系地址的信息

                        鉴权服务器主机名   你申请的域名 例yourdomain.com

                        鉴权服务器SSL启用  禁用

                        鉴权服务器HTTP端口 80

                        鉴权服务器路径     /web/    注意/

然后都保存应用

Manage plugins可以增加各种插件,以增加功能,View all available plugins and updates,显示所有插件,安装apAuthLocalUserPlugin 插件,并配置,可以进行免费注册账号认证上网

现在用路由器打开网址就会提示登陆,Signup for a free account创建用户账号,需要选择邮件验证,验证后可登陆上网

通过安装其他插件以实现认证上网.

本文章由 http://www.wifidog.pro/2015/02/09/wifidog-web-1.html 整理编辑,转载请注明出处