分类 wifidog源码 下的文章

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 整理编辑,转载请注明出处

wifidog在防火墙中的流程

1,iptables 的四链五表,这里就不多说了,自己可以参看相关资料。

2,wifidog在四链中的工作流程:

数据包---->mangle--->进入路由表前/
1)--->白名单MARK 01
2)--->认证的MAC,MARK 02
3)---->非认证不MARK ------>

-->nat--->进入路由表前-->
1)--目的IP是本地----放行
2)--目的IP非本地-----mark 02,mark 01--->放行
3)---无mark-->目的认证服务器--->放行
-->目的白名单--->放行
-->重定向80到2060

Filter----->非本地----
1)--->目的认证服务器--->放行
2)--->mark 254(黑名单)--->拦截
3)--->mark 01 02 ---->放行
4)--->非mark ---->只认过53 67 443端口

本文章由 http://www.wifidog.pro/2015/03/04/wifidog-%E9%98%B2%E7%81%AB%E5%A2%99%E6%B5%81%E7%A8%8B.html 整理编辑,转载请注明出处