j同学前阵子有段时间在维护wifidog,然后就重复发明了个轮子:wifidogx。当然也不能算完全重复,j同学认为以下几方面wifidog做的不是很好:
- 多线程的架构欠佳,性能不强,健壮性也不好,坑还多。(LOCK_CLIENT_LIST,LOCK_CLIENT_LIST,LOCK_CLIENT_LIST,讨厌的事情也说三遍)。
- 通信协议过于简单,与服务端交互效率不高,服务端的远程控制能力也不好。
- 在已认证用户比较多的时候,对mac地址进行逐一规则匹配会降低路由器的包处理能力。不过j同学目前还没有实验数据。
- 不支持https。
- c语言开发效率低。虽然比j同学更懒的人不多,但是反复枯燥的交叉编译-远程复制-opkg install,即便是勤奋的你也会厌烦的。
wifidogx差不多克服了上面所有的缺点,来掰一掰吧:
- 单线程架构,采用epoll来支持并发。
- 采用新的认证通信协议。
- 提供以ipset的方式进行防火墙规则管理(需要6.22及以上版本,并且j同学目前还不知道怎么做流量统计)。
- 与认证服务器的通信支持https。
- 全部用lua开发。
- 以及一个小小的bonus: 支持简单的静态文件服务。
wifidogx目前处于alpha版本,可能bug还比较多,但是j同学会一直维护。另外,wifidogx采用MIT许可证。
下载,编译,运行
wifidogx依赖于j同学开发的一个基于lua的工具包[lask](https://github.com/spyderj-cn/lask)。 lask导出了常用的posix api,并提供了一个异步通信框架。下载
git clone https://github.com/spyderj-cn/wifidogx.git编译
Wifidogx中(只)包含了支持openwrt的makefile文件,将源码包放在某个src-link的的目录下即可。 同wifidog一样,wifidogx也在menuconfig的/Network/Captive Portals栏目下。本质上wifidogx不需要编译,其编译实际上是安装过程。
运行
启动
/etc/init.d/wifidogx start停止
/etc/init.d/wifidogx stop目前不支持restart哦
Wifidogx详细的启动参数
选项 | 含义 |
---|---|
-a | 认证路径,会覆盖配置文件中的AuthURL |
-c | 配置文件路径,默认为/etc/wifidogx.conf |
-f | 不要以守护进程的方式运行 |
-p | 日志路径 |
-l | 日志等级 |
-t | 测试配置文件是否正确 |
-I | 初始化防火墙规则后退出 |
-D | 销毁防火墙规则后退出 |
-h | 帮助信息 |
-v | 显示版本 |
wdxctl(对应wdctl)工具
命令 | 作用 |
---|---|
clients | 获取连接了wifi的用户信息 |
jclients | 获取连接了wifi的用户信息(json输出) |
logread | 当日志保存在wifidogx内存中时,读取日志 |
logcapture | 截获日志 |
start | wifidogx异常退出后,会将traceback和日志分别保存到/tmp/wifidogx.traceback和/tmp/wifidogx.logdump,然后执行wdxctl start。wdxctl start先尝试将错误信息文件POST到指定的bugreport_url,然后删除文件,接着执行/etc/init.d/wifidogx start。 |
可以修改wdxctl.lua的BUGREPORT_URL为你的服务器URL, 也可以设置为false或者nil来禁用此功能。
文件服务
wifidogx启动后检查/tmp/wifidogx-www是否存在,如果不存在则将/etc/wifidogx-www下的所有内容 复制到/tmp/wifidogx-www,并以/tmp/wifidogx-www为docroot开启文件服务。 如果来访的URL是“/wifidogx-static/*”格式则视其为请求静态文件。 当错误发生时,wifidogx自动回送/tmp/wifidogx-www目录下的以下文件文件名 | 错误原因 |
---|---|
netdown.htm | 外网不通 |
serverunreach.htm | 有外网但认证服务器连不上 |
servererror.htm | 服务器返回的数据不对 |
internalerror.htm | 路由器系统/wifidogx 内部错误,如arp表中根据来访的ip找不到mac |