分类 默认分类 下的文章

Wifidog流程wifidog网关协议 V2结构

线程

主程序

  • 启用“status”或者“autheserv”线程
  • 等待状态线程在初始化网络和拒绝客户端之前,成功的下载配置
  • 一旦被初始化,等待连接到它的节点
  • 用以前的方法处理流量(访问登录页面…获取标识,用认证服务器测试标识,提供防火墙规则)

状态线程

  • 连接认证服务器并且每五分钟(默认)发送一次状态
  • Wiifdog uptime
  • System uptime
  • System free memory
  • System load average
  • System network interface list(ifconfig –a).(需要选择wifidog将要使用的接口)

http客户端线程
  当一个新的连接被初始化时,启用此线程。如果有80个人连接到认证服务器,同时就会有80个线程被启用。最好是有个threads pool,但99%的情况都没用,并且会花费很多时间在代码和调试上。

命令行的选项

用所需的数值设置:--auth Authserver’s hostname –lan LAN interface

当wifidog初始化他的config,它应该看到一些选项,如“这是连接登录页面的URL”…

  • 全球化宽带设置
  • 登录页面URL
  • 门户页面URL
  • 计时器

协议的JOSN
如何创建JOSN:

struct json_object *status_object = json_object_new_object();

json_object_object_add(status_object, "wifidog_version", json_object_new_string(VERSION));

json_object_object_add(status_object, "protocol_version", json_object_new_double(2.0));

json_object_object_add(status_object, "node_id", json_object_new_string(node_id));

json_object_object_add(status_object, "fetch_config", json_object_new_boolean(1));
       
struct json_object *node_status_object = json_object_new_object();

json_object_object_add(node_status_object, "wifidog_uptime", json_object_new_int(25));

json_object_object_add(node_status_object, "sys_uptime", json_object_new_int(get_sys_uptime()));

json_object_object_add(node_status_object, "sys_loadavg", json_object_new_double(get_sys_loadavg()));

json_object_object_add(node_status_object, "sys_memfree", json_object_new_int(get_sys_memfree()));

char * json = json_object_to_json_string(status_object);

回复了JOSN字符串

解析:

struct json_object * json_object = json_tokener_parse(the_string);

struct json_object * value_json_object = json_object_object_get(json_object, "node_id");

printf("%s\n", json_object_get_string(value_json_object));

这将在树结构的第一级检索“node_id”。

测试所需防火墙规则的运行(Linux)
这些命令行需要测试试我们所需的所有模块:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT

iptables -D INPUT -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 9999 -j REDIRECT --to-ports 2060

iptables -t nat -D PREROUTING -p tcp --dport 9999 -j REDIRECT --to-ports 2060

如果运行,我们可以继续操作。我确信还有许多尝试,但这只是个开始。

防火墙规则(Linux)
我们曾使用MARKs来标记流量是已知,未知或是在验证。
现在流量就简单的是已知或未知,指定拒绝规则应该被发送为“拒绝acl规则”。
我们应该尝试停止使用MARKs,因为我们只有255个。
这是我的经验,不全面但还是发布一下:

iptables -t filter -N wd_lan2wan

iptables -t filter -N wd_lan2wan_fromauth 

iptables -t filter -N wd_lan2wan_clients

iptables -t filter -N wd_lan2wan_defaults

iptables -t filter -N wd_incoming_stats

iptables -t filter -I FORWARD 1 -i LAN_INTERFACE -o WAN_INTERFACE -j wd_lan2wan

iptables -t filter -I FORWARD 1 -j wd_incoming_stats

iptables -t filter -A wd_lan2wan -j wd_lan2wan_clients

iptables -t filter -A wd_lan2wan -j wd_lan2wan_defaults

iptables -t nat -N wd_redirect

iptables -t nat -I PREROUTING 1 -j wd_redirect

iptables -t filter -A wd_lan2wan -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

iptables -t filter -A wd_lan2wan_defaults -p tcp --dport 53 -j ACCEPT

