V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
acess
V2EX  ›  Android

没有 Java 基础,想要自己撸一个 OpenWrt 自动拨号 APP,难度有多大?

  •  
  •   acess · 2015-11-03 02:11:54 +08:00 · 12324 次点击
    这是一个创建于 3338 天前的主题,其中的信息可能已经有所发展或是发生改变。
    LZ 非计算机相关专业大学生一枚,南京电信校园宽带用户。
    以前电信还不让用路由器分享网络。今年 10 月学校进行了一次网络改造,初步部署校园内网,电信宽带拨号方式也改了标准 PPPoE ,以前的天翼客户端被弃用了。我们试了路由器,现在也能正常使用了。

    但是电信搞了宽带绑定手机,需要发短信来获取 PPPoE 密码,有效期只有 6 小时。而且学校规定晚上是会定时断网的。
    (其实今年新办的套餐还必须装电信的 APP 才能拿到密码,发短信已经不行了)
    所以,想上网的话,就得先拿手机发短信 /打开电信的 APP ,获取密码,然后填到路由器上面(或者电脑的 PPPoE 拨号界面里)。
    虽然学校要求晚上断网,但实际上电信还开了公共 WiFi 热点,这个热点也可以用 PPPoE 拨号连上,晚上不会断线。只是无线感觉不是稳定,而且应该是有限速的,下载速度大概只有有线宽带( 60 元 /月套餐)速度的一半不到。
    总之,只要想在宿舍上网,每天都要手动获取密码、设置路由,实在是比较烦。而且, OpenWrt 的 LuCI 界面比较笨,操作起来很卡……(据说是内置闪存太慢导致的)所以 LZ 产生了这个想法。
    以前从同学手里拷到过一个旧版本破解路由配套的一键上网 APP ,但这个 APP 在电信送的手机上会崩溃,而且没有自动连接功能。
    第 1 条附言  ·  2015-11-03 12:30:49 +08:00
    好像我没表达清楚。我的需求就是在电信绑定的手机上自动发短信获取密码,然后自动设置 OpenWrt 拨号。
    电信还弄了一个 APP 来取代发短信获取密码(办套餐送的手机当然是 Android 咯),我觉得这个我大概是搞不定的,但发短信、设置路由应该不难做吧。
    24 条回复    2015-11-05 09:12:33 +08:00
    yeyeye
        1
    yeyeye  
       2015-11-03 08:05:54 +08:00
    先抓包把协议研究出来,然后模拟请求, Openwrt 能用 JAVA ?好像一般都是 bash 脚本吧
    crazycen
        2
    crazycen  
       2015-11-03 08:13:03 +08:00 via Android
    如果是 java 写的, luci 没 2g 内存跑不起来!
    andyhuzhill
        3
    andyhuzhill  
       2015-11-03 08:34:38 +08:00
    Openwrt  一般不是用C的么?
    sandideas
        4
    sandideas  
       2015-11-03 08:47:33 +08:00 via iPhone
    我的思路应该会是读取短信,正则出验证码,然后脚本拨号。。。
    arens
        5
    arens  
       2015-11-03 09:02:19 +08:00
    什么学校,必须用电信校园宽带吗?
    Troevil
        6
    Troevil  
       2015-11-03 09:06:42 +08:00
    重写 pppd 需要的是 c 不是 java ,java 要写起来那得花大代价
    Cavolo
        7
    Cavolo  
       2015-11-03 09:06:57 +08:00 via Android
    居然不是闪迅,你就高兴吧
    neo2015
        8
    neo2015  
       2015-11-03 09:07:39 +08:00
    openwrt 用 java 吗?一般不是 shell 和 lua 吗
    myth
        9
    myth  
       2015-11-03 09:20:11 +08:00
    楼主的意思应该是想在一个废旧 android 手机运行个 APP 实现自动拨号的功能
    lijsf
        10
    lijsf  
       2015-11-03 09:33:07 +08:00   ❤️ 1
    之前做过一点 openWRT 的东西。你这个需求我觉得最简单的可以这么来搞。
    1. 在 openwrt 上写个 bash 定时任务脚本,定时去一个 web 接口上拿密码,然后拨号。
    2. 在 web 服务器上写个程序发短信获取电信的密码。
    这个方案简单易行,但有两个问题, 1 是路由器先得联网才能拿到密码,不一定能行。 2 是你发短信可能必须得你那个手机号才行,比较麻烦。

    可以改成这个方案:
    1.openwrt 上写个 server 程序,用 c/lua 都可以。监听某个端口,接收密码,拨号。用 C 就是几十行程序。
    2.写个 JavaAPP ,连接 openwrt 的 server 程序,调发短信接口自动发短信,然后发送到 openwrt ,触发 openwrt server 程序自动拨号。

    这个方案实现起来稍麻烦点,不过也不难。
    Reficul
        11
    Reficul  
       2015-11-03 09:33:21 +08:00 via Android   ❤️ 1
    应该很快的吧,感觉 Android 主要是那堆函数怎么用。现查显用呗😃
    xmoiduts
        12
    xmoiduts  
       2015-11-03 10:07:32 +08:00 via Android
    我也有类似的问题,山寨版校园网客户端,现在有完整的 C 源代码,别人的 linux 可以编译+正常使用。但我不知道如何将它移植到 openwrt 平台。不懂 linux ,只用 mipsel 的 gcc 编译了一下,运行不了。现在路由器也在吃灰。
    little_cup
        13
    little_cup  
       2015-11-03 10:17:49 +08:00 via Android   ❤️ 1
    LZ 的需求不需要「编程」。
    电信手机上装一个 tasker+tasker ssh plugin 。
    手动编写规则定时发短信->正则提取出短信中验证码->ssh 连接路由并拨号。
    就可以了。
    以前玩过定时给 10086 发短信正则提取出余额显示在桌面,和 openwrt 上自动电信拨号(我们那里还没有验证码)。所以确定上述链条是走的通的。
    kenshinhu
        14
    kenshinhu  
       2015-11-03 10:18:49 +08:00
    首先要懂 linux 吧
    mortal
        15
    mortal  
       2015-11-03 10:34:59 +08:00
    唉,又想起了自己大学时候为了搞这些东西从小白成为了 Linuxer …然后变成了学渣。
    jasontse
        16
    jasontse  
       2015-11-03 10:39:43 +08:00 via iPad
    LZ 的需求应该是用 Java 写个 Android App 自动读短信,然后登录 OpenWrt 拨号。是这意思吧。
    skylancer
        17
    skylancer  
       2015-11-03 10:52:25 +08:00
    如果 lz 不用电信卡打电话上网的话还不如买个 3G 网卡和带 USB 的路由,然后用 chat 读出来短信用 uci 写进配置然后拨号,全套全自动完成
    acess
        18
    acess  
    OP
       2015-11-03 12:32:29 +08:00 via Android
    @lijsf 我看那个破解路由配套的 APP 貌似是走 LuCI 的,不知道有没有什么资料可以查?
    little_cup
        19
    little_cup  
       2015-11-03 12:41:44 +08:00
    @acess 如果你那里的电信解谜后就是 pppoe 拨号的话,直接使用 sed 命令修改 /etc/config/network 中的 option username 和 option password 两行,再 /etc/init.d/network restart 就可以了。
    acess
        20
    acess  
    OP
       2015-11-03 12:52:26 +08:00 via Android
    @little_cup 额,这个好像还可以用 uci 、 ifup 等命令搞定

    我还要控制 WiFi 那边的 PPPoE 定时连接和断线,但这个办法应该可行,我有空就试试,谢谢你的建议。
    电信已经换了标准的 PPPoE 协议,市面上的 SOHO 路由大多数都可以用。
    acess
        21
    acess  
    OP
       2015-11-03 12:53:23 +08:00 via Android
    @acess 奇怪,排版乱了……
    手机发的,见谅。
    liyvhg
        22
    liyvhg  
       2015-11-03 14:11:31 +08:00
    我觉得楼主的方向太过于中规中矩了, 电信装的 APP, 90%的可能是用的 HTTP 请求, 楼主可以抓包分析一下 URI 和请求参数之类的, 然后在 Op 里面 CURL 实现一套: Crontab 定时获取密码, UCI 更新 PPPOE
    acess
        23
    acess  
    OP
       2015-11-03 14:27:01 +08:00 via Android
    @liyvhg 额,应该用的是 HTTP 请求没错,但请求被加密了,还不是简单 base64 ……文件名里面有 zsm ,好像还是继承以前天翼客户端用的加密。
    以前 1.5.5 版本的天翼客户端被分析出用了 4 个加密函数,后来 1.5.6 还改成拨号前下载配置和动态链接库文件(zsm),我觉得这早就超出我能搞定的范围了……
    但是……或许反编译 Android 应用相对容易得多?这方面 LZ 不太了解,但好像也存在混淆技术,不知道电信用了没。
    lijsf
        24
    lijsf  
       2015-11-05 09:12:33 +08:00
    @acess 搞 Luci 还不如直接用 socket 通信呢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1026 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:25 · PVG 02:25 · LAX 10:25 · JFK 13:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.