Skip to content

电子科技大学清水河校区电信网络自动接入脚本,其他网络或沙河校区暂不支持(欢迎在 ISSUE 中提供关键抓包信息)

License

Notifications You must be signed in to change notification settings

coolmoon327/UESTC-QingShuiHe-SRUN-TELECOM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

电子科技大学清水河校区寝室电信网络自动接入工具

License: MIT License

电子科技大学寝室的电信网络自动登录工具,可通过无头浏览器或模拟登录请求自动登录。可用于无人值守情况下主机/ Homelab / NAS 保持在线。

支持 linux64, mac-arm64, mac-x64, win32, win64。

这是什么?

这是电子科技大学,清水河校区寝室的电信“宽带”/Wifi网络的自动登录工具

为什么我需要它?

校内电信营业厅提供的“宽带”可通过寝室楼公共的 ChinaTelecom-EDU5.8/2.4G Wifi 或 寝室内的RJ45以太网接口 接入。两者均通过 Portal 认证 ———— 这一认证页面通常会在系统进行 Captive Portal 检查时“自动”出现,在安卓上为一则 “网络……需要认证” 的通知,而在 Windows 上为通过默认浏览器弹出的 Portal 页面。

但因为

  1. 清水河校区本科楼十一月初至四月底夜间断电。
  2. 寝室内的以太网接口没有持久化登录:断开后重连即需重新认证;而公共Wifi的持久化登录时间很短。
  3. 电信提供的网络早先只支持一个设备同时登录。
  4. 认证界面地址 http://172.25.249.64/eportal/index.jsp?... 频繁抽风,表现为不能自动跳转认证界面、访问认证界面时报 502 bad gateway

这会导致如下问题:

  1. 以上网络均有AP隔离,这会导致依赖局域网的服务和应用无法正常工作。
  2. 你的NAS、打印机或是自制物联网小玩具等没有可直接操作的 Web 界面的设备无法连接到网络。
  3. 每次设备离开公共Wifi范围,或是断开以太网连接后,均需要重新认证。频率可高达一天数次
  4. 原因 4 中的认证界面抽风的发生频率高到令人沮丧

即使使用路由器来实现多设备共享同一“宽带”账号,由于原因 1,登录频率也只是降为了一天一次,并且网络SLA视起床时间而定,总的来说低于 73%。

因此,使用自动脚本可以节约您宝贵的生命。

如何使用?

Usage

usage: cli.py [-h] [-u] [-i USERID] [-p PASSWORD] [--method METHOD] [-g LOGIN_GATEWAY] [--interval INTERVAL] [--debug] [--silent] [--logfile LOGFILE]

Automated logging in for China Telecom's portal authentication in UESTC student apartments.

options:
  -h, --help            show this help message and exit
  -u, --update-cft      (legacy) download/update newest chrome for test and corresponding driver
  -i USERID, --userid USERID
                        username
  -p PASSWORD, --password PASSWORD
                        password
  --method METHOD       loging method, available: browser, request
  -g LOGIN_GATEWAY, --login-gateway LOGIN_GATEWAY
                        address of the portal page, should have scheme (e.g. 'http://...')
  --interval INTERVAL   interval (s) for connectivity check / retry
  --debug               enable debug output
  --silent              disable output in shell
  --logfile LOGFILE     log file location

直接部署

Requirements
requests
argparse
python >= 3.10
selenium >= 3.141.0
Linux 下的 chrome for testing 的依赖问题

在Linux下,直接下载的Chrome for testing 及 chromedriver二进制,需手动配置依赖库,详见 https://stackoverflow.com/a/76734752

apt-get install -y unzip xvfb libxi6 libgconf-2-4 jq libjq1 libonig5 libxkbcommon0 libxss1 libglib2.0-0 libnss3 \
  libfontconfig1 libatk-bridge2.0-0 libatspi2.0-0 libgtk-3-0 libpango-1.0-0 libgdk-pixbuf2.0-0 libxcomposite1 \
  libxcursor1 libxdamage1 libxtst6 libappindicator3-1 libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libxfixes3 \
  libdbus-1-3 libexpat1 libgcc1 libnspr4 libgbm1 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxext6 \
  libxrandr2 libxrender1 gconf-service ca-certificates fonts-liberation libappindicator1 lsb-release xdg-utils

