arm-linux实现onvif server+WS-UsernameToken令牌验证

目录

一、环境搭建

1、安装openssl

2、安装bison

3、安装flex

二、gsoap下载

三、编译x86版本gsoap

四、编译arm-linux版本gsoap

1、交叉编译openssl

1.1、下载openssl

1.2、交叉编译

2、交叉编译zlib

2.1、下载zlib

2.2、交叉编译

3、交叉编译gsoap

3.1、编译过程中遇到的问题

五、ONVIF框架生成

5.1、开发板环境搭建

5.2、修改typemap.dat

5.3、生成onvif.h

5.4、支持 WS-UsernameToken鉴权

5.5、生成ONVIF框架

5.5.1、修改gsoap-2.8.130_install/share/gsoap/import/wsa5.h

六、ONVIF功能实现

6.1、框架结构搭建

6.2、WS-UsernameToken鉴权实现

6.2.1、客户端鉴权

6.2.2、服务端鉴权


一、环境搭建

1、安装openssl

sudo apt install openssl
sudo apt install libssl-dev

2、安装bison

sudo apt install bison

3、安装flex

sudo apt install flex

二、gsoap下载

gsoap 2.8.130版本下载地址:

Download gsoap_2.8.130.zip (gSOAP Toolkit) (sourceforge.net)

gSOAP官方网址:gSOAP: SOAP/XML Web Services and XML Data Bindings for C and C++

 gSOAP下载网址:gSOAP Toolkit download | SourceForge.net

下载完成,解压至两个文件夹:

三、编译x86版本gsoap

编译步骤:

cd gsoap-2.8_x86
./configure --enable-samples
make

四、编译arm-linux版本gsoap

1、交叉编译openssl

1.1、下载openssl

下载地址:[ Downloads ] - /source/index.html (openssl.org)

根据实际情况选择openssl版本,本文使用openssl 1.0.0版本

1.2、交叉编译

交叉编译与Ubuntu编译类似,配置时通过【--prefix=绝对路径】选项指定安装路径(自行创建文件夹),然后修改Makefile文件,修改方式如下:

./config no-asm no-async -shared --prefix=/home/wsk/wsk_workspace/tools/gsoap/openssl-1.0.0_install
vi Makeifle

指定交叉编译工具链

搜索-m64选项并删除,共两处。

查看交叉编译版本:

如果后面没有hf,则需要在CFLAGS后面添加:-mfloat-abi=softfp 

交叉编译、安装交叉编译后的库至之前自行指定的路径。

make
make install

openssl安装失败:

解决方案:

sudo mv /usr/bin/pod2man /usr/bin/pod2man_bk

再次安装,安装成功后再修改回去。

2、交叉编译zlib

2.1、下载zlib

下载地址:Index of /fossils (zlib.net)

根据实际情况选择zlib版本,本文使用zlib 1.2.5版本

2.2、交叉编译

./configure --shared --static --prefix=/home/wsk/wsk_workspace/tools/gsoap/zlib-1.2.5_install

修改Makefile如下:

CC=arm-fsl-linux-gnueabi-gccCFLAGS=-O3 -D_LARGEFILE64_SOURCE=1
#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
#CFLAGS=-g -DDEBUG
#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
#           -Wstrict-prototypes -Wmissing-prototypesSFLAGS=-O3 -fPIC -D_LARGEFILE64_SOURCE=1
LDFLAGS= -L. libz.a
TEST_LDFLAGS=-L. libz.a
LDSHARED=arm-fsl-linux-gnueabi-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
CPP=arm-fsl-linux-gnueabi-gcc -ESTATICLIB=libz.a
SHAREDLIB=libz.so
SHAREDLIBV=libz.so.1.2.5
SHAREDLIBM=libz.so.1
LIBS=$(STATICLIB) $(SHAREDLIBV)AR=arm-fsl-linux-gnueabi-ar rc
RANLIB=arm-fsl-linux-gnueabi-ranlib
LDCONFIG=ldconfig
LDSHAREDLIBC=-lc
TAR=tar
SHELL=/bin/sh
EXE=

make
make install

 安装成功:

3、交叉编译gsoap

 整体目录结构

cd gsoap-2.8
./configure --enable-samples --prefix=/home/wsk/wsk_workspace/tools/gsoap/gsoap-2.8.130_install --host=arm-fsl-linux-gnueabi --with-openssl="/home/wsk/wsk_workspace/tools/gsoap/openssl-1.0.0_install" --with-zlib="/home/wsk/wsk_workspace/tools/gsoap/zlib-1.2.5_install"
make

3.1、编译过程中遇到的问题

问题1:soapcpp2可执行文件格式错误

 解决方案:

mv gsoap/src/soapcpp2 gsoap/src/soapcpp2_bk
cp ../gsoap-2.8_x86/gsoap/src/soapcpp2 gsoap/src/soapcpp2

问题2:找不到ssl库

解决方案:

mv ../openssl-1.0.0_install/lib64 ../openssl-1.0.0_install/lib

 问题3:wsdl2h可执行文件格式错误

解决方案:

mv gsoap/wsdl/wsdl2h gsoap/wsdl/wsdl2h_bk
cp ../gsoap-2.8_x86/gsoap/wsdl/wsdl2h gsoap/wsdl/wsdl2h

以上问题解决后,进行安装

make install

可执行文件替换:

cp gsoap/wsdl/wsdl2h_bk ../gsoap-2.8.130_install/bin 
cp gsoap/src/soapcpp2_bk ../gsoap-2.8.130_install/bin 

gsoap交叉编译完成。

五、ONVIF框架生成

5.1、开发板环境搭建

将gsoap安装目录放置arm开发板上

cd /gsoap-2.8.130_install/bin/
mv soapcpp2 /usr/bin/
mv wsdl2h /usr/bin/

5.2、修改typemap.dat

修改gsoap-2.8.130_install/share/gsoap/WS/typemap.dat文件

在文件最后添加,不然后续编译框架会报错

xsd__duration = #import "custom/duration.h" | xsd__duration

5.3、生成onvif.h

cd /gsoap-2.8.130_install/share/gsoap
wsdl2h -P -x -c -s -F -Nname -t ./WS/typemap.dat -o onvif.h https://www.onvif.org/ver10/network/wsdl/remotediscovery.wsdl https://www.onvif.org/ver10/device/wsdl/device
mgmt.wsdl https://www.onvif.org/ver10/media/wsdl/media.wsdl

5.4、支持 WS-UsernameToken鉴权

因为鉴权需要,修改onvif.h文件

#import "wsse.h"

5.5、生成ONVIF框架

5.5.1、修改gsoap-2.8.130_install/share/gsoap/import/wsa5.h

把SOAP_ENV__Fault改成SOAP_ENV__Fault_alex

 5.5.2、生成ONVIF框架代码

mkdir /gsoap-2.8.130_install/share/gsoap/onvif_server
mkdir /gsoap-2.8.130_install/share/gsoap/onvif_client
cd /gsoap-2.8.130_install/share/gsoap
# 生成服务端框架代码
soapcpp2 -2 -x -L -S -c onvif.h -Iimport -d onvif_server
# 生成客户端框架代码
soapcpp2 -2 -x -L -C -c onvif.h -Iimport -d onvif_client

六、ONVIF功能实现

6.1、框架结构搭建

拷贝生成的onvif_server和onvif_client至linux x86开发环境,以onvif_server框架为基础进行搭建。

拷贝gsoap-2.8.130_install/share/gsoap/custom/目录下的duration.c、duration.h、struct_timeval.c、struct_timeval.h至onvif_server目录。

