OpenWrt/Padavan路由器部署:3种Drcom自动登录脚本配置与断线重连方案
OpenWrt/Padavan路由器部署3种Drcom自动登录脚本配置与断线重连方案对于使用第三方固件的路由器用户来说实现Drcom校园网认证的自动登录一直是个痛点。本文将深入分析三种不同的自动登录方案从基础的cURL/wget命令到更健壮的守护进程脚本帮助您根据实际需求选择最适合的部署方式。1. 环境准备与基础配置在开始部署自动登录脚本前我们需要确保路由器环境已正确配置。以下是基础准备工作固件选择与SSH访问确认路由器已刷入OpenWrt或Padavan等支持自定义脚本的第三方固件启用SSH服务并确保能够通过PuTTY或终端访问路由器后台验证网络接口名称通常为wan或pppoe-wan必要工具检查通过SSH登录路由器后运行以下命令检查必要工具是否可用# 检查curl和wget是否安装 which curl curl --version | head -n 1 which wget wget --version | head -n 1 # 检查ping工具 which ping ping -c 1 127.0.0.1认证信息获取通过浏览器开发者工具或Wireshark抓包分析获取以下关键信息认证服务器地址如172.30.255.42:801认证路径如/eportal/portal/login账号参数名称如user_account或DDDDD密码参数名称如user_password或upass2. 基础方案cURL/wget单次认证2.1 cURL实现方案cURL是功能强大的网络传输工具支持多种协议。对于GET请求方式的认证可使用以下命令模板curl -G \ -d user_account你的账号 \ -d user_password你的密码 \ http://认证服务器:端口/eportal/portal/login对于POST请求方式的认证命令如下curl -X POST \ -d DDDDD你的账号 \ -d upass你的密码 \ -d ver1.3.5.201712141.P.W.A \ -d cACSetting \ -d aLogin \ http://认证服务器:端口/eportal/2.2 wget实现方案wget是另一个常用的网络下载工具同样可用于认证请求# GET请求方式 wget -q -O- http://认证服务器:端口/eportal/portal/login?user_account你的账号user_password你的密码 # POST请求方式 wget -q -O- \ --post-dataDDDDD你的账号upass你的密码ver1.3.5.201712141.P.W.AcACSettingaLogin \ http://认证服务器:端口/eportal/2.3 方案对比与选择特性cURL方案wget方案协议支持更丰富较基础参数灵活性更高一般资源占用略高较低输出控制更精细较简单提示如果路由器资源有限建议优先考虑wget方案如果需要更复杂的请求构造cURL更为适合。3. 进阶方案集成网络检测的守护脚本基础方案只能实现单次认证无法处理网络中断后的自动重连。下面介绍一个结合网络状态检测的守护进程脚本。3.1 脚本核心逻辑#!/bin/sh # 首次执行等待网络接口就绪 sleep 30 logger 【Drcom AutoLogin】脚本启动... while true; do # 检测网络连通性 ping_result$(ping -c 3 8.8.8.8 | grep 0 packets received) if [ -n $ping_result ]; then logger 【Drcom AutoLogin】检测到断网尝试重新认证... # 执行认证命令根据实际认证方式选择 auth_result$(curl -X POST \ -d DDDDD你的账号 \ -d upass你的密码 \ http://认证服务器:端口/eportal/) logger 【Drcom AutoLogin】认证结果$auth_result else logger 【Drcom AutoLogin】网络正常 fi # 每60秒检测一次 sleep 60 done3.2 关键参数说明ping检测目标建议选择稳定的DNS服务器如8.8.8.8或114.114.114.114检测间隔可根据网络稳定性调整通常30-60秒为宜认证失败处理可添加重试逻辑和失败报警机制3.3 部署方法将脚本保存为/usr/local/bin/drcom_daemon.sh添加执行权限chmod x /usr/local/bin/drcom_daemon.sh设置开机自启以OpenWrt为例echo /usr/local/bin/drcom_daemon.sh /etc/rc.local4. 高级方案Python实现的完整认证系统对于需要更复杂逻辑的环境可以使用Python实现完整的认证系统。以下是核心功能模块4.1 依赖安装# OpenWrt下安装Python3和必要库 opkg update opkg install python3 python3-pip pip3 install requests pycryptodome4.2 Python认证脚本示例#!/usr/bin/env python3 import requests import time import socket import fcntl import struct # 配置区域 SERVER 172.30.255.42 PORT 801 USERNAME 你的账号 PASSWORD 你的密码 INTERFACE wan # 网络接口名称 def get_ip_address(ifname): 获取指定接口的IP地址 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()) )[20:24]) def drcom_login(): 执行Drcom认证 try: ip get_ip_address(INTERFACE) url fhttp://{SERVER}:{PORT}/eportal/ payload { DDDDD: f,0,{USERNAME}, upass: PASSWORD, R1: 0, R2: 0, R3: 0, R6: 0, para: 00, 0MKKey: 123456, buttonClicked: , redirect_url: , err_flag: , username: , password: , user: , cmd: , Login: } headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64), Referer: fhttp://{SERVER}/a79.htm } response requests.post(url, datapayload, headersheaders) return Login succeed in response.text except Exception as e: print(f登录失败: {str(e)}) return False if __name__ __main__: while True: if not drcom_login(): print(认证失败60秒后重试...) else: print(认证成功) time.sleep(60)4.3 方案优势更健壮的异常处理完善的错误捕获和重试机制动态IP获取直接从网络接口读取当前IP地址请求头模拟更接近浏览器行为减少被服务器拒绝的可能模块化设计便于扩展和维护5. 方案优化与故障排查5.1 性能优化技巧请求压缩添加Accept-Encoding: gzip头减少传输数据量连接复用保持HTTP长连接减少握手开销超时设置合理设置连接和读取超时避免长时间阻塞# 带超时设置的cURL示例 curl --connect-timeout 10 --max-time 20 -X POST \ -d DDDDD你的账号 \ http://认证服务器:端口/eportal/5.2 常见问题排查问题现象可能原因解决方案认证超时服务器无响应检查服务器地址和端口是否正确返回错误页面参数不完整验证所有必需参数是否包含间歇性失败网络不稳定增加重试次数和间隔账号被锁定频繁请求降低检测频率添加随机延迟5.3 日志分析技巧有效的日志记录是排查问题的关键。建议在脚本中添加详细的日志记录# 在shell脚本中添加时间戳日志 log() { echo $(date %Y-%m-%d %H:%M:%S) - $1 logger -t DrcomAutoLogin $1 } # 使用示例 log 开始执行网络检测 ping_result$(ping -c 2 8.8.8.8) log Ping测试结果$ping_result通过系统日志工具可以方便地查看历史记录# 查看最近的认证日志 logread -e DrcomAutoLogin -n 206. 安全与维护建议认证信息安全避免在脚本中明文存储密码使用路由器提供的加密存储功能设置适当的文件权限如600脚本维护定期检查认证接口是否有变更关注固件更新可能带来的兼容性问题保留多个版本的备份以便快速回滚资源监控观察脚本运行时的CPU和内存占用对于资源紧张的路由器适当降低检测频率避免同时运行多个检测实例7. 方案扩展与进阶应用对于有更高需求的用户可以考虑以下扩展功能多账号轮换在流量限制场景下自动切换不同账号网络质量监测记录延迟和丢包率数据远程通知通过Telegram或邮件发送状态变更提醒Web控制界面提供简单的管理页面控制脚本运行一个集成Telegram通知的示例代码片段import requests def send_telegram_notification(message, bot_token, chat_id): url fhttps://api.telegram.org/bot{bot_token}/sendMessage payload { chat_id: chat_id, text: message, parse_mode: HTML } try: requests.post(url, datapayload, timeout10) except Exception as e: print(f通知发送失败: {str(e)}) # 在认证成功/失败时调用 send_telegram_notification(Drcom认证成功, 你的BotToken, 你的ChatID)通过本文介绍的三种方案您可以根据实际需求和路由器性能选择最适合的部署方式。从简单的单次认证到健壮的守护进程每种方案都有其适用场景。建议从基础方案开始逐步过渡到更复杂的实现确保在功能完善性和系统稳定性之间取得平衡。