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

news2024/10/7 4:36:47

目录

一、环境搭建

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-gcc

CFLAGS=-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-prototypes

SFLAGS=-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 -E

STATICLIB=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.coloradmin.cn/o/1524892.html

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

相关文章

C++之deque与vector、list对比分析

一.deque讲解 对于vector和list,前一个是顺序表,后一个是带头双向循环链表,前面我们已经实现过,这里就不再讲解了,直接上deque了。 deque:双端队列 常见接口大家可以查看下面链接: deque - …

WEB前端项目开发——(一)(2024)

目录 1 通过Git Bash安装 vue-cli 2 创建项目 3 解决Git Bash方向键失效 4 重新进行项目创建 5 浏览器输入地址查看 6 案例——简单修改v3-calendar中的内容 7 测试页面效果 本篇文章介绍通过了Git Bash创建v3-calendar项目,之后对v3-calendar进行简单…

RabbitMQ——死信队列和延迟队列

文章目录 RabbitMQ——死信队列和延迟队列1、死信队列2、基于插件的延迟队列2.1、安装延迟队列插件2.2、代码实例 RabbitMQ——死信队列和延迟队列 1、死信队列 死信队列(Dead Letter Queue,DLQ)是 RabbitMQ 中的一种重要特性,用…

实用crontab教程-一文读懂crontab

文章目录 Crontab是什么类似的工具有哪些Systemd (systemctl)Upstart (initctl)SysVinit (/etc/init.d scripts) 作用用途: crontab的配置文件格式crontab表达式检查工具Crontab Guru:Cron Maker: 运行身份原理:指定以特定用户身份运行:使用用…

如何使用人工智能打造超用户预期的个性化购物体验

回看我的营销职业生涯,我见证了数字时代如何重塑客户期望。从一刀切的方法过渡到创造高度个性化的购物体验已成为企业的关键。在这个客户期望不断变化的新时代,创造个性化的购物体验不再是奢侈品,而是企业的必需品。人工智能 (AI&…

使用IDEA进行Scala编程相关安装步骤

一、相关安装包(jdk最好用1.8版本,其他不做要求) IDEA安装包 jdk-8u101-windows-x64.exe scala-2.12.19 二、安装顺序 在安装IDEA之前,首先要安装好java和scala环境,以便后续配置 三、jdk和scala安装要求 1.jdk安…

【爬虫逆向】Python逆向采集猫眼电影票房数据

进行数据抓包,因为这个网站有数据加密 !pip install jsonpathCollecting jsonpathDownloading jsonpath-0.82.2.tar.gz (10 kB)Preparing metadata (setup.py) ... done Building wheels for collected packages: jsonpathBuilding wheel for jsonpath (setup.py) .…

KKVIEW远程:远程工具软件有哪些

远程工具软件有哪些 随着科技的发展和全球化进程的加快,远程工作、在线协作已成为我们日常生活和工作中不可或缺的一部分。为了更有效地进行远程操作和管理,我们需要借助各种远程工具软件。接下来,我将为大家介绍几种市场上广受欢迎的远程工…

JSON 的了解和使用

目录 1. JSON 2. JSONcpp 的安装 3. JSONcpp 相关API的使用 3.1. 将 Json::Value 对象转化为 std::string 3.1.1. Json::Value 类 3.1.2. Json::Value::toStyledString 接口 3.1.3. Json::StyledWriter 类 3.1.4. Json::StyledWriter::write 接口 3.1.5. Json::Fas…

【计算机网络】基本概念

基本概念 IP 地址端口号协议协议分层封装分用客户端服务器请求和响应两台主机之间的网络通信流程 IP 地址 概念:IP 地址主要是用于唯一标识网络主机、其他网络设备(如路由器)的网络地址。简单来说,IP地址用来唯一定位主机。格式&…

【GPT-SOVITS-02】GPT模块解析

说明:该系列文章从本人知乎账号迁入,主要原因是知乎图片附件过于模糊。 知乎专栏地址: 语音生成专栏 系列文章地址: 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

【开源鸿蒙】模拟运行OpenHarmony轻量系统QEMU RISC-V版

文章目录 一、准备工作1.1 编译输出目录简介 二、QEMU安装2.1 安装依赖2.2 获取源码2.3 编译安装2.4 问题解决 三、用QEMU运行OpenHarmony轻量系统3.1 qemu-run脚本简介3.2 qemu-run脚本参数3.3 qemu-run运行效果3.4 退出QEMU交互模式 四、问题解决五、参考链接 开源鸿蒙坚果派…

AntV L7深圳智慧城市

本案例使用L7库和Mapbox GL JS构建深圳智慧城市。 文章目录 1. 引入 CDN 链接2. 引入组件3. 创建地图4. 创建场景5. 获取数据6. 创建面图层7. 演示效果8. 代码实现 1. 引入 CDN 链接 <!-- 1.引入CDN链接 --> <script src"https://unpkg.com/antv/l7"><…

Ubuntu 22.04 Nvidia Audio2Face Error:Failed to build TensorRT engine

背景 1.在Ubuntu22.04上安装Audio2Face后启动&#xff0c;嘴形不会实时同步。控制台显示如【图一】&#xff1a; 【图一】 2.log日志如下: Error: Error during running command: [‘/home/admin/omniverse/libs/deps/321b626abba810c3f8d1dd4d247d2967/exts/omni.audio2fac…

uniapp修改头像,选择图片

一、页面效果 二、手机上的效果 使用过的实例&#xff1a; 手机上就会显示类似如下&#xff1a; 三、代码 <view class"cleaner-top" click"chooseImg"><view class"cleaner-avatar"><image :src"imgArr" mode"…

K8S POD 启动探针 startupProbe 的使用

当我们启动一个POD 时&#xff0c; 当k8s detect 里面的容器启动成功时&#xff0c; 就会认为这个POD 启动完成了&#xff0c; 通常就会在状态里表示 ready 1/1 … 例如 rootk8s-master:~# kubectl get pods NAME READY STATUS RESTARTS AGE bq-api-demo 1…

基于STM32G4的0.96寸OLED显示屏驱动程序(HAL库),支持硬件/软件I2C

基于STM32G474的0.96寸OLED(SSD1306)显示屏驱动程序&#xff08;4针脚I2C接口&#xff09;&#xff0c;支持硬件IIC/软件IIC&#xff0c;HAL库版。 这款驱动程序比较完善&#xff0c;可以实现 英文、整数、浮点数、汉字、图像、二进制数、十六进制数 等内容显示&#xff0c;可…

Vue 3响应式系统详解:ref、toRefs、reactive及更多

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

195基于matlab的凸轮机构GUI界面

基于matlab的凸轮机构GUI界面 &#xff0c; 凸轮设计与仿真 绘制不同的凸轮轮廓曲线 &#xff0c;凸轮机构运动参数包括推程运动角&#xff0c;回程运动角&#xff0c;远休止角&#xff0c;近休止角。运动方式&#xff0c;运动规律。运动仿真过程可视化。内容齐全详尽。用GUI打…

ARM Cortex R52内核 01 概述

ARM Cortex R52内核 01 Introduction 1.1 Cortex-R52介绍 Cortex-R52处理器是一种中等性能、有序、超标量处理器&#xff0c;主要用于汽车和工业应用。它还适用于各种其他嵌入式应用&#xff0c;如通信和存储设备。 Cortex-R52处理器具有一到四个核心&#xff0c;每个核心实…