iptables -t filter -A wd_lan2wan_defaults -p udp --dport 53 -j ACCEPT

iptables -t filter -A wd_lan2wan_defaults -d AUTHSERV_HOSTNAME -j ACCEPT

iptables -t filter -A wd_lan2wan_defaults -j REJECT

iptables -t filter -A wd_incoming_stats -d 192.168.1.10 -j RETURN

iptables -t filter -A wd_lan2wan_clients -s 192.168.1.10 --match mac --mac-source 01:02:03:04:05:06 -j ACCEPT

iptables -t nat -I wd_redirect 1 -s 192.168.1.10 --match mac --mac-source 01:02:03:04:05 -j ACCEPT

我只添加一个规则来允许客户端,但我们需要计算出这些数据。如果我们能够有两个规则,这样会比较规整,但如果想避免使用REDIRECT规则的话,我们将要在相同的热点来MARK流量。我们能够做到,但需要像以前一样能够获得“magic number”MARK才行。

本文章由 http://www.wifidog.pro/2015/03/31/wifidog%E6%B5%81%E7%A8%8Bwifidog%E5%88%86%E6%9E%90.html 整理编辑,转载请注明出处

如何制作自定义wifidog认证页面

本文是新版的关于如何制作自定义认证页面的指南。此新版指南对制作自定义认证页面的方法做了很大的简化。认证的处理使用JavaScript进行了封装,用户无需再关心传入与传出的参数处理。同时,还支持用户使用自己的代码来自定义报错机制。

  • 尽管我们不推荐,但你依然可以参考旧版的指南来制作自定义认证页面。

你需要创建类似以下样例的页面作为自定义认证页面,并请阅读下面的“要点说明”:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<!-- 必须引入AuthPageScript.js -->
<script src="http://cp.wiwiz.com/as/AuthPageScript.js"></script>
<script>
/* 回调函数。“获取验证码”按钮按下后,将自动调用此函数。可根据code值自行改写该函数。 */
function WiwizSmsVerifyMsg(code) {
    if    (code == "-1") {
        alert("手机号码不可为空!");
    } else if(code == "0") {
        alert("验证码已通过短信发送至您的手机,请注意查收。然后请在认证页面输入验证码。");
    } else if(code == "1") {
        alert("该热点不允许进行手机号码验证。如有疑问请您联系热点管理员。");
    } else if(code == "2") {
        alert("该热点不允许进行手机号码验证。如有疑问请您联系热点管理员。");
    } else if(code == "3") {
        alert("该手机号码不允许进行验证。如有疑问请您联系热点管理员。");
    } else if(code == "4") {
        alert("手机号码验证过于频繁,请稍后再试。");
    } else if(code == "5") {
        alert("该手机号码进行验证次数已超过今日上限。");
    } else if(code == "6") {
        alert("热点认证服务已暂停,不可进行手机验证。");
    } else if(code == "7") {
        alert("该热点手机验证次数已超过配额。请联系热点管理员。");
    } else if(code == "8") {
        alert("请求已超时,请刷新认证页面。");
    } else if(code == "9") {
        alert("请使用上一次通过短信接收到的验证码。");
    } else if(code == "99") {
        alert("验证短信发送失败。请检查手机号码的有效性,或联系热点管理员。");
    } else if(code == "999") {
        alert("系统异常,验证短信发送失败。请联系热点管理员。");
    } else {
        alert("系统异常。请联系热点管理员。");
    }
}
/* 回调函数。“认证”按钮按下后,如报错将自动调用此函数。可根据code值自行改写该函数。 */
function WiwizAuthPageError(code) {
    if     (code == 1) {
        alert("您无法使用此网络,除非您认同此协议条款。");
    } else if(code == 2) {
        alert("请输入用户名。");
    } else if(code == 3) {
        alert("用户名或密码错误。");
    } else if(code == 4) {
        alert("电子招待券无效。");
    } else if(code == 5) {
        alert("超过该电子招待券的最大使用人数限制。");
    } else if(code == 6) {
        alert("超过最大在线用户数。");
    } else if(code == 7) {
        alert("请输入手机号码。");
    } else if(code == 8) {
        alert("热点已停用。");
    } else if(code == 32) {
        alert("账户存在异常,暂时锁定中。");
    } else if(code == 35) {
        alert("手机验证码错误或已超时。");
    } else if(code == 36) {
        alert("该手机号码不允许进行验证。如有疑问请您联系热点管理员。");
    } else if(code == 37) {
        alert("该手机号码进行验证次数已超过今日上限。");
    } else {
        alert("未知错误。错误码:"+ code);
    }
}
</script>
</head>
<body>
<form name="myform" id="myform" action="" method="post">
热点介绍文本<br>
使用协议与条款文本...... <br>
<!-- 以下各参数应根据热点的认证方式正确设置 -->
<!-- 参数: agree 代表认同协议 -->
<input name="agree" id="agree" type="checkbox" value="1"  />
<label for="agree">我认同协议</label>
<br>
<!-- 参数: username 代表用户名 -->
用户名:
<input name="username" id="username" type="text" value="" />
<br>
<!-- 参数: pswd 代表密码 -->
密码:
<input name="pswd" id="pswd" type="password" />
<br>
<!-- 参数: encrypt 代表是否对密码加密 -->
<input name="encrypt" id="encrypt" type="checkbox" value="1" checked /><label for="encrypt">加密密码</label>
<br>
<!-- 参数: voucher 代表电子招待券 -->
电子招待券:
<input name="voucher" id="voucher" type="text" />
<br>
<!-- 参数: phonenum 代表手机号码 -->
手机号码:
<input name="phonenum" id="phonenum" type="text" value="" />
<!-- 用于取得发送手机验证码短信的按钮,onclick事件必须调用WiwizSmsVerify()函数
    WiwizSmsVerify()参数说明:
    参数1(必须): 手机号码
    参数2(必须): HotSpot ID
 -->
