linux系統下,onvif裝置鑑權實現

2021-07-27 06:21:09 字數 1439 閱讀 7022

fedora23

qtcreator4.0.3 based on qt5.6.2

opnessl

onvif裝置鑑權,其實很簡單,但是作者在開發過程中走了很大的彎路,嘗試了多種方法,最終都以失敗告終。曾經一度陷入絕望,甚至產生回家種地的念頭。最終功夫不負有心人,發現其實乙個函式就可以搞定,頗有柳暗花明又一村的感覺。或許這就是程式設計的魅力所在吧。

在網上搜尋相關資料,發現主要有兩種方式:一種是利用soap中提供的soap_wsse_add_usernametokendigest(soap, "user", onvif_username, onvif_password);函式;另一種是自己重寫密碼摘要生成函式。本文採用第一種方式,其中onvif_username和onvif_password是登陸攝像機所需的使用者名稱和密碼。此外,這種方法還需要在獲取onvif協議框架**時,在onvif.h檔案中手動新增import "wsse.h"語句。詳情請參考:

在進行裝置鑑權之前,必須要確認系統中是否正確安裝openssl。此處感謝所有開源軟體開發者,fedora23安裝系統時自帶了openssl,所以只需要直接呼叫即可。如果讀者的系統中沒有openssl,請先安裝。

廢話不多說,以下以獲取裝置能力功能為例,介紹如何實現裝置鑑權。

首先新增獲取裝置能力函式:

void usergetcapabilities(struct soap *soap, struct __wsdd__probematches *resp, struct _tds__getcapabilities *capa_req, struct _tds__getcapabilitiesresponse *capa_resp)

else

else

}}

獲取能力函式參考文章:

『soap_wsse_add_usernametokendigest』was not declared in this scope

查詢發現,該函式宣告在/usr/local/gsoap/share/gsoap/plugin/wsseapi.h中

將該檔案新增至工程中,編譯。發現該檔案依賴:

wsseapi.cpp smdevp.h smdevp.c mecevp.h mecevp.c threads.h threads.c

這些檔案全部都在/usr/local/gsoap/share/gsoap/plugin資料夾中。

全部新增完畢後,編譯,程式報錯:

invalid conversion from 『void*』 to 『int()(int, x509_store_ctx)

return soap->error;

}參照以上內容,注釋掉/*s == r || *r ||*/部分即可。

編譯、執行,成功獲取裝置能力。

Linux下基於Onvif獲取RTSP位址(二)

1.1 生成onvif框架 準備工作,電腦聯網,新建乙個資料夾,後面將把你生成的相關檔案放在這個目錄下。進入該資料夾開啟terminal,輸入如下指令 www.onvif.org onvif ver20 ptz wsdl ptz.wsdlwsdl2h是之前安裝gsoap後的乙個工具,後面幾個引數含義...

linux裝置上的Onvif 實現1 研究計畫

linux裝置上的onvif 實現1 研究計畫 onvif開發計畫 預研步驟 學習onvif框架,基礎知識 學習gsoap框架,介紹,示例 編譯gsoap工具包 在0.234伺服器上執行編譯 交叉編譯arm平台gsoap工具 編寫add示例程式 在0.234伺服器上執行編譯 交叉編譯arm平台,在分...

Onvif備忘錄 2 裝置發現

續上篇,框架 生成之後,就可以進行基於onvif的開發了,先實現乙個簡單的裝置發現的例子。visualstudio中新建乙個空白工程,將上篇中生成的框架 新增進來,但soapserver.c檔案中定義了許多要實現的函式,直接新增編譯會報一大堆錯誤,且本例中只需要用到client的功能,so 刪掉so...