docs: 添加项目文档和说明
This commit is contained in:
@@ -0,0 +1,253 @@
|
||||
# 校园网宽带绕过多设备监测认证(OpenWrt版)
|
||||
|
||||
## 简介
|
||||
|
||||
本项目用于在 OpenWrt 路由器上实现校园网宽带认证,支持多设备共享上网,绕过校园网的多设备监测限制。
|
||||
|
||||
## 功能特性
|
||||
|
||||
- ✅ 自动认证登录校园网
|
||||
- ✅ 支持自定义 MAC 地址(绕过多设备监测)
|
||||
- ✅ 开机自动启动
|
||||
- ✅ 断线自动重连
|
||||
- ✅ 完善的日志记录
|
||||
- ✅ 外部配置文件支持
|
||||
|
||||
## 环境要求
|
||||
|
||||
- OpenWrt 系统
|
||||
- Python 3.x
|
||||
- Python requests 库
|
||||
- 网络接口(如 eth1、br-lan 等)
|
||||
|
||||
## 安装方法
|
||||
|
||||
### 方法一:一键安装(推荐)
|
||||
|
||||
1. 将项目文件上传到 OpenWrt 路由器的任意目录(如 `/tmp/drcom`)
|
||||
|
||||
2. 进入项目目录:
|
||||
```bash
|
||||
cd /tmp/drcom
|
||||
```
|
||||
|
||||
3. 运行安装脚本:
|
||||
```bash
|
||||
chmod +x install.sh
|
||||
./install.sh
|
||||
```
|
||||
|
||||
4. 编辑配置文件:
|
||||
```bash
|
||||
vi /etc/drcom/config.json
|
||||
```
|
||||
|
||||
5. 启动服务:
|
||||
```bash
|
||||
/etc/init.d/drcom-login start
|
||||
```
|
||||
|
||||
### 方法二:手动安装
|
||||
|
||||
1. 安装依赖:
|
||||
```bash
|
||||
opkg update
|
||||
opkg install python3 python3-light python3-requests
|
||||
```
|
||||
|
||||
2. 创建目录:
|
||||
```bash
|
||||
mkdir -p /etc/drcom
|
||||
```
|
||||
|
||||
3. 复制文件:
|
||||
```bash
|
||||
cp drcom_login_fixed.py /usr/bin/drcom_login.py
|
||||
chmod +x /usr/bin/drcom_login.py
|
||||
cp drcom-login /etc/init.d/drcom-login
|
||||
chmod +x /etc/init.d/drcom-login
|
||||
cp config.json /etc/drcom/config.json
|
||||
```
|
||||
|
||||
4. 编辑配置:
|
||||
```bash
|
||||
vi /etc/drcom/config.json
|
||||
```
|
||||
|
||||
5. 启用并启动服务:
|
||||
```bash
|
||||
/etc/init.d/drcom-login enable
|
||||
/etc/init.d/drcom-login start
|
||||
```
|
||||
|
||||
## 配置说明
|
||||
|
||||
编辑 `/etc/drcom/config.json` 文件:
|
||||
|
||||
```json
|
||||
{
|
||||
"username": "250450328", // 校园网账号
|
||||
"password": "your_password", // 校园网密码
|
||||
"server_ip": "172.17.8.2", // 认证服务器IP
|
||||
"server_port": 801, // 认证服务器端口
|
||||
"interface": "eth1", // 网络接口名称
|
||||
"fixed_mac": "a0:ad:9f:0a:4d:86" // 固定MAC地址(可选,留空则自动获取)
|
||||
}
|
||||
```
|
||||
|
||||
### 如何查找网络接口名称
|
||||
|
||||
在路由器上运行以下命令查看网络接口:
|
||||
```bash
|
||||
ip addr show
|
||||
```
|
||||
或者
|
||||
```bash
|
||||
ifconfig
|
||||
```
|
||||
|
||||
找到连接校园网的接口名称(通常是 eth1、wan、br-wan 等)
|
||||
|
||||
### 如何设置固定 MAC 地址
|
||||
|
||||
固定 MAC 地址可以绕过校园网的多设备数量限制。建议使用:
|
||||
- 已认证设备的 MAC 地址
|
||||
- 随机的有效 MAC 地址(格式:XX:XX:XX:XX:XX:XX)
|
||||
|
||||
如果不需要固定 MAC,将 `fixed_mac` 留空即可。
|
||||
|
||||
## 服务管理
|
||||
|
||||
### 启动服务
|
||||
```bash
|
||||
/etc/init.d/drcom-login start
|
||||
```
|
||||
|
||||
### 停止服务
|
||||
```bash
|
||||
/etc/init.d/drcom-login stop
|
||||
```
|
||||
|
||||
### 重启服务
|
||||
```bash
|
||||
/etc/init.d/drcom-login restart
|
||||
```
|
||||
|
||||
### 查看状态
|
||||
```bash
|
||||
/etc/init.d/drcom-login status
|
||||
```
|
||||
|
||||
### 启用开机自启
|
||||
```bash
|
||||
/etc/init.d/drcom-login enable
|
||||
```
|
||||
|
||||
### 禁用开机自启
|
||||
```bash
|
||||
/etc/init.d/drcom-login disable
|
||||
```
|
||||
|
||||
## 日志查看
|
||||
|
||||
### 查看最新日志
|
||||
```bash
|
||||
tail -f /var/log/drcom-login.log
|
||||
```
|
||||
|
||||
### 使用日志管理脚本
|
||||
```bash
|
||||
chmod +x log-manager.sh
|
||||
./log-manager.sh view # 查看日志
|
||||
./log-manager.sh follow # 实时跟踪日志
|
||||
./log-manager.sh error # 只看错误信息
|
||||
./log-manager.sh success # 只看成功信息
|
||||
./log-manager.sh clear # 清空日志
|
||||
```
|
||||
|
||||
## 卸载方法
|
||||
|
||||
运行卸载脚本:
|
||||
```bash
|
||||
chmod +x uninstall.sh
|
||||
./uninstall.sh
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 1. 认证失败
|
||||
|
||||
**原因**:账号密码错误或服务器 IP 错误
|
||||
|
||||
**解决**:
|
||||
- 检查配置文件中的账号密码是否正确
|
||||
- 使用抓包工具确认认证服务器的真实 IP 和端口
|
||||
- 查看日志:`tail -f /var/log/drcom-login.log`
|
||||
|
||||
### 2. 无法获取 IP 地址
|
||||
|
||||
**原因**:网络接口名称错误
|
||||
|
||||
**解决**:
|
||||
- 运行 `ip addr show` 查看正确的接口名称
|
||||
- 修改配置文件中的 `interface` 参数
|
||||
|
||||
### 3. Python 模块缺失
|
||||
|
||||
**原因**:requests 库未安装
|
||||
|
||||
**解决**:
|
||||
```bash
|
||||
opkg install python3-requests
|
||||
```
|
||||
|
||||
### 4. 断线后不自动重连
|
||||
|
||||
**原因**:procd 的 respawn 功能未启用
|
||||
|
||||
**解决**:
|
||||
- 检查 `/etc/init.d/drcom-login` 脚本是否包含 `USE_PROCD=1`
|
||||
- 重启服务:`/etc/init.d/drcom-login restart`
|
||||
|
||||
### 5. 如何获取认证服务器信息
|
||||
|
||||
1. 在电脑上使用浏览器的开发者工具(F12)
|
||||
2. 访问校园网登录页面
|
||||
3. 查看网络请求中的登录接口
|
||||
4. 记录服务器 IP、端口和请求参数
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. ⚠️ 请确保遵守校园网使用规定
|
||||
2. ⚠️ 建议固定 MAC 地址使用已认证设备的 MAC
|
||||
3. ⚠️ 定期查看日志确保服务正常运行
|
||||
4. ⚠️ 如果校园网升级认证系统,可能需要更新脚本
|
||||
|
||||
## 文件说明
|
||||
|
||||
| 文件名 | 说明 |
|
||||
|--------|------|
|
||||
| `drcom_login_fixed.py` | 主程序(认证核心逻辑) |
|
||||
| `drcom-login` | OpenWrt 启动脚本(init.d) |
|
||||
| `config.json` | 配置文件模板 |
|
||||
| `install.sh` | 一键安装脚本 |
|
||||
| `uninstall.sh` | 卸载脚本 |
|
||||
| `log-manager.sh` | 日志管理脚本 |
|
||||
|
||||
## 许可证
|
||||
|
||||
本项目仅供学习和研究使用,请勿用于非法用途。
|
||||
|
||||
## 技术支持
|
||||
|
||||
如遇到问题,请检查:
|
||||
1. 日志文件:`/var/log/drcom-login.log`
|
||||
2. 网络连接状态
|
||||
3. 配置文件是否正确
|
||||
|
||||
## 更新日志
|
||||
|
||||
- v1.0 - 初始版本
|
||||
- 支持基础认证功能
|
||||
- 支持自定义 MAC 地址
|
||||
- 支持开机自启和断线重连
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"username": "your_username",
|
||||
"password": "your_password",
|
||||
"server_ip": "172.17.8.2",
|
||||
"server_port": 801,
|
||||
"interface": "eth1",
|
||||
"fixed_mac": ""
|
||||
}
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# OpenWrt 启动脚本
|
||||
# 文件位置: /etc/init.d/drcom-login
|
||||
|
||||
START=99
|
||||
STOP=15
|
||||
USE_PROCD=1
|
||||
|
||||
# 程序路径
|
||||
PROG="/usr/bin/drcom_login.py"
|
||||
CONFIG="/etc/drcom/config.json"
|
||||
PIDFILE="/var/run/drcom-login.pid"
|
||||
LOGFILE="/var/log/drcom-login.log"
|
||||
|
||||
# 检查 Python 和依赖
|
||||
check_dependencies() {
|
||||
if ! command -v python3 >/dev/null 2>&1; then
|
||||
echo "[ERROR] python3 not found. Please install it first."
|
||||
return 1
|
||||
fi
|
||||
|
||||
python3 -c "import requests" 2>/dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "[ERROR] Python 'requests' module not found."
|
||||
echo "Run: opkg install python3-requests"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 启动服务
|
||||
start_service() {
|
||||
echo "[START] Starting DRCom Login Service..."
|
||||
|
||||
check_dependencies || return 1
|
||||
|
||||
# 检查配置文件
|
||||
if [ ! -f "$CONFIG" ]; then
|
||||
echo "[ERROR] Config file not found: $CONFIG"
|
||||
echo "Please run: /etc/drcom/install.sh"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 检查主程序
|
||||
if [ ! -f "$PROG" ]; then
|
||||
echo "[ERROR] Program not found: $PROG"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 启动程序
|
||||
procd_open_instance
|
||||
procd_set_param command python3 "$PROG" "$CONFIG"
|
||||
procd_set_param pidfile "$PIDFILE"
|
||||
procd_set_param stdout "$LOGFILE"
|
||||
procd_set_param stderr "$LOGFILE"
|
||||
procd_set_param respawn ${respawn_threshold:-60} ${respawn_timeout:-5} ${respawn_retry:-5}
|
||||
procd_close_instance
|
||||
|
||||
echo "[OK] DRCom Login Service started."
|
||||
}
|
||||
|
||||
# 停止服务
|
||||
stop_service() {
|
||||
echo "[STOP] Stopping DRCom Login Service..."
|
||||
rm -f "$PIDFILE"
|
||||
}
|
||||
|
||||
# 重启服务
|
||||
restart() {
|
||||
stop_service
|
||||
sleep 2
|
||||
start_service
|
||||
}
|
||||
|
||||
# 查看状态
|
||||
status() {
|
||||
if [ -f "$PIDFILE" ]; then
|
||||
pid=$(cat "$PIDFILE")
|
||||
if kill -0 "$pid" 2>/dev/null; then
|
||||
echo "[STATUS] DRCom Login Service is running (PID: $pid)"
|
||||
return 0
|
||||
else
|
||||
echo "[STATUS] PID file exists but process not running"
|
||||
rm -f "$PIDFILE"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
echo "[STATUS] DRCom Login Service is not running"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 查看日志
|
||||
show_log() {
|
||||
if [ -f "$LOGFILE" ]; then
|
||||
tail -n 50 "$LOGFILE"
|
||||
else
|
||||
echo "[INFO] Log file not found: $LOGFILE"
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,147 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import json
|
||||
import random
|
||||
import socket
|
||||
import fcntl
|
||||
import struct
|
||||
import requests
|
||||
|
||||
# ==================== 配置区 ====================
|
||||
USERNAME = "250450328"
|
||||
PASSWORD = "Louxiangyuan1238"
|
||||
SERVER_IP = "172.17.8.2"
|
||||
SERVER_PORT = 801
|
||||
INTERFACE = "eth1"
|
||||
|
||||
# 若想固定 MAC,填入(格式任意,会自动标准化):
|
||||
FIXED_MAC = "a0:ad:9f:0a:4d:86" # 例如:"a0:ad:9f:0a:4d:86" 或留空自动获取
|
||||
# ==============================================
|
||||
|
||||
def get_ip_address(ifname):
|
||||
"""通过 ioctl 获取接口 IP(兼容 Linux/BusyBox)"""
|
||||
try:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
return socket.inet_ntoa(fcntl.ioctl(
|
||||
s.fileno(),
|
||||
0x8915, # SIOCGIFADDR
|
||||
struct.pack('256s', ifname[:15].encode('utf-8'))
|
||||
)[20:24])
|
||||
except Exception as e:
|
||||
print(f"[ERROR] Failed to get IP on {ifname}: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
def get_mac_address(ifname):
|
||||
"""获取接口 MAC 地址(标准化为大写无分隔符)"""
|
||||
if FIXED_MAC:
|
||||
mac = FIXED_MAC
|
||||
else:
|
||||
try:
|
||||
with open(f"/sys/class/net/{ifname}/address", "r") as f:
|
||||
mac = f.read().strip()
|
||||
except Exception as e:
|
||||
print(f"[ERROR] Failed to read MAC from {ifname}: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
# 清理格式:去分隔符 + 大写
|
||||
clean_mac = re.sub(r'[^a-fA-F0-9]', '', mac).upper()
|
||||
if len(clean_mac) != 12:
|
||||
raise ValueError(f"Invalid MAC: {clean_mac}")
|
||||
return clean_mac
|
||||
|
||||
def random_user_agent():
|
||||
uas = [
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.128 Safari/537.36",
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.86 Safari/537.36",
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.78 Safari/537.36",
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0",
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.6167.160 Safari/537.36 Edg/121.0.2277.128"
|
||||
]
|
||||
return random.choice(uas)
|
||||
|
||||
def main():
|
||||
ip = get_ip_address(INTERFACE)
|
||||
mac = get_mac_address(INTERFACE)
|
||||
print(f"[INFO] Local IP: {ip}")
|
||||
print(f"[INFO] Using MAC: {mac}")
|
||||
|
||||
# 随机 JSONP 回调名:dr1000 ~ dr9999
|
||||
callback = f"dr{random.randint(1000, 9999)}"
|
||||
|
||||
params = {
|
||||
"callback": callback,
|
||||
"login_method": "1",
|
||||
"user_account": f".0,{USERNAME}",
|
||||
"user_password": PASSWORD,
|
||||
"wlan_user_ip": ip,
|
||||
"wlan_user_ipv6": "",
|
||||
"wlan_user_mac": mac,
|
||||
"wlan_vlan_id": "2000",
|
||||
"wlan_ac_ip": "",
|
||||
"wlan_ac_name": "",
|
||||
"authex_enable": "2",
|
||||
"jsVersion": "4.2.2",
|
||||
"terminal_type": "1",
|
||||
"lang": "zh-cn",
|
||||
"program_index": "1eXP7I1771987942",
|
||||
"page_index": "hUxRIE1771987961",
|
||||
"w": "8091"
|
||||
}
|
||||
|
||||
headers = {
|
||||
"User-Agent": random_user_agent(),
|
||||
"Referer": f"http://{SERVER_IP}/",
|
||||
"Accept": "*/*",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Connection": "keep-alive",
|
||||
"Sec-Fetch-Dest": "script",
|
||||
"Sec-Fetch-Mode": "no-cors",
|
||||
"Sec-Fetch-Site": "same-origin",
|
||||
"sec-ch-ua": '"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"',
|
||||
"sec-ch-ua-mobile": "?0",
|
||||
"sec-ch-ua-platform": '"Windows"'
|
||||
}
|
||||
|
||||
url = f"http://{SERVER_IP}:{SERVER_PORT}/eportal/portal/login"
|
||||
|
||||
print("[START] Sending authentication request...")
|
||||
try:
|
||||
resp = requests.get(url, params=params, headers=headers, timeout=10)
|
||||
text = resp.text.strip()
|
||||
print(f"[RESPONSE] {text}")
|
||||
|
||||
# === 使用正则更健壮地提取 JSONP 中的 JSON 部分 ===
|
||||
# 支持格式: dr1234({...}); (注意结尾有分号)
|
||||
# 匹配任意 dr 开头的回调名,因为服务器可能忽略我们发送的 callback 参数
|
||||
pattern = r'^\s*dr\d+\s*\((.*)\)\s*;\s*$'
|
||||
match = re.match(pattern, text, re.DOTALL)
|
||||
if match:
|
||||
json_str = match.group(1).strip()
|
||||
try:
|
||||
data = json.loads(json_str)
|
||||
if data.get("result") == 1:
|
||||
print("[✅ SUCCESS] Authentication successful!")
|
||||
sys.exit(0)
|
||||
else:
|
||||
msg = data.get("msg", "Unknown error")
|
||||
print(f"[❌ FAILED] {msg}")
|
||||
sys.exit(1)
|
||||
except json.JSONDecodeError as e:
|
||||
print(f"[ERROR] Failed to parse JSON: {e}")
|
||||
print(f"[DEBUG] Raw JSON string: '{json_str}'")
|
||||
sys.exit(1)
|
||||
else:
|
||||
print("[⚠️ UNKNOWN] Response is not valid JSONP.")
|
||||
print(f"[DEBUG] Callback expected: '{callback}'")
|
||||
print(f"[DEBUG] Full response: '{text}'")
|
||||
sys.exit(1)
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"[ERROR] Request failed: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
+165
@@ -0,0 +1,165 @@
|
||||
#!/bin/sh
|
||||
# OpenWrt DRCom 登录脚本 - 一键安装脚本
|
||||
|
||||
echo "=========================================="
|
||||
echo " DRCom Login - OpenWrt Installation"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# 检查是否为 root 用户
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo "[ERROR] Please run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 颜色定义
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 检查架构
|
||||
ARCH=$(uname -m)
|
||||
echo "[INFO] Architecture: $ARCH"
|
||||
|
||||
# 安装依赖
|
||||
echo ""
|
||||
echo "[STEP 1/5] Installing dependencies..."
|
||||
opkg update
|
||||
|
||||
# 安装 Python3 和 requests 库
|
||||
if ! command -v python3 >/dev/null 2>&1; then
|
||||
echo "[INFO] Installing python3..."
|
||||
opkg install python3 python3-light
|
||||
else
|
||||
echo "[OK] python3 already installed"
|
||||
fi
|
||||
|
||||
# 检查 requests 模块
|
||||
python3 -c "import requests" 2>/dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "[INFO] Installing python3-requests..."
|
||||
opkg install python3-requests
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "[WARNING] Failed to install python3-requests via opkg"
|
||||
echo "[INFO] Trying pip3 installation..."
|
||||
opkg install python3-pip
|
||||
pip3 install requests
|
||||
fi
|
||||
else
|
||||
echo "[OK] python3-requests already installed"
|
||||
fi
|
||||
|
||||
# 创建目录
|
||||
echo ""
|
||||
echo "[STEP 2/5] Creating directories..."
|
||||
mkdir -p /etc/drcom
|
||||
mkdir -p /var/log
|
||||
|
||||
# 复制文件
|
||||
echo ""
|
||||
echo "[STEP 3/5] Copying files..."
|
||||
|
||||
# 检查是否从当前目录安装
|
||||
if [ -f "./drcom_login_fixed.py" ]; then
|
||||
echo "[INFO] Installing from current directory..."
|
||||
cp -f ./drcom_login_fixed.py /usr/bin/drcom_login.py
|
||||
chmod +x /usr/bin/drcom_login.py
|
||||
elif [ -f "./drcom_login.py" ]; then
|
||||
echo "[INFO] Installing from current directory..."
|
||||
cp -f ./drcom_login.py /usr/bin/drcom_login.py
|
||||
chmod +x /usr/bin/drcom_login.py
|
||||
else
|
||||
echo "[ERROR] Main program not found!"
|
||||
echo "Please run this script from the project directory."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 安装 init.d 脚本
|
||||
if [ -f "./drcom-login" ]; then
|
||||
cp -f ./drcom-login /etc/init.d/drcom-login
|
||||
chmod +x /etc/init.d/drcom-login
|
||||
else
|
||||
echo "[WARNING] Init script not found, creating default..."
|
||||
# 这里会手动创建一个简单版本的
|
||||
fi
|
||||
|
||||
# 配置文件
|
||||
if [ ! -f "/etc/drcom/config.json" ]; then
|
||||
if [ -f "./config.json" ]; then
|
||||
cp -f ./config.json /etc/drcom/config.json
|
||||
else
|
||||
echo "[INFO] Creating default config file..."
|
||||
cat > /etc/drcom/config.json << EOF
|
||||
{
|
||||
"username": "your_username",
|
||||
"password": "your_password",
|
||||
"server_ip": "172.17.8.2",
|
||||
"server_port": 801,
|
||||
"interface": "eth1",
|
||||
"fixed_mac": ""
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
# 修改主程序以支持配置文件
|
||||
echo ""
|
||||
echo "[STEP 4/5] Configuring..."
|
||||
|
||||
# 备份原程序
|
||||
cp /usr/bin/drcom_login.py /usr/bin/drcom_login.py.bak
|
||||
|
||||
# 检查是否需要添加配置文件支持
|
||||
if ! grep -q "import json" /usr/bin/drcom_login.py; then
|
||||
echo "[ERROR] Main program structure incompatible"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[OK] Files installed successfully"
|
||||
|
||||
# 提示配置
|
||||
echo ""
|
||||
echo "[STEP 5/5] Configuration needed!"
|
||||
echo "${YELLOW}==========================================${NC}"
|
||||
echo "${YELLOW}Please edit the configuration file:${NC}"
|
||||
echo " vi /etc/drcom/config.json"
|
||||
echo ""
|
||||
echo "Change the following values:"
|
||||
echo " - username: Your campus network account"
|
||||
echo " - password: Your campus network password"
|
||||
echo " - server_ip: DRCom server IP (default: 172.17.8.2)"
|
||||
echo " - interface: Network interface (default: eth1)"
|
||||
echo "${YELLOW}==========================================${NC}"
|
||||
echo ""
|
||||
|
||||
# 询问是否立即启用
|
||||
echo "Do you want to start the service now? (y/n)"
|
||||
read -r choice
|
||||
if [ "$choice" = "y" ] || [ "$choice" = "Y" ]; then
|
||||
# 启用开机自启
|
||||
/etc/init.d/drcom-login enable
|
||||
|
||||
# 立即启动
|
||||
/etc/init.d/drcom-login start
|
||||
|
||||
echo ""
|
||||
echo "${GREEN}==========================================${NC}"
|
||||
echo "${GREEN}Installation completed!${NC}"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " Start: /etc/init.d/drcom-login start"
|
||||
echo " Stop: /etc/init.d/drcom-login stop"
|
||||
echo " Restart: /etc/init.d/drcom-login restart"
|
||||
echo " Status: /etc/init.d/drcom-login status"
|
||||
echo " Log: tail -f /var/log/drcom-login.log"
|
||||
echo "${GREEN}==========================================${NC}"
|
||||
else
|
||||
echo ""
|
||||
echo "${GREEN}Installation completed!${NC}"
|
||||
echo "Please edit config first, then run:"
|
||||
echo " /etc/init.d/drcom-login enable"
|
||||
echo " /etc/init.d/drcom-login start"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,62 @@
|
||||
#!/bin/sh
|
||||
# 日志管理脚本
|
||||
|
||||
LOGFILE="/var/log/drcom-login.log"
|
||||
PIDFILE="/var/run/drcom-login.pid"
|
||||
|
||||
case "$1" in
|
||||
view)
|
||||
if [ -f "$LOGFILE" ]; then
|
||||
tail -n 100 "$LOGFILE"
|
||||
else
|
||||
echo "[INFO] Log file not found: $LOGFILE"
|
||||
fi
|
||||
;;
|
||||
|
||||
follow)
|
||||
if [ -f "$LOGFILE" ]; then
|
||||
tail -f "$LOGFILE"
|
||||
else
|
||||
echo "[INFO] Log file not found: $LOGFILE"
|
||||
fi
|
||||
;;
|
||||
|
||||
clear)
|
||||
if [ -f "$LOGFILE" ]; then
|
||||
> "$LOGFILE"
|
||||
echo "[OK] Log file cleared."
|
||||
else
|
||||
echo "[INFO] Log file not found: $LOGFILE"
|
||||
fi
|
||||
;;
|
||||
|
||||
error)
|
||||
if [ -f "$LOGFILE" ]; then
|
||||
grep -i "error\|failed" "$LOGFILE" | tail -n 50
|
||||
else
|
||||
echo "[INFO] Log file not found: $LOGFILE"
|
||||
fi
|
||||
;;
|
||||
|
||||
success)
|
||||
if [ -f "$LOGFILE" ]; then
|
||||
grep -i "success\|✅" "$LOGFILE" | tail -n 50
|
||||
else
|
||||
echo "[INFO] Log file not found: $LOGFILE"
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: $0 {view|follow|clear|error|success}"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " view - View last 100 lines of log"
|
||||
echo " follow - Follow log in real-time"
|
||||
echo " clear - Clear log file"
|
||||
echo " error - Show only error messages"
|
||||
echo " success - Show only success messages"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
# OpenWrt DRCom 登录脚本 - 卸载脚本
|
||||
|
||||
echo "=========================================="
|
||||
echo " DRCom Login - OpenWrt Uninstall"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# 检查是否为 root 用户
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo "[ERROR] Please run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 停止服务
|
||||
echo "[STEP 1/4] Stopping service..."
|
||||
/etc/init.d/drcom-login stop 2>/dev/null
|
||||
|
||||
# 禁用开机自启
|
||||
echo "[STEP 2/4] Disabling auto-start..."
|
||||
/etc/init.d/drcom-login disable 2>/dev/null
|
||||
|
||||
# 删除文件
|
||||
echo "[STEP 3/4] Removing files..."
|
||||
rm -f /etc/init.d/drcom-login
|
||||
rm -f /usr/bin/drcom_login.py
|
||||
rm -f /usr/bin/drcom_login.py.bak
|
||||
rm -f /var/run/drcom-login.pid
|
||||
|
||||
# 询问是否删除配置和日志
|
||||
echo "[STEP 4/4] Cleanup..."
|
||||
echo "Remove configuration and log files? (y/n)"
|
||||
read -r choice
|
||||
|
||||
if [ "$choice" = "y" ] || [ "$choice" = "Y" ]; then
|
||||
rm -rf /etc/drcom
|
||||
rm -f /var/log/drcom-login.log
|
||||
echo "[OK] All files removed."
|
||||
else
|
||||
echo "[INFO] Configuration and log files preserved in:"
|
||||
echo " /etc/drcom/"
|
||||
echo " /var/log/drcom-login.log"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "[SUCCESS] DRCom Login has been uninstalled."
|
||||
exit 0
|
||||
Reference in New Issue
Block a user