Skip to content

Tamako0401/NJUPT_AutoLogin

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NJUPT_AutoLogin

南京邮电大学校园网自动登录脚本,支持 macOS、Linux(如 OpenWRT)和 MikroTik RouterOS 平台。欢迎提交 Issue 和 PR,一起完善这个脚本。

适用于 MikroTik RouterOS 平台的使用教程请 移步这里

使用方法

Warning

脚本会获取系统时间来判断当前时间是否是可上网时间,进而判断是否要尝试登录,所以错误的系统时间可能导致脚本无法正常运行。建议首先校准系统时间。

  1. 下载该脚本 NJUPT-AutoLogin.sh

  2. 按照下面的选项和参数表构造运行命令。

    一般格式:bash NJUPT-AutoLogin.sh [-i interface] [-I isp] [-t timeout] [-p ipv4_addr] [-r restart_device] [-T sleep_time] [-6] [-m] [-n] [-c] [-l] [-h] [-v] login_id login_password

  3. 在终端内运行命令。

    例如 bash NJUPT-AutoLogin.sh -i en0 -I ctcc B21010101 12345678

如果是在 OpenWRT 路由器平台上运行,可以参考 在 OpenWRT 上运行

Linux 使用此脚本前需要检查以下依赖是否安装:

包名 备注
bash 运行脚本的 shell 环境,必须安装
curl 实现登录请求相关功能,必须安装
net-tools 实现 IP 获取相关功能,必须安装
iconv 实现返回值转编码相关功能,缺失可能导致 IPv6 连接检测部分报错,不影响使用
network-manager 实现 WiFi 自动连接和检测相关功能(nmcli),缺失不影响使用

常见的 Linux 发行版一般已预装以上的包,但对于部分轻量化发行版(如 OpenWRT),某些包可能需要手动安装,或无原生支持(特指 OpenWRT 上无原生 network-manager 支持)。

使用前,可能需要在文本编辑器中重设换行符并保存才能正常使用。需要进行此项操作的一个标志是:Linux 下使用文本编辑器打开脚本时,每行行末出现字符 ^M

选项表:

选项 名称 默认值 备注
-i interface 网络接口 en0 指定需要登录的接口,用于获取 IP 地址
-I ISP 运营商 ctcc 指定运营商,教育网为 njupt,电信为 ctcc,移动为 cmcc
-t timeout 超时时间 2 指定检查网络连通性和发送请求时的超时时间
-p ipv4_addr IPv4 地址 (自动检测) 手动指定 IPv4 地址,默认情况下会自动检测本机 IP
-r restart_device 网路设备 - 当出现登录失败且返回空时可尝试开启 #16
-T sleep_time 登录等待时间 1 重启网络设备后等待指定时间后再尝试登录,与-r配合使用
-6 loginv6 教育网 IPv6 登录 - 用于通过教育网 IPv6 地址恢复公网 IPv6 访问权限(实验性功能, 默认关闭)
-m mac_detection mac 检测 - 开启 mac 检测策略:仅当本机 mac 地址发生变化且网络不通时才尝试登录(默认关闭)
-n not_limited 无限制账号 - 切换到无时间限制账号,所有时间都会尝试登录
-c conn_skip 跳过连通性检测 - 在执行登录请求前不检查当前网络状态(非多播场景下不要添加该选项)
-l logout_mode 登出模式 - 切换到登出模式,脚本运行会登出校园网
-h 显示帮助菜单 -
-v 调试输出模式 - 逐条输出脚本代码执行情况

参数表:

参数 名称
login_id 登录用户名
login_password 登录密码

已弃用选项表:

参数 名称 默认值 备注
-s 标记当前位置为三牌楼校区 - 三牌楼校区须加上,仙林校区不用

Caution

2025 年 9 月更新:仙林校区网络升级后当 MAC 地址不变时无须重复登陆;可用 -m 开启 MAC 检测策略。暂不清楚三牌楼校区情况如何,若不能正常使用请提交 Issue。
2025 年 4 月更新:对已登录的账号发送登录请求会导致账号下线,请不要在非多播场景下添加 -c 参数。
2024 年 9 月更新:目前无法确定校园网 IPv6 的登录接口在不同网络环境下是否通用(在获取到 2001:da8 段地址的情况下)。若不能正常使用请提交 Issue。

