openwrt也是个linux系统,原则上用前一篇linux里提供的源码也可以编译成功。
但是,因为在openwrt路由上,认证的方式有所区别,
调试了很多次,发现pap-passwd-hook等hook都没有执行,而且密码也不再从pap-secrept里获取,由openwrt自带的命令行直接提供。经过多次调试后,写了一个最最简单的版本。
#include#include #include #include "dialcrypt.h" char pppd_version[] = VERSION; void plugin_init(void) { info("plugin cumtdial init !! by (i@xujif.com)"); info("cumtdial : user:%s ;passwd ",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的):
文章来源: