2015年3月

wifidog一般常见问题(1)

关于Wifidog 强制网络门户的一般问题

问:Wifidog 是什么?
答:Wifidog 是用来创建无线热点的软件。它是替代NoCat 的下一代产品。如果想了解更多相关细节和历史,请浏览Wifidog 主页。

问:谁开发了Wifidog?
答:ile Sans Fil 技术团队创建了Wifidog 项目。有一些人仍然参与其中,并且有来自世界各地的成员加入。

问:谁可以使用Wifidog?
答:在获得合法许可的前提下,任何人都可以使用Wifidog。这是一个GPL软件。实际上,我们都喜欢得到的答案是面向“每个人”,然而这是不现实的。Wifidog的主要目标用户是网络管理员,热点管理员和“知道他们在做什么的”黑客。可能产生的情况是一般终端用户不会受益,或者能够正确地设置和持续管理Wifidog安装。如果此软件曾得到一次完整的指向-点击缓解,使我们感觉到普通使用者能够进行安全管理,那么我们会将文件升级。

问:目前谁在使用Wifidog?
答:通过热点得知以下公司,组织,团队或个人正在使用Wifidog。

问:它能做什么?
答:1)强制网络门户可以使热点拥有者与使用者之间进行交流。
2)Wifidog网关是为GNU/Linux服务器和嵌入式linux设备而设计。例如:拥有OpenWRT的Linksys WRT54G。
3)支持多语种检索(通过浏览器检测或用户选择),能够使用PO Eeditor增加更多语种
4)通过Ping命令来检测网络活动用以维持用户(热点用户)联络,以此取代不科学的javascript脚本检测方式。这使得掌上电脑,手机和其它没有javascript 服务的设备可以进行联接。
5)可以为不同种类的热点提供服务
6)用户可以直接从任何热点建立一个工作帐号。新用户可以从任何热点进行登录,建立他们的帐号,并且允许确认邮件15分钟。如果他们不进行操作,他们将被断开联接并必须重新注册。
7)热点使用“双向心跳包”监测,所以中央服务器可以了解哪个热点/节点在线,不依赖动态DNS和防火墙等等。
8)可以生成自动节点。

问:它由什么组成?
答:它由两部分组成:
1)客户端是守护进程,它安装于每一个无线路由器
2)认证服务器是网络应用,它可安装于管理中心

问:它与NoCat之间有哪些不同?
答:它的客户端更小,没有过多对其他软件包的依赖,并且在嵌入式设备中运行良好。在认证服务器方面,可制定性更高,适合建设热点门户和社区。

本文章由 http://www.wifidog.pro/2015/03/05/wifidog%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98-1.html 整理编辑,转载请注明出处

wifidog编译后会生成几个文件?

在wifidog 的src 下grep main,发现有两个main 函数,getway.c里有个main, wdctl.c里也有个main 函数。

wifidog 整个编译出来是有两个执行文件:wifidog 和 wdctl。前者是wifidog 的主程序,用于认证;后者是用来控制wifidog 进程的,命令包括:
wdctl status, 读取wifidog 状态
wdctl stop,终止wifidog 进程执行
wdctl reset,将某个特定客户端从已认证客户端列表踢出
wdctl restart,重启wifidog

本文章由 http://www.wifidog.pro/2015/03/04/wifidog%E7%BC%96%E8%AF%91-2.html整理编辑,转载请注明出处

在wifidog的login参数中加入客户端MAC地址

用户在连接到需要认证的wifi上之后,会被wifidog 的login 协议重定向到:

http://auth_server/login/?gw_id=xxx&gw_address=xxx&gw_port=xxx&url=xxx

如果我们想添加一个mac 地址,该如何实现?
添加网关的MAC地址直接可以改成:

http://auth_server/login/?gw_id=xxx&gw_address=xxx&gw_mac=xxx&gw_port=xxx&url=xxx

网关的MAC 地址获取很简单用ioctl 就可以实现,这里不细说,另一种办法是直接在配置页面把网关MAC 配置进wifidog.conf,给全局变量config 添加一个字段成员即可,也很简单。

那么添加当前客户端的MAC 地址又该如何实现?
在http.c 文件里找到

  /* Re-direct them to auth server */
  char *urlFragment;
  safe_asprintf(&urlFragment, "%sgw_address=%s&gw_port=%d&gw_id=%s&url=%s",
         auth_server->authserv_login_script_path_fragment,
         config->gw_address,
         config->gw_port,
         config->gw_id,
         url);
   debug(LOG_INFO, "Captured %s requesting [%s] and re-directing them to login page", r->clientAddr, url);
   http_send_redirect_to_auth(r, urlFragment, "Redirect to login page");
   free(urlFragment);

lighttpd 已经帮我们拿到了r->clientAddr,这个其实就是当前客户端的IP 地址,然后我们通过读取arp 表/proc/net/arp 来查找r->clientAddr 对应的MAC,不过wifidog 已经有现成的函数arp_get直接得到MAC 地址,所以我们直接将上述代码修改成:

  /* Re-direct them to auth server */
  char *urlFragment;
  char *client_mac = arp_get(r->clientAddr);

  if(client_mac == NULL)
         return;

  safe_asprintf(&urlFragment, "%sgw_address=%s&gw_port=%d&client_mac=%s&gw_id=%s&url=%s",
         auth_server->authserv_login_script_path_fragment,
         config->gw_address,
         config->gw_port,
         config->gw_id,
         url);
   debug(LOG_INFO, "Captured %s requesting [%s] and re-directing them to login page", r->clientAddr, url);
   http_send_redirect_to_auth(r, urlFragment, "Redirect to login page");
   free(urlFragment);

本文章由 http://www.wifidog.pro/2015/03/04/wifidog-login%E6%B7%BB%E5%8A%A0%E5%AE%A2%E6%88%B7%E7%AB%AFmac%E5%9C%B0%E5%9D%80.html 整理编辑,转载请注明出处

wifidog 报错iptables failed

报错如下:
(fw_iptables.c:116) iptables command failed(1): iptables -t mangle -F WiFiDog_br-lan_Trusted
(fw_iptables.c:116) iptables command failed(1): iptables -t mangle -F WiFiDog_br-lan_Outgoing
(fw_iptables.c:116) iptables command failed(1): iptables -t mangle -F WiFiDog_br-lan_Incoming

这是在wifidog 刚启动时,firewall 规则重置出现的log,在函数fw_destroy 里出现,因为这时WiFiDog_br-lan_Trusted,WiFiDog_br-lan_Outgoing,WiFiDog_br-lan_Incoming规则链还没有建立,所以iptables 清空(-F)失败,这段错误并不会影响wifidog正常执行,所以不用特别在意这段错误。

本文章由 http://www.wifidog.pro/2015/03/04/wifidog-iptables%E6%8A%A5%E9%94%99.html 整理编辑,转载请注明出处