本帖最后由 千人千面 于 2023-12-9 11:59 编辑
某NAS DSM7.X版本的Surveillance Station破解授权数量后,基本上每隔30分钟~1小时,摄像机就会显示正在停止。然后就不工作了,这个时候把套件停止后再启用基本上就可以恢复正常了,但是这个方法会导致客户端断开连接,不过,只要你手动去停止摄像头,然后再手动启用摄像头,这个时候它又恢复正常了{:301_1001:}
于是我就想,有没有一种方法能自动化这个,停用→启用的过程。
答案是有的,我通过Wireshark抓包,获取了这个操作的POST。然后通过Python脚本来执行这个过程{:301_986:}
由于抓包分析的过程灰常的简单,我这里就不复现这个过程了,下面直接放出Python脚本
脚本很简单,通过自动登录获取cookie,然后发送post请求,自动化禁用,启用这两个操作。
from datetime import datetime
import json
import requests
print('run task',datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
# 服务器地址和端口
host = "http://192.168.1.5:5000/webapi/entry.cgi"
params = {
"api": "SYNO.API.Auth",
"method": "login",
"version": "6",
"account": "你的NAS账号",
"passwd": "你的NAS密码",
"format": "sid",
"session": "SurveillanceStation",
}
loginResult = requests.get(url=host, params=params)
loginLoads = json.loads(loginResult.content.decode("utf-8"))
loginJson = loginLoads.get("data")
logindid = loginJson.get("did")
loginsid = loginJson.get("sid")
# cookie
headers = {
"Cookie": "id="
+ loginsid
+ "; did="
+ logindid
+ "; svs_dual_auth=; SscLanguage=chs"
}
print("login success...")
# 参数
body = {
"cameraIds": "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16",#这里你有多少个摄像头就填到多少
"blIncludeDeletedCam": "false",
"api": "SYNO.SurveillanceStation.Camera",
"method": "",
"version": "7",
}
# 发送请求,先停止
body["method"] = "Disable"
result1 = requests.post(url=host, data=body, headers=headers)
# 输出返回
result1Loads = json.loads(loginResult.content.decode("utf-8"))
result1Json = loginLoads.get("success")
if result1Json:
print("Disable success...")
# 发送请求,再启用
body["method"] = "Enable"
result2 = requests.post(url=host, data=body, headers=headers)
result2Loads = json.loads(loginResult.content.decode("utf-8"))
result2Json = loginLoads.get("success")
# 输出返回
if result2Json:
print("Enable success...")
print('Task complate',datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
2023年12月9日更新一下,Bash脚本~无需折腾python
直接计划任务运行即可
bash /volume1/xxx/autoEnableCam.sh
#!/bin/bash
echo "run task $(date +'%Y-%m-%d %H:%M:%S.%3N')"
# 服务器地址
host="http://192.168.1.6:5000/webapi/entry.cgi"
# 登录
loginResult=$(curl -s "$host" -G -d "api=SYNO.API.Auth" -d "method=login" -d "version=6" -d "account=你的账号" -d "passwd=你的密码" -d "format=sid" -d "session=SurveillanceStation")
logindid=$(echo "$loginResult" | jq -r '.data.did')
loginsid=$(echo "$loginResult" | jq -r '.data.sid')
# cookie
cookie="id=$loginsid; did=$logindid; svs_dual_auth=; SscLanguage=chs"
echo "login success..."
# 参数
cameraIds="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16"
api="SYNO.SurveillanceStation.Camera"
version="7"
# 发送请求,先停止
result1=$(curl -s "$host" -X POST -d "cameraIds=$cameraIds" -d "blIncludeDeletedCam=false" -d "api=$api" -d "method=Disable" -d "version=$version" -H "Cookie: $cookie")
if [[ $(echo "$result1" | jq -r '.success') == "true" ]]; then
echo "Disable success..."
fi
# 发送请求,再启用
result2=$(curl -s "$host" -X POST -d "cameraIds=$cameraIds" -d "blIncludeDeletedCam=false" -d "api=$api" -d "method=Enable" -d "version=$version" -H "Cookie: $cookie")
if [[ $(echo "$result2" | jq -r '.success') == "true" ]]; then
echo "Enable success..."
fi
echo "Task complete $(date +'%Y-%m-%d %H:%M:%S.%3N')"
最后,我们配合NAS自带的任务计划,每隔半小时运行一次
最好是再配合这句,每隔6小时重启一次服务/usr/syno/bin/synopkg restart SurveillanceStation
收工~
对了,NAS上需要安装Python Pip,大家需要自行百度相关教程,当然,如果有大神可以写一个bash命令行版本的那就简直太棒了
|