<input type="button" value="获取验证码" onclick="WiwizSmsVerify(document.getElementById('phonenum').value, WiwizGetQueryParameter('gw_id'));" />
<br>
<!-- 参数: phonecode 代表手机验证码 -->
手机验证码:
<input name="phonecode" id="phonecode" type="text" value="" />
<br>

<!-- 参数: userstring 代表自定义追踪信息 -->
<input name="userstring" id="userstring" type="HIDDEN" value="" />

<!-- 用于开始触发认证的按钮,onclick事件必须调用WiwizStartAuth()函数 -->
<input type="button" name="login" value="   认证   " onclick="WiwizStartAuth();" />
<br>
<!-- 以下是一些非必须的可选链接 -->
<a href="#" onclick="window.open('http://cp.wiwiz.com/as/s/viewhotspot/?gw_id='+ WiwizGetQueryParameter('gw_id')); return false;">更多信息</a>
<a href="http://cp.wiwiz.com/as/s/register/" target="_blank">注册</a>
<a href="http://cp.wiwiz.com/as/s/remindpswd/" target="_blank">忘记密码?</a>
</form>
</body></html>

[要点说明]

  1. 页面HTML代码中必须通过script标签引入AuthPageScript.js。如果你使用的是“自定义认证页面HTML”(而不是“自定义认证页面URL”),那么它的路径应该是”/as/AuthPageScript.js”。
  2. 认证页面样式可自由定义。但用于认证的各表单域必须被包含。包含的用于认证的表单域应与设置热点时的认证规则一致。
  3. “获取验证码”按钮按下时,需调用WiwizSmsVerify()函数方可发送短信。调用后,系统将会自动调用WiwizSmsVerifyMsg()回调函数。用户可根据需要对函数内容由自由重写。
  4. “认证”按钮按下时,需调用WiwizStartAuth()函数方可进行认证。调用后,如有错误,系统将会自动调用WiwizAuthPageError()回调函数。用户可根据需要对函数内容由自由重写。如果没有错误,则自动调用函数WiwizBeforeAuthDone(),它也可以重写。最后,认证通过并跳转到“认证后页面”。

