济南大学宿舍联通手动PPPoE上网

本文是关于自己在济南大学宿舍手动联通 PPPoE 拨号上网的折腾过程,虽然去年 10 月左右已经实现,一直没有写出来,在此补上。

为什么要手动 PPPoE

学校宿舍联通一个账户限制两个终端,且严格禁止共享网络。在 Windows 下必须使用客户端进行 PPPoE,而 Android/Linux 等设备是通过 captive portal 进行认证,而 Windows 下的客户端会检测网卡,如果有多余的网卡(如 hyper-v)可能会自动断开(未验证),而且 Windows 下客户端界面超级不好看,自己也有超过 2 台设备。

分析 PPPoE

我不想弄脏自己的环境,花了一段时间给移动硬盘装了个 Windows 与 wireshark,同时安装上联通客户端,尝试登陆了一次,并将抓到的数据包保存。

wireshark 中的 filter 设置为 ppp 协议,可以明显发现认证相关的数据包里面的username后面加入了@jndxedupassword前面加入了0x01(SOH),所以在路由设置中将这两项补上即可完成拨号。

路由设置

通用方法(?)

部分路由好像不会对0x01进行处理,所以可以先尝试直接复制粘贴0x01
linux 用户可以echo -e '\x01' > password(当然建议直接 pipe 到文本编辑器中复制即可)。
Windows 用户可以下载 hex 编辑器,放一个0x01后用文本编辑器打开。

padavan

padavan 的 Web UI 貌似会对数据进行验证,这里使用了burpsuite对请求进行 intercept,在 PPPoE 密码前面放入%01即可。

openwrt

由于 openwrt 好久没用了,只能按照自己的印象说了,如有差错欢迎留言。SSH 到路由器,在/etc/config/network中找到 PPPoE 密码,在其前面加个\x01即可。

一点有趣的东西

在这个过程中我也看到了几个有趣的 http 请求如下,不过有记录在我 postman 账户中的只有 2 个了,其他的可以用 wireshark 等工具自己抓。

查看账户状态

Request:

1
POST http://139.198.3.98/mgr/api/account/check.html?user_name=<账号>&school_id=510592(学校ID 这里是济南大学)&pwd=<密码>

Response:

1
2
3
4
{
"msg": "账户正常!",
"success": 0
}

查看联通做的小手脚

Request:

1
POST http://139.198.3.98/mgr/api/schools/show.html?cityId=996(城市ID 这里是济南)

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"status": 0,
"msg": "成功",
// 这里省去其他学校
"data": [
{
"allowCode": 0,
"allowMsgCode": 0,
"autoLogin": "1",
"base": "1",
"brasIp": "124.128.40.39|124.128.40.7",
"checkAccount": 0,
// 这里是用户名后缀
"clientOver": "@jndxedu",
"clientStart": null,
"linkUrl": "http://139.198.3.98/sdjd/",
"name": "济南大学",
"phoneOver": null,
"phoneStart": null,
// 这里是密码的神奇前缀
"pin": "0x01",
"pinDescribe": 1,
"realUrl": "http://139.198.3.98/mgr/",
"schoolId": 510592
}
]
}