中国电信天翼校园网(ESurfing)自动认证拨号客户端的 Go 语言实现。由于我无法测试各个学校的情况,出现问题时,欢迎提交issue并贴上日志。
- 自动检测强制门户(Captive Portal)并完成认证
- 自动心跳保活,断线自动重连
- 跨平台编译(Windows / Linux / macOS)
- Go编译后为单文件且无须依赖,便于路由器部署
- 支持多拨
Release中有最新版本下载,可以直接下载使用
esurfing -u <用户名> -p <密码> [-s <短信验证码>] [-n <网络接口号>]| 参数 | 说明 |
|---|---|
-u / -user |
登录用户名 |
-p / -password |
登录密码 |
-c / -sms |
预填短信验证码(可选) |
-s / --show |
查看网络接口 |
-n / --network |
使用指定网络接口认证 |
# 基本登录
esurfing -u 13800138000 -p mypassword
# 携带短信验证码
esurfing -u 13800138000 -p mypassword -s 123456
#指定特定网络接口,如wifi进行拨号
esurfing -s
#返回
1:以太网
2:WLAN
esurfing -n 2 -u 13800138000 -p mypassword
程序启动后会自动检测网络状态,完成认证并保持连接。按 Ctrl+C 安全退出。
./esurfing -u <用户名> -p <密码>在进行后面的部署之前请先运行一次确保程序在你当前的网络环境可用,如不可用,可以贴上日志发issue
创建服务文件 /etc/systemd/system/esurfing.service:
[Unit]
Description=EsuringGo Campus Network Authenticator
After=network.target
[Service]
Type=simple
ExecStart= #应用路径
Restart=always
User=root
[Install]
WantedBy=multi-user.target启用服务:
sudo systemctl daemon-reload
sudo systemctl enable esurfing #开机自启
sudo systemctl start esurfing #启动程序
sudo systemctl status esurfing #查看状态将编译好的二进制文件上传至路由器 /usr/bin/,并添加开机启动脚本:
# 添加执行权限
chmod +x /usr/bin/esurfing #此处的esurfing根据你release或者编译的名字更改
# 编辑rc.local配置自启动
nano /etc/rc.local
#最后一行添加 /usr/bin/esurfing -u <用户名> -p <密码>
#ctrl+o保存 ctrl+x关闭编辑器若为梅林固件,可以在/jffs/scripts/添加services-start
#!/bin/sh
#此脚本为梅林专用
i=0
while [ $i -le 30 ]; do
success_start_service=$(nvram get success_start_service)
if [ "$success_start_service" == "1" ]; then
break
fi
i=$(($i+1))
sleep 1
done
logger -t "CustomScript" "My services-start script executed successfully."
sleep 5
<外部存储位置>/start.sh > /tmp/home/root/Esurfinglog.txt 2>&1 &
#上文start.sh为与esurfing相同的目录,内容为启动命令,如./esurfing-linux-armv5 -u 123123 -p 212121
exit 0
start.sh可参考我的写法
#!/bin/sh
while true;do
<绝对路径>/esurfing-linux-arm5 -u 123321 -p 212121
donego build -o esurfing .生成的 esurfing.exe(Windows)或 esurfing(Linux/macOS)即为可执行文件。
项目提供自动化构建脚本,支持多平台打包:
-
Windows (PowerShell):
.\build.ps1
-
Linux / macOS (Bash):
chmod +x build.sh ./build.sh
📌 参考
EsurfingDialer项目的构建逻辑,脚本会自动设置CGO_ENABLED=0以确保静态链接,避免运行时依赖。
针对 ARMv5 架构设备,需指定环境变量:
GOARM=5 CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -o esurfing-arm5 .构建后建议运行完整测试套件:
go test ./... -v特别关注 cipher/ 模块的加解密一致性测试,确保协议兼容性。
├── main.go # 入口
├── client.go # 认证客户端主逻辑
├── session.go # 会话与加密管理
├── states.go # 全局状态(线程安全)
├── constants.go # 常量定义
├── iface.go # 网络接口列表与绑定
├── cipher/ # 加密算法实现
│ ├── cipher.go # 工厂函数
│ ├── keydata.go # 密钥数据
│ ├── aescbc.go # AES-CBC
│ ├── aesecb.go # AES-ECB
│ ├── desedecbc.go # 3DES-CBC
│ ├── desedeecb.go # 3DES-ECB
│ ├── sm4cbc.go # SM4-CBC
│ ├── sm4ecb.go # SM4-ECB
│ ├── modxtea.go # ModXTEA
│ ├── modxteaxteaiv.go # ModXTEA-XTEAIV
│ └── zuc.go # ZUC-128
├── network/ # 网络模块
│ ├── client.go # HTTP 客户端
│ └── connectivity.go # 门户检测
├── utils/ # 工具函数
│ └── utils.go
└── model/ # 数据模型
└── model.go
- gmsm — 国密 SM4 / ZUC 算法
- google/uuid — UUID 生成
MIT
项目结构与协议解析逻辑继承自
Rsplwe/EsurfingDialer,但采用更清晰的状态机与工厂模式重构,便于维护与扩展。如果喜欢这个项目,请帮忙点个star