本文章由 http://www.wifidog.pro/2015/03/19/wifidog%E8%AE%A4%E8%AF%81%E9%A1%B5%E9%9D%A2%E5%88%B6%E4%BD%9C.html 整理编辑,转载请注明出处

wifidog安装wifidog疑难问题排查

1. 我将Wiwiz HotSpot Builder Utility安装到了DD-WRT设备,但是当我打开浏览器后没看到热点的认证页面,而是可以浏览任意网页。
可能的原因是:

  1. 你的DD-WRT版本并不包含Wifidog组件。
  2. 你的DD-WRT设备没有用WAN口接入Internet。
  3. 你的DD-WRT版本存在BUG,不兼容的设备,内核模块不完整或可用内存不足。

2. 我安装了Wiwiz HotSpot Builder Utility,但是显示的认证页面并不是我在Wiwiz Web面板设置的。
需要注意,在安装配置Wiwiz HotSpot Builder Utility的时候,一定要输入正确的Hotspot ID与User Name。否则,显示的热点认证页面将是默认的样例页面。

3. 我将Wiwiz HotSpot Builder Utility安装到了Linux计算机,并且用WiFi终端也能正常连接。但打开浏览器后却看不到认证页面。
如果你使用无线路由器作为AP,你需要禁用无线路由器上的DHCP与UPNP服务,并且你还需要在你的Linux计算机上正确配置并启动DHCP服务。

4. 我使用虚拟机方式安装的Wiwiz HotSpot Builder Utility,并且用WiFi终端也能正常连接。但打开浏览器后却不能打开任何网页。
可能的原因是,
你的宿主机与你的无线路由器之间并不是通过网线连接的;
你的VMWare软件没有正确的配置虚拟网络设置、没有建立可用的NAT虚拟网络,或错误的防火墙策略导致NAT网络不通等。请检查VMWare软件的相关设置;
也有可能是你的网络的其他设置或防火墙等因素导致DNS解析异常。你可尝试在重新安装设置Wiwiz HotSpot Builder Utility,并在指定DNS的步骤时指定第三方的DNS服务器地址,例如Google的8.8.8.8或您的ISP提供的DNS地址。
此外,请使用官方版本的VMWare软件。部分非官方版本可能会导致异常。

5. 如何禁用Wiwiz HotSpot Builder Utility?
如果你是在支持DD-WRT的设备上安装的,执行以下命令:
/jffs/usr/local/hsbuilder/hsbuilder_setup4dd-wrt.sh disable
然后重启DD-WRT设备。

如果你是在Linux计算机或虚拟机内安装的,执行以下命令:
/usr/local/hsbuilder/hsbuilder_setup.sh disable

6. 如何卸载Wiwiz HotSpot Builder Utility?
如果你是在支持DD-WRT的设备上安装的,执行以下命令:
/jffs/usr/local/hsbuilder/hsbuilder_setup4dd-wrt.sh -dest /jffs uninstall
然后重启DD-WRT设备。

如果你是在Linux计算机或虚拟机内安装的,执行以下命令:
/usr/local/hsbuilder/hsbuilder_setup.sh uninstall

7. 在DD-WRT中安装Wiwiz HotSpot Builder Utility时,当执行
“cd /jffs; tar -zxf /tmp/root/hsbuilder-util-latest-DD-WRT.tar.gz”后,遇到以下错误信息:
tar: can’t open ‘/tmp/root/hsbuilder-util-latest-DD-WRT.tar.gz’: No such file or directory

你可能没有将你的DD-WRT设备接入Internet,或暂时下载失败。请确认DD-WRT设备接入Internet后再次尝试。

8. 在DD-WRT中安装Wiwiz HotSpot Builder Utility时,当执行
“/jffs/usr/local/hsbuilder/hsbuilder_setup4dd-wrt.sh -dest /jffs setup”后,遇到以下错误信息:
-sh: /jffs/usr/local/hsbuilder/hsbuilder_setup4dd-wrt.sh: not found

