nodogsplash认证之ndsctl工具

ndsctl是通过unix socket与nodogsplash之间通过socket来实现进程之间的通信。ndsctl的主要作用如下:
nodogsplash_1.png

其中上面的的参数中,具有操作功能的参数,主要是用来对特定的MAC和IP地址进行操作,操作的结果就是通过iptables建立不同的数据包过滤机制来达到对用户的访问控制。如下:

~ # ./ndsctl deauth 192.168.197.11
Client 192.168.197.11 deauthenticated.

nodogsplash_2.png

配置文件:
其配置文件为:nodogsplash.conf,其中有些很重的参数:目前我使用的有:

RedirectURL http://192.168.197.1/www/index.html  此配置参数说明在进行认证通过之后将要跳转的页面。
GatewayPort 9999 用来进行监听http清楚的socket端口
PasswordAuthentication yes Password 123 表示在进行认证的时候需要输入密码,密码为:123
UsernameAuthentication yes Username root 表示在进行认证的时候需要输入用户名,用户名为:root。
在代码中函数http_nodogsplash_check_userpass(request *r, t_auth_target *authtarget) 来完成对输入的用户名和密码

的验证工作,验证与否是与上面的参数的配置相关的,在代码中有如下的判断:

  if(!config->passwordauth && !config->usernameauth) {
    /* Not configured to use username/password check; can't fail. */
    return 1;
  }

当在配置文件中没有配置的时候,不进行验证。
同时还有一个比较重要的函数:

/* Allocate and return a pointer to a string that is the redirect URL. Caller must free.
 */
char* http_nodogsplash_make_redir(char* redirhost, char* redirpath) {
  s_config *config;
  char* redir;
  config = config_get_config();
  if(config->redirectURL) 
  {
  safe_asprintf(&redir,"%s?to=%s%s",config->redirectURL,redirhost,redirpath);
  debug(LOG_DEBUG,"Redirect request http://%s%s, substituting %s",redirhost,redirpath,config->redirectURL);
    printf("Redirect address:%s\n",redir);
//redir = safe_strdup(config->redirectURL);
  }
  else
  {
    /* We just assume protocol http; after all we caught the client by
       redirecting port 80 tcp packets
    */
    safe_asprintf(&redir,"http://%s%s",redirhost,redirpath);
debug(LOG_DEBUG,"http_nodogsp lash_make_redir:no define redirectURL in config, redir= %s ",redir);
  }
  return redir;
}

上面的代码仔细的看一下。

测试
当用户在PC2的浏览器中访问:http://192.168.100.244的时候,nodogsplash中的调试信息如下:
nodogsplash_3.png

上面的日志信息中,首先可以看到:nodogsplash收到了一个来自192.168.197.11的连接请求,同时从调试信息中可以看到192.168.197.11访问的request是:192.168.100.244。之后从/proc/net/arp中取出192.168.197.11对于的MAC地址。将其对于的ip地址和MAC添加到用户访问列表中来实现对此用户进行监控的目的。
上面serving splash page /etc/nodogsplash/htdocs/splash.html to 192.168.197.11的意思当访问192.168.100.244的时候将显示splash.html 。使用的图标为:/images/wifidog.png。
执行的效果如下;
nodogsplash_4.png

当点击上面的图标时,会自动跳转到:http://192.168.100.244。当IP:192.168.197.11第一次访问外网的时候,会让用户进行确认,确认之后在默认的时候之内,如果用户再次访问外网服务时,不会再次出现此确认窗口。
当执行下面的命令的时候:

~ # ./ndsctl deauth 192.168.197.11
Client 192.168.197.11 deauthenticated.

nodogsplash中的调试信息如下:
nodogsplash_5.png

从上面的信息可以看出,当执行ndsctl相关的命令时,ndsctl会与nodogsplash建立一个socket连接。当nodogsplash收到ndsctl的请求之后创建一个thread来处理此请求,上面出现了俩条iptables命令,
第一条:删除mangle表中的ndsOUT规则,就不再对满足192.168.197.11的数据包进行进行MARK操作。
第二条:不再accept ,192.168.197.11的数据包。]

本文章由 http://www.wifidog.pro/2015/04/22/nodogsplash%E8%AE%A4%E8%AF%81ndsctl.html 整理编辑,转载请注明出处

标签: nodogsplash认证, nodogsplash源码分析, nodogsplash原理