通过青龙面板脚本检测网络状态并重启路由器

moonjerx
2024-09-18 / 0 评论 / 47 阅读 / 正在检测是否收录...

在家庭网络环境中,路由器偶尔会出现断网的情况。为了避免手动重启路由器带来的不便,可以通过编写一个脚本来自动检测网络状态并在断网时重启路由器。本文将介绍如何在青龙面板上编写一个脚本来实现这一功能。

前提条件

  1. 已安装青龙面板。
  2. 路由器支持SSH,并且已开启SSH服务。
  3. 路由器的SSH端口已知(默认为22,本文假设已修改为20022)。

实现步骤

1. 创建脚本

首先,在青龙面板中创建一个新的脚本,用于检测网络状态并在必要时重启路由器。

# 检测网络状态并在断网超过2分钟时重启路由器
import time
import paramiko

def check_network(ip_address):
    import os
    response = os.system("ping -c 1 " + ip_address)
    return response == 0

def ssh_restart_router(host, username, password, port=20022):
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    try:
        client.connect(host, port=port, username=username, password=password)
        stdin, stdout, stderr = client.exec_command('/etc/init.d/system restart')
        print("Router is being restarted...")
    except Exception as e:
        print(f"Failed to connect to router: {e}")
    finally:
        client.close()

def main():
    router_ip = "192.168.1.1"  # 路由器的IP地址
    username = "root"
    password = "111111"
    ping_target = "8.8.8.8"  # 可以换成任意公网IP或域名
    
    last_down_time = None
    
    while True:
        if not check_network(ping_target):
            current_time = time.time()
            if last_down_time is None or (current_time - last_down_time) >= 120:
                print("Network is down, attempting to restart the router...")
                ssh_restart_router(router_ip, username, password, port=20022)
                last_down_time = current_time
        else:
            last_down_time = None
            print("Network is up.")
        
        time.sleep(60)  # 每60秒检查一次

if __name__ == "__main__":
    main()
2. 配置定时任务

在青龙面板中,配置定时任务来定期执行上述脚本。例如,可以设置每5分钟执行一次。

  1. 进入定时任务设置

    • 在青龙面板的定时任务管理界面,创建一个新的定时任务。
  2. 设置定时任务

    • 设定定时任务的执行频率,例如每5分钟执行一次。
    • 选择刚刚创建的脚本作为执行对象。

注意事项

  • 安全性:确保路由器的SSH访问是安全的,并且只允许受信任的设备访问。
  • 频繁重启的影响:频繁重启路由器可能会对硬件造成损害,因此请调整检测间隔和重启逻辑,确保不会频繁重启。
0

评论 (0)

取消

您的IP: