STABLE
$cat ./posts/2016/06-openwrt-uni-dynamic-adsl-password-autoconnect.mdx[BUFFER 1/1 - UTF-8]
RO_FD: 4● READY
DOC_ID #2758::BRANCH: main::COMMIT: git:16a5c83

校园网动态密码上网自动联网App

针对校园网每日需短信动态密码认证的问题,利用 OpenWRT 的 UCI 统一配置接口与 Shell CGI 脚本,配合 Android 端自动拦截短信并下发请求,实现路由器全自动联网方案。

AUTHOR
nimitzdev
TIMESTAMP
2016-06-19
COMMIT ID
git:16a5c83
READING TIME
2 min read
TAG MATRIX

我们学校电信开网需要购买一台手机,用来接收上网的密码,每天起床上网否要先发一个短信来获取密码,然后修改路由器的设置进行上网。

购买的手机是 Android 系统的,先前用的路由器是磊科的,磊科的路由器有个问题就是直接POST对应的URL就可以获取或者修改路由器的设置(漏洞/BUG)。所以开始的第一个版本就是直接将获取到的密码POST到对应的URL进行修改设置,达到自动联网的目的。

最近买了一个 OpenWRT 固件的路由器进行捣鼓,首先就是要解决这个自动联网的问题,要不然太麻烦了。毕竟 OpenWRT 不会像磊科这个一样吧。

翻看OpenWRT官网几天后发现,OpenWRT内置有一个统一配置接口叫 UCI (Unified Config Interface) ,可以直接命令行修改路由器的配置。SSH登陆到路由器之后测试一番,发现这个可行。

uciget

而且我们知道,OpenWRT管理器页面也相当于运行在一个服务器环境里面,可以注意到的是 luci 是个 CGI 程序,那我也可以写个 CGI 程序专门更改 PPPOE 的账号密码就可以了,现在只要解决怎么获取URL参数了,毕竟Android客户端获取到密码之后只要把密码搭在URL参数里面访问这个CGI程序就可以了。

这里有一篇文章介绍了 Shell 如何获取URL参数, 基本上原理就是通过 QUERY_STRING变量和 sed 指令提取出来

那么提取出参数之后,只要通过执行uci指令就可以达到修改设置的目的了,最后重启响应的服务,就完成了所有流程

CGI程序源码:https://github.com/NimitzDEV/iOpenWRT_PPPoE_FAST_SET

Android端程序源码:https://github.com/NimitzDEV/AutoConnectADSL (MASTER分支是给磊科用的,OpenWRT是给OpenWRT用的)

←cd ../posts (Return to Archive)
FILE: posts/2016/06-openwrt-uni-dynamic-adsl-password-autoconnect.mdx[EOF]