拷贝gsoap-2.8.130_install/share/gsoap/plugin目录下的mecevp.c、mecevp.h、smdevp.c、smdevp.h、threads.c、threads.h、wsaapi.c、wsaapi.h、wsseapi.c、wsseapi.h至onvif_server目录。

拷贝gsoap-2.8/gsoap目录下的dom.c、stdsoap2.c、stdsoap2.h至onvif_server目录。

拷贝onvif_client目录下的soapClient.c至onvif_server目录。

新增common.c、common.h、onvif_server_interface.c、main.c

6.2、WS-UsernameToken鉴权实现

6.2.1、客户端鉴权

只需在每次发送消息前调用soap_wsse_add_UsernameTokenDigest接口即可。

soap_wsse_add_UsernameTokenDigest(soap, NULL, "admin", "123456");

6.2.2、服务端鉴权

只需调用soap_wsse_verify_Password接口即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/760959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【嵌入式学习】Qtday03.21

一、思维导图 二、练习 自由发挥登录窗口的应用场景,实现一个登录窗口界面。(不要使用课堂上的图片和代码,自己发挥,有利于后面项目的完成) 要求: 1. 需要使用Ui界面文件进行界面设计 2. ui界面上的组件…

深入了解 Spring boot的事务管理机制:掌握 Spring 事务的几种传播行为、隔离级别和回滚机制,理解 AOP 在事务管理中的应用

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…

LeetCode 热题 100 | 堆(一)

目录 1 什么是堆排序 1.1 什么是堆 1.2 如何构建堆 1.3 举例说明 2 215. 数组中的第 K 个最大元素 2.1 子树大根化 2.2 遍历所有子树 2.3 弹出栈顶元素 2.4 完整代码 菜鸟做题,语言是 C 1 什么是堆排序 1.1 什么是堆 堆的定义和分类&#xff…

【c++入门】命名空间,缺省参数与函数重载

🔥个人主页: Quitecoder 🔥专栏:c笔记仓 朋友们大家好!本篇内容我们进入一个新的阶段,进入c的学习!希望我的博客内容能对你有帮助! 目录 1.c关键字2.第一个c代码3.命名空间3.1 nam…

CTF-辨别细菌

题目描述&#xff1a;try your best to find the flag. 进入靶场后发现是一个游戏&#xff0c;需要全部答对才可以得到最后的flag 查看了一下源码&#xff0c;发现有一个答案模板的模块 尝试解释一下代码 <!-- 答案模版 --> <script id"template_game_pi…

数据结构/C++:红黑树

数据结构/C&#xff1a;红黑树 概念实现基本结构插入uncle为红色节点uncle为黑色节点 总代码展示 概念 红黑树是一种二叉搜索树&#xff0c;一般的二叉搜索会发生不平衡现象&#xff0c;导致搜索效率下降&#xff0c;于是学者们开始探索如何让二叉搜索树保持平衡&#xff0c;这…

Agent驱动的RPA——实在Agent(智能体):自动化时代的新引擎

随着人工智能和机器学习技术的快速发展&#xff0c;智能Agent在 RPA领域扮演了革命性的角色。 Agent驱动的RPA不仅实现了传统规则导向自动化工具的功能升级&#xff0c;而且通过引入自主、智能决策与协作能力&#xff0c;为现代企业带来了更高程度的灵活性与智能化水平。随着数…

第1章 计算机系统概述

王道学习 1.1 操作系统的基本概念 1.1.1 操作系统的概念 1.1.2 操作系统的特征 操作系统是一种系统软件&#xff0c;但与其他系统软件和应用软件有很大的不同&#xff0c;它有自己的特殊性即基本特征。操作系统的基本特征包括并发、共享、虚拟和异步。这些概念对理解和掌握…

kail linux破解密码--- 详细过程(配合图文让你看了就会)