你的DD-WRT不支持JFFS2,JFFS2分区的剩余空间不足,或者没有启用JFFS2支持。
请使用正确的DD-WRT版本以支持JFFFS2,启用它并确保JFFS2分区有足够的剩余空间。

9. 在DD-WRT/OpenWrt中成功安装了Wiwiz HotSpot Builder Utility,在终端访问网页会显示认证页面,但认证之后立即访问其他网页依然会再次显示认证页面,如此循环。
可能的原因是,你的DD-WRT/OpenWrt存在设置冲突(例如开启了自带的QOS功能)。或者,你使用的DD-WRT/OpenWrt固件版本存在BUG,不兼容的设备,内核模块不完整或可用内存不足等。

10. 用虚拟机安装了Wiwiz,最初一切正常,但有时会出现网页不能打开的情况,重启虚拟机依然无效,重启宿主机(物理机)才能恢复。
我们提供的虚拟机镜像是用VMWare程序创建的。默认设置下,其eth0网卡访问Internet依赖宿主机的VMWare NAT Service(Windows系统服务)。但是,部分版本的VMWare程序的VMWare NAT Service可能存在缺陷,导致Internet访问,尤其是DNS解析存在不稳定。一个解决建议是,可以定时重启用VMWare NAT Service。例如,通过添加Windows计划任务,定时执行以下内容的BAT文件:
net stop "VMWare NAT Service"
net start "VMWare NAT Service"

本文章由http://www.wifidog.pro/2015/03/19/wifidog%E5%AE%89%E8%A3%85%E9%97%AE%E9%A2%98%E8%A7%A3%E7%AD%94.html整理编辑,转载请注明出处

wifidog安装到OpenWrt固件的无线路由器HotSpot Builder Utility安装指南

1. 系统需求
硬件

  • 已安装了OpenWrt固件的无线路由器(典型的有Linksys WRT54G系列)

软件

  • Wifidog
    你可以尝试执行以下命令安装Wifidog:

    opkg update # Optional
    opkg install wifidog

将无线路由器接入Internet。
设置并启用无线网络,即,使用无线路由器创建一个可用的Access Point。

2. 在Web控制面板中创建热点
登录到Web控制面板,访问http://cp.wiwiz.com/as/
点击“我的热点”,在接下来的页面中点击“创建热点”。根据页面的提示完成各项设置,点击保存。
你将会看到你刚创建热点的Hotspot ID。记下它,接下来的步骤将会用到它。

3. 安装与设置HotSpot Builder Utility组件
将一台PC机连接至你的无线路由器,用SSH方式连接到无线路由器。执行以下命令:

cd; wget http://dl.wiwiz.com/hsbuilder-util-latest-OpenWrt.tar.gz
cd /; tar -zxf /root/hsbuilder-util-latest-OpenWrt.tar.gz
/usr/local/hsbuilder/hsbuilder_setup4openwrt.sh setup

然后按照提示完成设置。
特别地,你需要输入的Hotspot ID就是你在Web控制面板中创建的热点的Hotspot ID(不是热点的名称)。User Name是你在控制面板注册的用户名。

提示:
安装时你将会被提示输入External NIC 与 Internal NIC。External NIC 代表的是连接Internet的网络接口。Internal NIC 代表的是连接局域网的网络接口。如果你不确定,可以执行ifconfig命令,并从执行结果中找到它们。

现在,如果没有报错信息,那么安装已经完成了。

你可以使用一个Wi-Fi客户端(如带WLAN适配器的PC或者支持Wi-Fi的移动电话)测试一下你的热点:

  • 搜索可用Wi-Fi热点,并连接到你的热点。
  • 打开Web浏览器,输入任何一个HTTP开头的网址。如果你的热点的认证页面能够显示出来,就说明你的热点已经正常运转了。

本文章由 http://www.wifidog.pro/2015/03/19/wifidog%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97-1.html整理编辑,转载请注明出处