Unix

# Clone this project to local
git clone https://github.com/coolmoon327/UESTC-QingShuiHe-SRUN-TELECOM.git 
cd "./UESTC-QingShuiHe-SRUN-TELECOM"

# Install chrome for testing and its chrome driver (optional, needed for using brower login mode)
# the previledge is for automatic granting of excutable permission
sudo python3 uestc_telecom/cli.py -u

# Run autologin
python3 uestc_telecom/cli.py --method request --userid 19912344321 --password 12345678

Windows

# Clone this project to local
git clone "https://github.com/coolmoon327/UESTC-QingShuiHe-SRUN-TELECOM.git"
Set-Location ".\UESTC-QingShuiHe-SRUN-TELECOM"

# Install chrome for testing and its chrome driver (optional, needed for using brower login mode)
python3 uestc_telecom\cli.py -u

# Run autologin
python3 uestc_telecom\cli.py --method request --userid 19912344321 --password 12345678
Chrome for Testing / Chromedriver 配置

Chrome for Testing / Chromedriver 二进制获取

方法 A: Chrome for testing 及 Chrome driver 可通过 python .\setup_cft.py, auto_login.py 自动获取。获取到的 ./webdriver/chromedriver-xxx/chromedriver./webdriver/chrome-headless-shell-xxx/chrome-headless-shell 文件需要设置权限(如 chmod 777)。

方法 B:(不推荐)手动从 googlechromelabs 下载。需将对应平台、相互匹配的 chrome-headless-shell.zipchromedriver.zip 下载并解压至 ./webdriver/。

在Linux下,通过方法 A 或方法 B 完成 Chrome for testing 及 Chrome driver 的下载后,需配置 Chrome for testing 的依赖库。详见前文 “Linux 下的 chrome for testing 的依赖问题”

作为服务部署

Windows 后台运行

pythonw auto_login.py

Unix 后台运行

nohup python3 auto_login.py 2>&1 &

Winsw

详见 https://github.com/winsw/winsw

-- uestc_telecom.xml --
<service>
  <id>uestc-telecom-autologin</id>
  <name>Uestc Telecom Autologin</name>
  <description>Auto login for China Telecom APs in UESTC</description>
  <executable>C:\Directory\To\Your\Python\Excutable</executable>
  <workingdirectory>%BASE%</workingdirectory>
  <arguments>%BASE%\uestc_telecom\cli.py --userid "19912344321" --password "12345678" --silent</arguments>

  <onfailure action="restart" delay="2 sec" />
  <onfailure action="restart" delay="10 sec" />
  <onfailure action="none" />

  <delayedAutoStart>true</delayedAutoStart>

  <logpath>%BASE%\log\service</logpath>
  <log mode="roll" />
</service>

Systemd

[Unit]
Description=Uestc Telecom Autologin
Documentation=https://github.com/coolmoon327/UESTC-QingShuiHe-SRUN-TELECOM
After=network.target nss-lookup.target

[Service]
User=nobody
NoNewPrivileges=true
ExecStart=/usr/local/bin/python3 /dir/to/uestc_telecom/cli.py --userid "19912344321" --password "12345678" --silent
Restart=on-failure

[Install]
WantedBy=multi-user.target

使用 docker 容器部署

A. 下载 docker 镜像

注:由于镜像中需要完整的 Chrome 环境,体积为 ~1450 MB。 如果不需要 browser 登录方式,SLIM 镜像体积可减至 ~700 MB

# x86-64 完整版,体积较大,可以指定 `method` 为 `request` 与 `browser`,适用于大多数场景
docker pull coolmoon327/uestc-srun-telecom

# x86-64 精简版,体积较小,只能指定 `method` 为 `request`
docker pull coolmoon327/uestc-srun-telecom-slim

# arm-64 完整版,体积较大,可以指定 `method` 为 `request` 与 `browser`,适用于苹果设备与大多数 arm 设备
docker pull coolmoon327/uestc-srun-telecom-arm64

# arm-64 精简版,体积较小,只能指定 `method` 为 `request`
docker pull coolmoon327/uestc-srun-telecom-arm64-slim