更新日志

  • 2025.09.09 添加 MAC 地址检测,避免因网络波动重复登陆导致掉线 @Symb0x76
  • 2025.04.28 添加重启网络设备再登录的选项 @RunawayRanger
  • 2025.04.18 更换连通性测试链接地址 @Glucy2
  • 2024.09.20 实验性添加对校园网 IPv6 权限的获取和 WLAN SSID 的识别 @SteveXu9102
  • 2024.04.17 重构;添加对 macOS 的支持 @BlockLune
  • 2023.07.23 适配 2023 年 7 月更新的校园网接口
  • 2022.09.02 添加对多网卡设备的支持
  • 2022.08.31 适配三牌楼校区
  • 2022.08.31 添加对不断网账号的支持

更多请见 Releases

在 OpenWRT 上运行

Tip

更详细的教程请移步 Nosora 的博客

下载 Releases 中的脚本,上传到路由器中。

脚本已支持自动检测 OpenWrt 的 WAN 接口名称(如 waneth0.x),通常情况下无需手动指定 -i 参数

在路由器的计划任务中添加以下命令,并根据实际情况修改这条命令(复杂的密码请用 " 括起来):

*/5 * * * * bash /path/to/your/NJUPT-AutoLogin.sh [-I isp] [-t timeout] [-p ipv4_addr] [-r restart_device] [-T sleep_time] [-6] [-m] [-n] [-c] [-l] [-v] login_id login_password

确认无误后保存。之后路由器就会每 5 分钟确认一次网络状态,如果允许登录时间内没有登录校园网,路由器就会自动尝试登录了。

进阶用法

IPv6 支持(实验性)

在原有命令的基础上添加 -6 参数,脚本会尝试恢复公网 IPv6 访问权限。
只有在 IPv6 地址段为 2001:da8:1032::/48(CERNET 南邮地址段)时才有效。
通过向内网地址 http://192.168.168.168/0.htm 发送 POST 请求来登录,本质上相当于再登录一遍校园网。
使用前应当注意, 此方法可能产生额外费用。
详见参考处百度贴吧链接。
登录后,http://192.168.168.168/1.htm 可以用来查询连接时间、流量、余额等信息。
http://192.168.168.168/F.htm 发送 GET 请求后,退出登录。
若在 OpenWRT 使用此功能,由于分配到的 IPv6 地址掩码位数一般是 /128 ,
路由器必须使用 NAT6 方式给下游设备分配 IPv6 地址并将所有网络请求伪装成只由路由器发出。
通常需要留意以下设置:

  • 防火墙 LAN / WAN 区域全部 开启 IPv6 伪装
  • 接口 - 全局网络选项中的 IPv6 ULA 前缀 应当存在且为唯一本地地址 fd00::/8 段;
  • WAN 侧接口 禁用 所有 IPv6 相关服务;
  • LAN 侧接口开启 DHCPv6 服务RA 服务服务器模式禁用 NDP 代理
  • LAN 侧 IPv6 RA 设置中 强制 **通告路由器为默认服务器 **,RA 标记 至少需要开启 受管配置(M)
  • 若以路由器为 IPv6 DNS 服务器,则需在 LAN 侧 通告路由器为 IPv6 DNS 服务器 且开启 RA 标记其他配置(O),并在 Dnsmasq (或其他 DNS 服务,如 AdGuard Home)中设置一些可靠的上游 IPv6 DNS 服务器;
  • 对于部分移动设备(如小米),若有分配 IPv6 地址的请求,需要在路由器 LAN 侧 IPv6 RA 设置中 启用 SLAAC,即无状态地址自动配置(Stateless Address Automatic Configuration);
  • RA 标记中的 移动home代理(H) 标记一般用于解决大型无线网络中移动设备漫游时的地址分配问题,无需开启。

参考

About

南京邮电大学校园网自动登录脚本,支持Linux(OpenWRT)、Macos、RouterOS平台,内附单线多拨教程

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Shell 78.9%
  • Python 21.1%