
OpenWrt/Padavan路由器部署Drcom自动登录3种脚本方案与断线重连策略实测在校园网或企业网络环境中Drcom认证系统广泛用于网络接入控制。对于使用OpenWrt或Padavan等开源固件的路由器用户来说手动登录认证页面既繁琐又低效。本文将介绍三种基于Shell脚本的自动登录方案并提供详细的断线重连策略帮助网络管理员和家庭用户实现无人值守的网络认证。1. 环境准备与认证分析在开始部署自动登录方案前我们需要先了解Drcom认证的基本原理并准备好必要的工具和环境。大多数Drcom认证系统基于HTTP协议通过GET或POST请求提交认证信息。1.1 抓包分析认证流程使用Wireshark或Chrome开发者工具捕获认证过程中的网络请求# 安装WiresharkDebian/Ubuntu sudo apt install wireshark # 或者使用tcpdump进行简单抓包 sudo tcpdump -i eth0 -w drcom.pcap port 80 or port 801通过分析抓包数据我们可以确定认证请求的关键参数参数类型GET请求示例POST请求示例请求地址http://172.30.255.42:801/eportal/portal/login/http://172.30.255.42:801/eportal/账号参数user_accountDDDDD密码参数user_passwordupass其他参数-ver1.3.5.201712141.P.W.A,cACSetting,aLogin1.2 路由器环境配置确保路由器满足以下条件已刷入OpenWrt或Padavan固件开启SSH访问权限安装必要的命令行工具# OpenWrt安装curl和wget opkg update opkg install curl wget # Padavan通常已预装这些工具2. 基础脚本方案我们提供三种不同实现的自动登录脚本适用于不同场景和路由器性能。2.1 curl基础版#!/bin/sh # 配置认证信息 USERNAME你的校园卡号 PASSWORD你的密码 LOGIN_URLhttp://172.30.255.42:801/eportal/ # 执行POST认证 curl -X POST \ -d DDDDD$USERNAME \ -d upass$PASSWORD \ -d ver1.3.5.201712141.P.W.A \ -d cACSetting \ -d aLogin \ $LOGIN_URL # 记录日志 logger -t Drcom CURL认证请求已发送优点代码简洁易于理解curl在大多数系统中默认安装支持HTTPS等高级协议2.2 wget精简版#!/bin/sh # 配置认证信息 USERNAME你的校园卡号 PASSWORD你的密码 LOGIN_URLhttp://172.30.255.42:801/eportal/portal/login/?user_account$USERNAMEuser_password$PASSWORD # 执行GET认证 wget --quiet --output-document/dev/null $LOGIN_URL # 记录日志 logger -t Drcom WGET认证请求已发送适用场景资源受限的路由器只需要GET请求的简单认证系统curl不可用时的备选方案2.3 带状态检测的守护进程版#!/bin/sh # 配置信息 USERNAME你的校园卡号 PASSWORD你的密码 LOGIN_URLhttp://172.30.255.42:801/eportal/ TEST_URLhttp://www.baidu.com INTERVAL60 # 认证函数 do_login() { curl -X POST \ -d DDDDD$USERNAME \ -d upass$PASSWORD \ -d ver1.3.5.201712141.P.W.A \ -d cACSetting \ -d aLogin \ $LOGIN_URL } # 网络检测函数 check_network() { ping -c 3 -W 2 www.baidu.com /dev/null 21 return $? } # 主循环 while true; do if ! check_network; then logger -t Drcom 网络连接异常尝试重新认证 do_login sleep 10 # 认证后等待 else logger -t Drcom 网络连接正常 fi sleep $INTERVAL done高级功能定期检测网络连通性断线自动重连日志记录便于排查问题3. 部署与自启动配置将脚本部署到路由器并设置开机自启动是保证长期稳定运行的关键。3.1 脚本上传与权限设置使用SCP将脚本上传到路由器# 从本地计算机上传脚本 scp drcom_auto_login.sh root192.168.1.1:/usr/bin/设置执行权限# 登录路由器 ssh root192.168.1.1 # 设置权限 chmod x /usr/bin/drcom_auto_login.sh3.2 OpenWrt开机自启配置通过/etc/rc.local实现# 编辑rc.local文件 vi /etc/rc.local # 在exit 0前添加 /usr/bin/drcom_auto_login.sh 或者使用init.d脚本# 创建init.d脚本 cat /etc/init.d/drcom EOF #!/bin/sh /etc/rc.common START99 STOP15 start() { /usr/bin/drcom_auto_login.sh } stop() { killall drcom_auto_login.sh } EOF # 设置权限并启用 chmod x /etc/init.d/drcom /etc/init.d/drcom enable3.3 Padavan固件配置Padavan可通过Web界面配置登录路由器管理页面进入高级设置 → 自定义设置 → 脚本在在路由器启动后执行或在WAN上行/下行启动后执行中添加/usr/bin/drcom_auto_login.sh 4. 断线重连优化策略基础的重连机制可能不足以应对所有网络异常情况我们需要更健壮的解决方案。4.1 多重检测机制改进的网络检测脚本check_network() { # 检测1: Ping测试 ping -c 2 -W 1 119.29.29.29 /dev/null 21 [ $? -eq 0 ] return 0 # 检测2: HTTP访问测试 HTTP_CODE$(curl -o /dev/null -s -w %{http_code} http://www.baidu.com -m 5) [ $HTTP_CODE 200 ] return 0 # 检测3: DNS解析测试 nslookup www.qq.com /dev/null 21 [ $? -eq 0 ] return 0 return 1 }4.2 指数退避重试算法# 重试参数 MAX_RETRY5 BASE_DELAY10 retry_count0 while [ $retry_count -lt $MAX_RETRY ]; do if check_network; then break fi # 计算等待时间 (指数退避) delay$((BASE_DELAY * (2 ** retry_count))) logger -t Drcom 网络异常等待${delay}秒后重试($((retry_count1))/$MAX_RETRY) sleep $delay do_login retry_count$((retry_count 1)) done4.3 日志与通知系统增强的日志记录log() { local now$(date %Y-%m-%d %H:%M:%S) local status$1 local message$2 # 记录到系统日志 logger -t Drcom [$status] $message # 记录到独立日志文件 echo [$now] [$status] $message /var/log/drcom.log # 日志轮转 log_size$(wc -c /var/log/drcom.log) [ $log_size -gt 1048576 ] mv /var/log/drcom.log /var/log/drcom.log.old }5. 高级功能扩展对于有更高需求的用户可以考虑实现以下高级功能。5.1 多账号支持# 账号列表文件格式username:password ACCOUNT_FILE/etc/drcom_accounts.conf # 轮询尝试所有账号 while IFS: read -r user pass; do curl -X POST \ -d DDDDD$user \ -d upass$pass \ -d ver1.3.5.201712141.P.W.A \ -d cACSetting \ -d aLogin \ $LOGIN_URL if check_network; then logger -t Drcom 账号 $user 认证成功 break fi done $ACCOUNT_FILE5.2 Telegram通知集成# 配置Telegram Bot TG_TOKEN你的BotToken TG_CHAT_ID你的ChatID send_telegram() { local message$1 curl -s -X POST \ https://api.telegram.org/bot${TG_TOKEN}/sendMessage \ -d chat_id${TG_CHAT_ID} \ -d text${message} \ -d parse_modeMarkdown } # 使用示例 send_telegram Drcom认证失败正在尝试重连...5.3 网页状态监控创建一个简单的状态页面# 安装lighttpd如果尚未安装 opkg update opkg install lighttpd lighttpd-mod-cgi # 创建状态脚本 cat /www/cgi-bin/status EOF #!/bin/sh echo Content-type: text/html echo echo htmlheadtitleDrcom状态/title/headbody echo h1Drcom认证状态/h1 echo pre date echo if check_network; then echo 状态: span stylecolor:green在线/span else echo 状态: span stylecolor:red离线/span fi echo echo 最后10条日志: tail -n 10 /var/log/drcom.log echo /pre/body/html EOF chmod x /www/cgi-bin/status访问http://路由器IP/cgi-bin/status即可查看状态。6. 常见问题排查即使是最稳定的方案也可能遇到问题这里提供常见问题的解决方法。6.1 认证失败排查步骤检查网络连通性ping -c 3 认证服务器IP手动测试认证curl -v -X POST \ -d DDDDD测试账号 \ -d upass测试密码 \ http://认证服务器地址检查系统时间date查看防火墙规则iptables -L -n -v6.2 日志分析技巧常见日志模式与对应问题日志模式可能原因解决方案curl: (6) Could not resolve hostDNS解析失败检查DNS配置更换DNS服务器curl: (7) Failed to connect网络不通或服务器宕机检查网络连接确认服务器IP返回Login succeed但无法上网认证成功但路由有问题检查路由表确认网关频繁重连网络不稳定或认证会话短调整检测间隔联系网络管理员6.3 性能优化建议对于资源紧张的路由器使用更轻量的wget代替curl增加检测间隔时间如从60秒改为300秒简化检测逻辑减少ping和curl测试次数使用busybox内置命令替代完整版命令# 使用busybox的轻量级命令 /bin/busybox ping -c 1 119.29.29.297. 安全注意事项自动化认证虽然方便但也需要注意安全风险。7.1 密码安全存储避免在脚本中明文存储密码# 使用openssl加密密码文件 echo 你的密码 | openssl enc -aes-256-cbc -salt -out /etc/drcom_pass.enc -k 加密密钥 # 解密使用 PASSWORD$(openssl enc -aes-256-cbc -d -in /etc/drcom_pass.enc -k 加密密钥)7.2 最小权限原则为脚本创建专用用户adduser -D -H drcomuser chown drcomuser /usr/bin/drcom_auto_login.sh限制日志文件权限chmod 600 /var/log/drcom.log7.3 定期更新机制设置定期检查脚本更新的功能# 每周检查一次更新 0 3 * * 1 curl -s https://example.com/drcom_auto_login.sh | diff - /usr/bin/drcom_auto_login.sh { logger -t Drcom 检测到脚本更新正在替换... curl -s https://example.com/drcom_auto_login.sh -o /usr/bin/drcom_auto_login.sh chmod x /usr/bin/drcom_auto_login.sh }8. 方案对比与选择指南三种主要方案各有优缺点根据实际需求选择特性curl基础版wget精简版守护进程版复杂度低最低高资源占用中低中-高断线检测无无有自动重连无无有适用场景网络稳定环境资源受限设备不稳定网络选择建议对可靠性要求不高使用curl或wget基础版路由器性能有限选择wget精简版网络不稳定或需要高可靠性必须使用守护进程版多用户环境考虑扩展多账号支持功能9. 维护与升级长期稳定运行需要定期维护和适时升级。9.1 监控脚本健康状况添加自监控功能# 检查进程是否运行 if ! pgrep -f drcom_auto_login.sh /dev/null; then logger -t Drcom 监控: 脚本未运行重新启动 /usr/bin/drcom_auto_login.sh fi9.2 认证协议变更应对Drcom可能会更新认证协议建议定期测试认证功能保存抓包工具和配置以备不时之需关注相关社区和论坛的更新动态9.3 社区资源利用有用的社区资源OpenWrt官方论坛Padavan固件交流群GitHub上的开源项目学校或企业的IT支持论坛10. 实际案例分享最后分享几个实际部署中的经验教训案例一认证频繁掉线问题每2小时掉线一次原因Drcom服务器设置了会话超时解决将检测间隔调整为30分钟确保在超时后快速重连案例二脚本占用过高CPU问题路由器负载飙升原因检测间隔太短10秒解决调整为300秒并优化检测逻辑案例三认证成功后仍无法上网问题脚本显示成功但设备无法访问网络原因路由表未正确更新解决在认证成功后添加路由表更新命令这些方案在实际运行中表现稳定一个部署在Padavan路由器上的守护进程版脚本已连续运行超过180天处理了数百次断线重连极大提升了网络可用性。