1.准备工作 1.vmware虚拟机 2.kali的系统 3.无线网卡一张(这个是必须的我买的是30多块) 4.这里为了实验&#xff0c;和直观的看到效果&#xff0c;用手机开了一个wifi然后使用kali进行破解 2.下载kali然后安装到虚拟机vmware 直接在官网下载 Get Kali | Kali Linux 我选…

WebXR实践——利用aframe框架浏览器展示全景图片

一、效果 话不多说&#xff0c;先上效果 二、代码 index.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>360&deg; Image</title><meta name"description" content"360&deg; Imag…

【机器学习】深入解析线性回归模型

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

高精度铸铁平台制造工艺有多精细——河北北重机械

高精度铸铁平台制造工艺通常包括以下几个步骤&#xff1a; 材料准备&#xff1a;选择合适的铸铁材料&#xff0c;并确保其质量符合要求。常用的铸铁材料包括灰铸铁、球墨铸铁等。 模具制造&#xff1a;根据平台的设计要求&#xff0c;制造适用的模具。模具一般由砂型、金属模具…

【python】flask基于cookie和session来实现会话控制

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【开源-土拨鼠充电系统】鸿蒙 HarmonyOS 4.0 App+微信小程序+云平台

✨本人自己开发的开源项目&#xff1a;土拨鼠充电系统 ✨踩坑不易&#xff0c;还希望各位大佬支持一下&#xff0c;在Gitee或GitHub给我点个 Start ⭐⭐&#x1f44d;&#x1f44d; ✍Gitee开源项目地址&#x1f449;&#xff1a;https://gitee.com/cheinlu/groundhog-charging…

力扣Lc19--- 268. 丢失的数字(java版)-2024年3月20日

1.题目描述 2.知识点 &#xff08;1&#xff09;比如数组里面有n个数&#xff0c;然后计算这n个数的总和(用等差求和数列计算&#xff09;,然后减去数组的和&#xff0c;用总和减去数组和即为所得 &#xff08;2&#xff09;加强型 for 循环&#xff08;也称为 for-each 循环&…

单片机--数电(4)

触发器 数字电路中&#xff1a;分组合逻辑电路与时序逻辑电路两大类 组合逻辑电路的基本单元是门电路&#xff08;与或非等一些门电路&#xff09; 时序逻辑电路的基本单元是触发器 触发器与门电路的区别 门电路某一时刻的输出信号完全取决于该时刻的输入信号&#xff0c;…

销售数据分析怎么做?用好这5个数据分析方法与模型就足够了。

企业经营其实简单来说就是做买卖&#xff0c;有了买卖自然就产生了销售数据&#xff0c;那怎么能让这些销售数据产生价值呢&#xff1f;答案就是数据分析。通过对销售数据的分析&#xff0c;可以帮助企业及时洞察市场动向&#xff0c;发现企业销售过程中的问题&#xff0c;调整…

ResNet《Deep Residual Learning for Image Recognition》

ResNet论文学习 引言Deep Residual Learning 深度残差学习网络结构 总结代码复现 引言 深度网络自然地以端到端的多层方式集成低/中/高级特征和分类器&#xff0c;特征的“级别”可通过堆叠层的数量来丰富 随着网络层数加深&#xff0c;提取的特征越强&#xff0c;但是 网络…

表情识别数据集

表情视频数据集 在许多的研究中,研究者通常会把人脸表情识别区分为静态的人脸表情识别(static facial emotion recognition)和动态的人脸表情识别(dynamic facial emotion recognition)。前者希望通过单张图片辨别人的表情从而达到识别人情绪的目的,而后者希望感知视频/…

进程的概念 | PCB | Linux下的task_struct | 父子进程和子进程

在讲进程之前首先就是需要去回顾一下我们之前学的操作系统是干嘛的&#xff0c;首先操作系统是一个软件&#xff0c;它是对上提供一个良好高效&#xff0c;稳定的环境的&#xff0c;这是相对于用户来说的&#xff0c;对下是为了进行更好的软硬件管理的&#xff0c;所以操作系统…