openwrt也是个linux系统,原则上用前一篇linux里提供的源码也可以编译成功。
但是,因为在openwrt路由上,认证的方式有所区别,
调试了很多次,发现pap-passwd-hook等hook都没有执行,而且密码也不再从pap-secrept里获取,由openwrt自带的命令行直接提供。经过多次调试后,写了一个最最简单的版本。
#include <stdio.h>
#include <string.h>
#include <pppd/pppd.h>
#include "dialcrypt.h"
char pppd_version[] = VERSION;
void plugin_init(void)
{
info("plugin cumtdial init !! by (i@xujif.com)");
info("cumtdial : user:%s ;passwd<hidden>",user);
char modefied_pwd[MAXSECRETLEN] = {0};
cumt_dial_get_entire_cipher(passwd,modefied_pwd);
strcpy(passwd,modefied_pwd);
info("cumtdial : modefied passwd success");
}直接在init里进行密码初始化,这样能认证成功。
但是理论上这有一个很严重的缺陷,因为密码只会计算一次,如果碰到网线拔出又重新插入等问题的话,因为pppd进程没有重启,而上一个密码又已经过期,会导致无法认证,所以,还是得想办法获得一个每次认证都会执行的hook进行modefied passwd。
不过暂时先用着吧,改天找到hook了再更新吧。
因为不同openwrt下pppd版本可能不同,所以提供源码下载(里面只有mips的静态库以供编译,没有mipsel的):router
文章来源:http://blog.xujif.com/archives/dial-helper-for-openwrt-pppd/