集成海康威视Sadp SDK实现重置密码
下面將介紹集成SadpSDK的接口調(diào)用流程,以及使用到的接口功能說(shuō)明。如有疑問(wèn)歡迎留言探討。
?
?圖中橘黃色部分為程序外部操作。
?
-
判斷設(shè)備支持的重置方式
?????? 導(dǎo)出導(dǎo)入文件重置密碼,設(shè)備基本上都支持?重置密碼?或者?重置密碼方式2 ,由于重置密碼方式2方案更安全所以如果支持的話優(yōu)先選擇使用重置密碼方式2
???????????????? SADP_DEVICE_INFO結(jié)構(gòu)體中
????????????????????????? (bySupport & 0x40 ) == 1,表示支持重置密碼
????????????????????????? (bySupport1 & 0x01 ) == 1,表示支持重置密碼方式2
?
-
獲取設(shè)備碼
?????? 獲取接口?SADP_GetDeviceConfig, 命令碼為SADP_GET_DEVICE_CODE。獲取到設(shè)備碼后將字符串保存到一個(gè)本地文件中(例如:Device.xml)。然后將這個(gè)文件發(fā)送給海康技術(shù)支持,他們會(huì)返回一個(gè)設(shè)備重置口令文件給你,該文件中的字符串將作為重置密碼接口的一個(gè)輸入?yún)?shù)
?
?
-
獲取解密串
?????? 獲取接口?SADP_GetDeviceConfig, 命令碼為?SADP_GET_ENCRYPT_STRING。獲取到加密串后將字符串保存到一個(gè)本地文件中(例如:Device.xml)。然后將這個(gè)文件發(fā)送給海康技術(shù)支持,他們會(huì)返回一個(gè)設(shè)備重置口令文件給你,該文件中的字符串將作為重置密碼接口的一個(gè)輸入?yún)?shù)
?
-
重置密碼
?????? 重置接口?SADP_ResetPasswd_V40。該接口最重要的就是需要?設(shè)備重置口令。
?
?
-
?示例代碼
?
#include <stdio.h> #include <windows.h> #include "Sadp.h"//設(shè)備信息回調(diào)函數(shù) void CALLBACK SadpDataCallBack(const SADP_DEVICE_INFO_V40 *lpDeviceInfoV40, void* pUserData) {printf("\r\n----------------------------------------\r\n");printf(" IP %s\r\n", lpDeviceInfoV40->struSadpDeviceInfo.szIPv4Address); //設(shè)備ipprintf(" Mac %s\r\n", lpDeviceInfoV40->struSadpDeviceInfo.szMAC); //設(shè)備Mac地址printf("SerialNO %s\r\n", lpDeviceInfoV40->struSadpDeviceInfo.szSerialNO); //設(shè)備序列號(hào)printf(" Result %d\r\n", lpDeviceInfoV40->struSadpDeviceInfo.iResult); //消息類型: 1.設(shè)備上線, 2.設(shè)備更新, 3.設(shè)備下線printf("\r\n----------------------------------------\r\n"); }//導(dǎo)出導(dǎo)入文件重置密碼 int main(void) {//開(kāi)啟sadp日志 3(打印所以日志) "C:\\SadpLog"(日志目錄) false(保留所有日志文件)SADP_SetLogToFile(3, "C:\\SadpLog", false);//開(kāi)啟sadp服務(wù)int iRet = SADP_Start_V40(SadpDataCallBack);if (iRet == 0){//開(kāi)啟失敗,獲取錯(cuò)誤碼int iError = SADP_GetLastError();printf("SADP_Start_V40 Failed! Err(%d)\r\n", iError);}//等待一會(huì),修改網(wǎng)絡(luò)參數(shù)前需要SDK搜索到被修改設(shè)備才行Sleep(10000);//這里以重置密碼方式2為例SADP_ENCRYPT_STRING struEncryptString;iRet = SADP_GetDeviceConfig("DS-2CD2622FWD-IZS20180312BBWR681619114", SADP_GET_ENCRYPT_STRING, NULL, 0, &struEncryptString, sizeof(struEncryptString));if (iRet == 0){int iError = SADP_GetLastError();char szTemp[100] = { 0 };if (iError == SADP_NOT_ACTIVATED){printf("設(shè)備未激活!");}else if (iError == SADP_TIMEOUT){printf("獲取超時(shí)!");}else if (iError == SADP_DEVICE_DENY){printf("設(shè)備拒絕處理!");}else{printf("Get device code failed, Error code%d", iError);}//釋放資源SADP_Stop();return 0;}printf("Get device code succ, [%s]", struEncryptString.szEncryptString);//將加密串寫(xiě)入本地文件FILE *pFile = fopen("C:\\Device.xml", "wb");if (NULL == pFile){printf("Open File failed");//釋放資源SADP_Stop();return 0;}int iWriteLen = fwrite(struEncryptString.szEncryptString, sizeof(BYTE), strlen(struEncryptString.szEncryptString), pFile);if (0 == iWriteLen){printf("Write 0 Byte Data");//釋放資源SADP_Stop();return 0;}else{if (NULL != pFile){fclose(pFile);pFile = NULL;}}//---------------------------------------------------------------------------------------------------------------------------------------- //待拿到設(shè)備重置口令后,執(zhí)行下面代碼流程 //----------------------------------------------------------------------------------------------------------------------------------------SADP_RESET_PARAM_V40 struResetParamV40 = { 0 };struResetParamV40.dwSize = sizeof(struResetParamV40);struResetParamV40.byResetType = 2; //導(dǎo)出導(dǎo)入文件方式strcpy(struResetParamV40.szPassword, "hik12345");strcpy(struResetParamV40.szAuthFile, "C:\\Encrypt_681619114_o2.xml"); //設(shè)備重置口令文件SADP_RET_RESET_PARAM_V40 struRetResetParamV40 = { 0 };//導(dǎo)出導(dǎo)入文件重置密碼 參數(shù)1:設(shè)備序列號(hào) 參數(shù)2:重置密碼參數(shù)結(jié)構(gòu)體 參數(shù)3:鎖定信息結(jié)構(gòu)體iRet = SADP_ResetPasswd_V40("DS-2CD2622FWD-IZS20180312BBWR681619114", &struResetParamV40, &struRetResetParamV40);if (iRet == 0){//開(kāi)啟失敗,獲取錯(cuò)誤碼int iError = SADP_GetLastError();printf("SADP_ResetPasswd_V40 Failed! Err(%d)\r\n", iError);if (iError == SADP_LOCKED){printf("設(shè)備已鎖定,鎖定時(shí)間:%d 分鐘.", struRetResetParamV40.bySurplusLockTime);}else if (iError == SADP_PASSWORD_ERROR){printf("密碼錯(cuò)誤,剩余嘗試修改次數(shù):%d 次.", struRetResetParamV40.byRetryGUIDTime);}else if (iError == SADP_NOT_ACTIVATED){printf("設(shè)備未激活");}}else{printf("SADP_ResetPasswd_V40 Succ!\r\n");}//釋放資源SADP_Stop(); }?
總結(jié)
以上是生活随笔為你收集整理的集成海康威视Sadp SDK实现重置密码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: pbrt1 Introduction
- 下一篇: 海康威视网络摄像机连接、使用方法