我这个是 TL-WDR6500电信定制千兆版本,长时间开机会死机,不知道什么原因,想定时重启一下,可是路由器并没有自带这个功能,网上找了一圈,有python写的,但是对方的系统似乎不太一样,不通用,于是抓了个包,记录一下 重启的请求
通CURL命令先登录:
curl -s 'http://tplogin.cn/' --data '{"method":"do","login":{"password":"r983xXzd9fefbdq"}}'
请求最后的password。 需要修改成自己的秘密,加密之后的密文(浏览器的网络调试里面自己找一下)
重启
curl -s -H "Content-Type: application/json" -X POST -d '{"system":{"reboot":null},"method":"do"}' "http://tplogin.cn/stok=03743713e93d36820cebb86e82bce2ad/ds"
URL中的 stok 需要修改为 登录中获取到的 stok 即可
编写了个shell脚本,可以参考一下,使用内网linux 之类的主机crontab任务
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo $(date +%F%n%T) [info]开始登录路由器
echo $(date +%F%n%T) [info]登录获取stok
tp_login=$(curl -s 'http://192.168.0.1/' --data '{"method":"do","login":{"password":"这里填写上面获取的密码密文"}}' )
echo $(date +%F%n%T) [info] $tp_login
echo $(date +%F%n%T) [info]提取重启前的stok
tp_stok=$(echo $tp_login |awk -F '"' '{print $4}')
echo $(date +%F%n%T) [info] $tp_stok
echo $(date +%F%n%T) [info]获取网络状态
tp_wan_status=$(curl -s -H "Content-Type: application/json" -X POST -d '{"network":{"name":["wan_status"]},"method":"get"}' "http://192.168.0.1/stok=$tp_stok/ds")
echo $(date +%F%n%T) [info]提取重启前的WAN口IP地址
tp_IP_ADDR=$(echo $tp_wan_status |awk -F '"' '{print $40}' )
echo $(date +%F%n%T) [info] $tp_IP_ADDR
echo $(date +%F%n%T) [info]开始执行重启命令
route_reboot=$(curl -s -H "Content-Type: application/json" -X POST -d '{"system":{"reboot":null},"method":"do"}' "http://192.168.0.1/stok=$tp_stok/ds")
echo $(date +%F%n%T) [info] $route_reboot
#------------------重启之后-----------------------------------------------------
wait_time=$(echo $route_reboot | awk -F ':' '{print $2}' |awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++){if($i ~ /[[:digit:]]/){str=$i;str1=(str1 str)}}print str1}')
echo $(date +%F%n%T) [info]重启中等待 $wait_time 秒路由器自动开机拨号
sleep $wait_time
echo $(date +%F%n%T) [info]重启完成
echo $(date +%F%n%T) [info]登录路由器获取新的stok
tp_login2=$(curl -s 'http://192.168.0.1/' --data '{"method":"do","login":{"password":"这里填写上面获取的密码密文"}}' )
tp_stok2=$(echo $tp_login2 |awk -F '"' '{print $4}')
echo $(date +%F%n%T) [info] $tp_stok2
sleep 2
echo $(date +%F%n%T) [info]获取新的网络状态
tp_wan_status2=$(curl -s -H "Content-Type: application/json" -X POST -d '{"network":{"name":["wan_status"]},"method":"get"}' "http://192.168.0.1/stok=$tp_stok2/ds")
tp_IP_ADDR2=$(echo $tp_wan_status2 |awk -F '"' '{print $40}' )
tp_Proto=$(echo $tp_wan_status2 |awk -F '"' '{print $10}')
tp_gateway=$(echo $tp_wan_status2 |awk -F '"' '{print $30}')
tp_DNS1=$(echo $tp_wan_status2 |awk -F '"' '{print $14}')
tp_DNS2=$(echo $tp_wan_status2 |awk -F '"' '{print $36}')
echo $(date +%F%n%T) [info]获取公网IP地址
publicip=$(curl -k -s --retry 3 https://myip.ipip.net)
publicip1=$(echo $publicip |awk --re-interval '{match($0,/([0-9]{1,3}\.){3}[0-9]{1,3}/,a); print a[0]}')
publicip2=$(echo $publicip |awk -F '于:' '{print $2}')
echo $(date +%F%n%T) [info] $publicip
sleep 2
echo $(date +%F%n%T) [info]退出登录
exit_route=$(curl -s -H "Content-Type: application/json" -X POST -d '{"system":{"logout":"null"},"method":"do"}' "http://192.168.0.1/stok=$tp_stok2/ds")
echo $(date +%F%n%T) [info] $exit_route
time=$(date "+%Y-%m-%d %H:%M:%S")
#-------------------------------------------------------
echo $(date +%F%n%T) [info]钉钉发送重启成功消息通知
temp=$(vcgencmd measure_temp | cut -d "=" -f 2)
curl -k -s --retry 3 'https://oapi.dingtalk.com/robot/send?access_token=这里填写钉钉机器人的token' \
-H 'Content-Type: application/json' \
-d '
{
"msgtype": "markdown",
"markdown": {
"title": "'"TL-WDR6500"'",
"text": "'"### **TL-WDR6500**
\n
\n ###### 通知时间: $time
\n -------------------
\n **路由器信息▼**
\n ###### 连接方式:$tp_Proto
\n ###### Wan__IP:$tp_IP_ADDR2
\n ###### 公网__IP:$publicip1
\n ###### 公网地址:$publicip2
\n ###### 重启前IP:$tp_IP_ADDR
\n ###### Gateway:$tp_gateway
\n ###### 获取DNS1:$tp_DNS1
\n ###### 获取DNS2:$tp_DNS2
\n ---
\n ###### 树莓派CPU温度:$temp
\n "'"
},
}' >/dev/null 2>&1
echo $(date +%F%n%T) [info]重启流程完成