分类 源码分析 下的文章

wifidog一般常见问题(2)

问:它是如何运作的?
答:客户端守护进程通过防火墙规则来控制路由器的流量。当一个新用户试图打开一个网页,客户端将透明地将他们重定向至认证服务器以便登录或注册新用户。客户端和认证服务器将协商如何处理该上网用户和是否允许其访问网络。客户端每X分钟就向认证服务器发起请求,以便对其进行动态统计及资料更新,内容包括:正常运行时间,负载,上网用户的流量监测以及在/离线状态。

问:它是如何运行的?
答:客户端可在任何Linux机器中运行,但机器中需安装netfilter 以及iptables 。认证服务器运行于任何支持PHP的web服务器。

问:我可以在同一个Linux box中安装并运行Wifidog认证服务器和Wifidog网关吗?
答:可以。

问题:如果要使用Wifidog,我的系统必须要有无线网卡吗?还是只要有个无线路由器就可以?
回答:在网关运行的机器不需要无线网卡,但是对于每个无线客户端,Wifidog被设置在入口,网关必须被链接在第二层到以太网关接口处。实际上,无线路由器必须被用作是纯粹的接入点,只有将LAN端口(不是WAN端口)和在网关运行的机器的接口相联接才能实现。

问:我需要使用无线接入点吗?如果不使用无线接入点,我可以使用Wifidog无线路由器吗?
答:一些无线路由器做nat,这种情况会使从无线路由器中获取的MAC地址将客户端的MAC地址进行替换。如果产生这种问题,Wifidog的身份验证将失效,因为它依赖MAC地址去允许/不允许进入。

问题:我可以写自己的客户端吗?
回答:当然可以,但是为什么呢?我们已经完成了所有的工作。客户端已经用C语言写好,并且足够轻量级,这使得它在像Linksys WRT54G这样的嵌入式环境中都可以平稳运行。这个客户端是久经测试的,并且相当的稳定。它已被广泛用于ile Sans Fil部属的热点中。

问题:我可以写自己的认证服务器吗?
回答:重申一次,我们已经完成了所有的工作。但是如果你觉得我们所提供的不适合你的需求,并且你希望从头开始写你自己的服务器,整个系统中的客户端必须使用同一种协议。

问:Wifidog是什么样界面的?
答:客户端是在后台运行的守护进程。没有终端用户所关注的立即可视的用户界面,但它可以为管理员提供一个简单的命令行和基于网络的界面来查询状态。

问:我可以从哪里获取帮助?
答:如果你需要获取关于Wifidog安装的技术支持,你的信息需包括:
1)你的Wifidog客户端的版本(ipk 或者你自己编辑的版本)
2)配置安装(请删除默认配置)
3)Wifidog除错输出信息(命令:Wifidog-f-d 7)

问题:我可以使用Wifidog在运行无身份验证的热点运行吗?
回答:可以,只要将每个无身份验证的热点在网络设置页面中激活便可。

问题:我可以只运行Wifidog网关吗(没有认证服务器)?
回答:不可以,这不是Wifidog设计的初衷。你可以试试NoCatSplash,它是为此而设计的。

问题:Wifidog支持RADIUS,WISP或者WPA吗?
回答:目前Wifidog支持RADIUS用户认证和流量统计。

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

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