B. 使用 dockerfile 自动部署

注: 构建过程需要完整的国际互联网环境,或国内镜像源。如果构建过慢,或出现网络相关错误,你可能需要检查以上条件是否生效。详见 awesome-mirrors#docker

# 构建命令
docker build -t uestc-srun-telecom:latest .

# 构建命令(不含 Chrome 环境,无 browser 登录支持)
# 在 Dockerfile 设置 ARG SLIM=1
docker build -t uestc-srun-telecom:latest .

运行镜像

运行镜像时至少需提供 SRUN_USERNAMESRUN_PASSWORD 两个环境变量,分别为你的手机号和密码。 SRUN_METHOD 指定登录方式(精简 request 或基于浏览器 browser)。

# 运行自行构建的镜像
docker run -e SRUN_USERNAME='手机号' -e SRUN_PASSWORD='默认为12345678' -e SRUN_METHOD='request | browser' uestc-srun-telecom

# 运行预构建镜像:将上述命令中 uestc-srun-telecom 改为你下载的预构建镜像名

NAS 部署

  1. 在 NAS 的 docker 软件中找到本项目上传到 Hub 的 uestc-srun-telecom 镜像:
2. 添加环境变量 `SRUN_USERNAME` `SRUN_PASSWORD` `SRUN_METHOD`:

更新日志

  • 2023.11.27: 重构了项目结构。添加了更轻量的构造登录请求的自动登录方式(可能随电信登录前端更新而失效,但他们更新的概率很低……)。

  • 2023.11.7: 转为使用独立的无头chrome for testing及chromedriver,不再需要完整的chrome环境或配置对应版本的webdriver。

  • 2023.6.23: @yao-yun 提供了 chromium 内核的自动检测与下载的更新,无需用户自行配置驱动。

  • 2022.12.12: 修复 issue #2 提到的 dockerfile 的问题。

  • 2022.9.30: 电信入网登陆地址发生变动 172.25.249.8 -> 172.25.249.64

如何查看入网地址? 当无法正常使用该工具时, 请手动在浏览器进入入网登陆页面, 然后在命令行中传入 --login-gateway "http://*.*.*.*" 参数。

使用须知

What's new

  1. 参考了 SRUN 项目 中基于 selenium 的浏览器自动登录方法
  2. 相对之前的 UESTC SRUN 项目,本项目重新在 2022 年测试电子科技大学清水河校区电信网络的接入网页,网址和 id 均有变化(经测试,在清水河校区无法使用旧的项目)
  3. 在清水河校区的电信认证网页下,本项目为 input 修改 value 值,更改代码为 driver.execute_script(f'document.getElementById("username").value={self.username}')
  4. 额外提供了构造登录请求认证的自动登录方法
  5. 转为使用独立的无头chrome for testing及chromedriver,不再需要完整的chrome环境或手动配置对应版本的webdriver。

Dockerfile Build

  1. 在本项目的根目录下使用 docker build -t uestc-srun-telecom:latest . 命令可自动生成 docker 镜像,运行容器将直接开启全自动的 SRUN 服务
  2. 若使用 docker,推荐直接在容器中设置环境变量 SRUN_USERNAME 和 SRUN_PASSWORD 的值:docker run -e SRUN_USERNAME='your_username' -e SRUN_PASSWORD='your_password' uestc-srun-telecom:latest
  3. 自行构建dockerfile时,可以在 dockerfile 中修改上述环境变量的值为你的账号和密码
  4. 由于使用了官方的 Chrome 镜像,需要在 build 之前设置终端代理,这里以本地 Clash 为例: export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890
  5. 整个 build 过程需要约10min,如果网速较快建议直接 下载 image 使用

Author / Collaborator

👤 Author: coolmoon327

👤 Collaborator: yao-yun

Show your support

Give a ⭐️ if this project helped you!

📝 License

Copyright © 2022 @coolmoon327.
This project is MIT Licenselicensed.

About

电子科技大学清水河校区电信网络自动接入脚本,其他网络或沙河校区暂不支持(欢迎在 ISSUE 中提供关键抓包信息)

Topics

Resources

License

Stars

Watchers

Forks