欢迎光临
我们一直在努力

使用python定时更换小米路由器的IP 并更新ddns 非定时重启

前言

因为我自己有个服务器放在家里面,老友们都知道我自己搭建的有个挂机平台,虽然也有在用代理IP,但是代理IP的质量不行,某些脚本还动不动就黑IP,因此就想办法来弄个定时断开拨号并连上IP的服务,本来想使用脚本精灵来执行这个任务,但是需要打开浏览器,太占用内存了,因此想用py语言来实现这个,试了一下,确实挺好用!

准备工作

首先你要有一台小米路由器和一台一直运行的支持搭建有python的服务器

可以是win服务器 也可以是刷了armbian的WiFi棒子或者刷机后的玩客云等设备

当然  软路由和刷了OpenWrt的路由器也行

然后根据你的路由器的IP和管理密码 修改以下代码

import requests
import time

# 路由器的IP地址和登录凭证
router_ip = "192.168.31.1" # 根据你的路由器IP地址进行调整
username = "admin" # 小米路由器只输入密码  这个是默认账号 不用动
password = "password" # 你的路由器管理密码

def login():
try:
print("开始登录路由器...")
login_url = f"http://{router_ip}/cgi-bin/luci/api/xqsystem/login"
payload = {
'username': username,
'password': password
}
response = requests.post(login_url, data=payload)
response.raise_for_status()
token = response.json()['token']
print("登录成功,获取到token。")
return token
except requests.RequestException as e:
print(f"登录失败: {e}")
raise

def get_current_ip():
try:
response = requests.get("http://icanhazip.com")
response.raise_for_status()
ip = response.text.strip()
return ip
except requests.RequestException as e:
print(f"获取当前IP地址失败: {e}")
return None

def reconnect(token):
try:
print("停止PPPoE连接...")
stop_url = f"http://{router_ip}/cgi-bin/luci/;stok={token}/api/xqnetwork/pppoe_stop"
response = requests.post(stop_url)
response.raise_for_status()
print("PPPoE连接已停止。")
except requests.RequestException as e:
print(f"停止PPPoE连接失败: {e}")
raise

try:
print("启动PPPoE连接...")
start_url = f"http://{router_ip}/cgi-bin/luci/;stok={token}/api/xqnetwork/pppoe_start"
response = requests.post(start_url)
response.raise_for_status()
print("PPPoE连接已启动。")
except requests.RequestException as e:
print(f"启动PPPoE连接失败: {e}")
raise

def update_ddns(token):
try:
print("执行DDNS手动更新...")
ddns_update_url = f"http://{router_ip}/cgi-bin/luci/;stok={token}/api/xqnetwork/ddns_reload"
response = requests.get(ddns_update_url)
response.raise_for_status()
print("DDNS手动更新已执行。")
except requests.RequestException as e:
print(f"执行DDNS手动更新失败: {e}")
raise

def main():
try:
print("重拨之前的IP地址: ")
current_ip = get_current_ip()
if current_ip:
print(f"当前IP地址: {current_ip}")

token = login()
reconnect(token)

# 等待5秒钟
print("等待5秒钟...")
time.sleep(5)

print("重拨之后的IP地址: ")
time.sleep(5) # 再等待5秒钟
new_ip = get_current_ip()
if new_ip:
print(f"新的IP地址: {new_ip}")

# 等待10秒钟再执行DDNS更新
print("等待10秒钟...")
time.sleep(10)
update_ddns(token)

print("重拨和DDNS更新成功。")
except Exception as e:
print(f"重拨或DDNS更新失败: {e}")

if __name__ == "__main__":
main()

将以上代码保存为xiaomi.py 存放在你的服务器上  例如存放在/root里面 此时路径就是 /root/xiaomi.py

然后在定时任务里面添加这个脚本的运行规则 例如每小时的00执行该命令

linux环境 

假如你将以上代码保存为xiaomi.py 存放在/root里面 此时该文件的路径就是 /root/xiaomi.py

然后在定时任务里面添加这个脚本的运行规则,例如每小时的00执行该命令,具体步骤如下

  1. 打开 crontab 编辑器:
    crontab -e
    
  2. 在 crontab 编辑器中添加以下行:
    0 * * * * /usr/bin/python3   /root/xiaomi.py
    

    这行代码的含义是:每小时的第 00 分钟运行 /root/xiaomi.py 脚本。确保使用正确的 Python 路径,如果你的 Python 解释器路径是其他位置,请根据实际情况修改。例如,可以使用 which python3 命令查找 Python 的路径。

  3. 保存并退出编辑器。

解释 crontab 语法

0 * * * * /usr/bin/python3 /root/xiaomi.py 中的每个字段含义如下:

  • 0: 分钟(0表示每小时的第 00 分钟)
  • *: 小时(*表示每小时)
  • *: 天(*表示每天)
  • *: 月(*表示每月)
  • *: 星期(*表示每周的每一天)

Windows环境

假如你把代码命名为xiaomi.py 并存放在C盘根目录,此时文件的路径就是 C:\xiaomi.py

具体教程如下

在 Windows 环境下,你可以使用任务计划程序 (Task Scheduler) 来定时运行你的 脚本。以下是详细的步骤:

  1. 打开任务计划程序 (Task Scheduler):
    • 按 Win + R,输入 taskschd.msc 并按回车,或者从控制面板中找到任务计划程序。
  2. 创建一个基本任务:
    • 在任务计划程序的右侧,选择“创建基本任务”。
  3. 设置任务名称和描述:
    • 输入任务的名称和描述,然后点击“下一步”。
  4. 选择触发器:
    • 选择“每日”并点击“下一步”。
  5. 设置开始日期和时间:
    • 选择一个开始日期和时间。比如可以设置为当天的某个整点时间。点击“下一步”。
  6. 设置任务重复间隔:
    • 选择“每天”重复任务,并设置为1天。点击“下一步”。
  7. 选择操作:
    • 选择“启动程序”并点击“下一步”。
  8. 指定程序和脚本:
    • 在“程序/脚本”框中,输入 Python 解释器的路径。例如:C:\Python39\python.exe(根据你实际安装的 Python 路径)。
    • 在“添加参数”框中,输入你的 Python 脚本的路径。例如:C:\xiaomi.py
    • 在“起始于”框中,输入脚本所在目录。例如:C:\
    • 点击“下一步”。
  9. 完成任务创建:
    • 点击“完成”按钮,任务即被创建。

设置每小时重复

如果你希望脚本每小时运行一次,还需要修改任务的属性:

  1. 在任务计划程序中找到你刚创建的任务,右键点击并选择“属性”。
  2. 在“触发器”选项卡中,选择你之前创建的触发器,然后点击“编辑”。
  3. 在“高级设置”中,勾选“重复任务间隔”,选择“每 1 小时”,并设置“持续时间”为“无限”。
  4. 点击“确定”保存设置,然后再次点击“确定”关闭任务属性窗口。

示例任务创建

假设 Python 解释器路径为 C:\Python39\python.exe,脚本路径为 C:\xiaomi.py:

  • 程序/脚本: C:\Python39\python.exe
  • 添加参数: C:\xiaomi.py
  • 起始于: C:\

按照上述步骤,你的 Python 脚本将会在每小时的第 00 分钟运行。

赞(2)
未经允许不得转载:简单网 » 使用python定时更换小米路由器的IP 并更新ddns 非定时重启

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址