当前位置: 首页 > news >正文

Qt HTTP 摘要认证(海康球机摄像机ISAPI开发)

接到一个需求是开发下海康的球机,控制云台,给到我的是一个开发手册,当然了是海康的私有协议

ISAPI开发手册icon-default.png?t=N7T8https://download.csdn.net/download/qq_37059136/88547425关于开发这块读文档就可以理解了,海康使用的是摘要认证,当然了海康已经给出使用范例

通过libcurl就可以直接连接上海康的球机了.那么是不是就这样了呢,很显然并不是,要是真的就用这种方法怎么能显示出在座的牛逼之处呢,有简单方法我不用,哎,就是玩

关于HTTP的认证方式有很多,应该是4种,basic 跟 Digest 最为常见,别的也不多说了,basic太简单了不提也罢,本文的关键是Digest (摘要)认证

关于Digest 认证,首先了解下这东西的收发流程:

1.你给服务器发送了一条命令 :get也好 put也好随便什么也好

2.服务器给你返回一个401 未认证错误 以及附带给你将要在摘要认证中需要的参数

3.你拿到服务器返回的参数,根据摘要认证规则算出认证响应值在此发送给服务器

rfc7616 规则icon-default.png?t=N7T8https://datatracker.ietf.org/doc/html/rfc7616#section-3.3

4.服务器响应你的操作并返回正确

步骤可参考下图

那么知道流程了,具体该怎么操作呢,我知道你很急但是你先别急,先来看看这四个流程具体发送了社么报文(通过wireshark抓包)

1.首先客户端发送了一条get指令获取

2.客户端返回了一个401错误

这张图的知识点比较多了,主要看下面两个
    WWW-Authenticate: Digest qop="auth", realm="IP Camera(AE424)", nonce="353334613a31313564353336613a06002d080ad3bdce5c80d6282269c72b", stale="FALSE"\r\n

    <!DOCTYPE html>\r\n
    <html><head><title>Document Error: Unauthorized</title></head>\r\n
    <body><h2>Access Error: 401 -- Unauthorized</h2>\r\n
    <p>Authentication Error</p>\r\n
    </body>\r\n
    </html>

首先下面的html告诉你本次get失败了,错误原因是Unauthorized(未经授权)

然后再看上面WWW-Authenticate,这段信息量很大

Digest    认证方式:摘要认证

qop="auth"   保护质量  一般为auth/auth-int或缺失

realm="IP Camera(AE424)"    领域

nonce           服务器随机数

stale   是否过期(上述摘要认证参数是否过期)

这几个参数可以在上面的rfc7616 规则里面通过ctrl+f 查找,看看具体怎么定义这几个参数的,下文中还有几个参数也需要在rfc7616规则中查找

3.计算出认证响应值后再次发送

可以看到本次发送的消息头里面添加了上次服务器返回的摘要认证参数,以及最重要的response参数

4.认证成功,服务器应答

好了上面的步骤跟报文都分析结束了,应该可以看出来,第三步发送的参数才是真正的关键点

下面开始讲下如何计算response 参数

首先给出三个公式

那么先来解答几个关键问题

1. 问:公式里面有算法MD5和MD5-sess,那么摘要认证应该用什么算法呢?

  答:缺省状态下是MD5,而且现在只支持MD5

2.问:怎么理解上述图表?

答:上述图表给出三个东西,分别是 A1,A2,摘要计算(response 参数)

我们要求摘要计算(response 参数),那么得出公式

response=MD5(<A1>:<nonce>:<nc>:<cnonce>:<qop>:<A2>)

已知公式response,还需要知道A1跟A2

再根据图表

A1=MD5(<user>:<realm>:<password>)

A2=MD5(<request-method>:<uri-directive-value>)

那么很显然,只要我们搞定

<user>        用户名

<realm>     领域

<password>  密码

<request-method>    请求方式(get/put/pust等之一)

<uri-directive-value>  uri跳转地址: http://192.168.1.64:80/ISAPI/PTZCtrl/channels/1/continuous 中/ISAPI/PTZCtrl/channels/1/continuous部分就是这里的<uri-directive-value>

<nonce>      服务器随机数

<nc>     客户端计数器 一般为1   十六进制00000001

<cnonce>   客户端随机数

<qop>    保护质量  一般为auth/auth-int或缺失

这几个参数就可以了,当然了还需搞定MD5算法(上述几个参数务必在rfc7616 规则里自行查看含义)

相关文章:

Qt HTTP 摘要认证(海康球机摄像机ISAPI开发)

接到一个需求是开发下海康的球机,控制云台,给到我的是一个开发手册,当然了是海康的私有协议 ISAPI开发手册https://download.csdn.net/download/qq_37059136/88547425关于开发这块读文档就可以理解了,海康使用的是摘要认证,当然了海康已经给出使用范例 通过libcurl就可以直接连…...

srs webrtc推拉流环境搭建(公网)

本地环境搭建 官方代码https://github.com/ossrs/srs 拉取代码&#xff1a; git clone https://github.com/ossrs/srs.gitcd ./configure make ./objs/srs -c conf/https.rtc.confsrs在公网上&#xff0c;由于srs是lite-ice端&#xff0c;导致他不会主动到srs获取自己的公网i…...

【Flutter】设计原则(2)深入解析 SOLID 原则的应用

【Flutter】设计原则(2)深入解析 SOLID 原则的应用 文章目录 一、前言二、SOLID原则三、在 Flutter 中应用单一职责原则1. 专注单一功能的 Widget2. 提高代码可维护性四、在 Flutter 中应用开闭原则1. 利用多态和基类实现可扩展的 Widget2. 增强应用的可扩展性和灵活性五、在…...

python爬虫概述及简单实践:获取豆瓣电影排行榜

目录 前言 Python爬虫概述 简单实践 - 获取豆瓣电影排行榜 1. 分析目标网页 2. 获取页面内容 3. 解析页面 4. 数据存储 5. 使用代理IP 总结 前言 Python爬虫是指通过程序自动化地对互联网上的信息进行抓取和分析的一种技术。Python作为一门易于学习且强大的编程语言&…...

ts视频文件转为mp4(FFmpeg)

有些视频资源下载下来之后发现是.ts的文件&#xff0c;除了用下载它时用的工具或是浏览器才能看&#xff0c;那有没有将ts文件转换成更加通用视频格式的方法。 几乎万能的音视频工具--ffmpeg登场 安装和环境配置可看这篇博客&#xff1a;FFmpeg指令行打开usb摄像头&#xff0…...

2023年咸阳市《网络建设与运维》赛题解析------四、安全配置

安全配置 说明:IP地址按照题目给定的顺序用“ip/mask”表示,IPv4 any地址用0.0.0.0/0,IPv6 any地址用::/0,禁止用地址条目,否则按零分处理。 1.FW1配置IPv4 nat,实现集团产品1段IPv4访问Internet IPv4,转换ip/mask为200.200.200.16/28,保证每一个源IP产生的所有会话将…...

什么是java枚举?为什么要用java枚举?

什么是java枚举&#xff1f; 原始的接口定义常量 public interface IConstants {String MON "Mon";String TUE "Tue";String WED "Wed";String THU "Thu";String FRI "Fri";String SAT "Sat";String SUN …...

USB复合设备构建CDC+HID鼠标键盘套装

最近需要做一个小工具&#xff0c;要用到USB CDCHID设备。又重新研究了一下USB协议和STM32的USB驱动库&#xff0c;也踩了不少坑&#xff0c;因此把代码修改过程记录一下。 开发环境&#xff1a; ST-LINK v2 STM32H743开发板 PC windows 11 cubeMX v6.9.2 cubeIDE v1.13.2 cub…...

准备篇(四)HTTP 基本原理

URI 和 URLURIURLURI vs URLHTTP 和 HTTPS超文本HTTPHTTP 请求与响应HTTPS你是否想过,在浏览器中敲入 URL 到 获取网页内容 之间发生了什么? 了解这些,有助于进一步了解爬虫的基本原理。 URI 和 URL URI(Uniform Resource Identifier),即统一资源标识符;URL(Universa…...

模板初阶笔记分享

有道云笔记...

使用Spring Boot实现大文件断点续传及文件校验

一、简介 随着互联网的快速发展&#xff0c;大文件的传输成为了互联网应用的重要组成部分。然而&#xff0c;由于网络不稳定等因素的影响&#xff0c;大文件的传输经常会出现中断的情况&#xff0c;这时需要重新传输&#xff0c;导致传输效率低下。 为了解决这个问题&#xff…...

读取PDF中指定数据写入EXCEL文件

使用Java读取文件夹中的PDF文件,再读取文件中的指定的字体内容,然后将内容写入到Excel文件中,其中包含一些正则判断,可以忽略,字体以Corbel字体为例。 所需要的maven依赖为: <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel…...

[黑马程序员SpringBoot2]——开发实用篇1

目录&#xff1a; 手工启动热部署自动启动热部署热部署范围配置关闭热部署功能第三方bean属性绑定松散绑定常用计量单位应用bean属性校验进制数据转换规则加载测试专用属性加载测试专用配置测试类中启动web环境发送虚拟请求匹配响应执行状态匹配响应体匹配响应体(json)匹配响应…...

Python------列表 集合 字典 推导式(本文以 集合为主)

推导式&#xff1a; 推导式comprehensions&#xff08;又称解析式&#xff09;&#xff0c;是Python的一种独有特性。推导式是可以从一个数据序列 构建 另一个 新的数据序列&#xff08;一个有规律的列表或控制一个有规律列表&#xff09;的结构体。 共有三种推导&#xff…...

网工内推 | Linux运维,六险二金,最高30K,IE认证优先

01 上海域起 招聘岗位&#xff1a;Linux运维工程师 职责描述&#xff1a; 1.负责游戏产品运维相关的工作&#xff0c;流程文档、技术文档、功能脚本的编写整理 2.负责分析并排除系统、数据库、网络、应用等游戏产品运维中出现的故障及错误 3.负责对游戏产品项目进行线上部署、…...

服务器集群配置LDAP统一认证高可用集群(配置tsl安全链接)-centos9stream-openldap2.6.2

写在前面 因之前集群为centos6&#xff0c;已经很久没升级了&#xff0c;所以这次配置统一用户认证也是伴随系统升级到centos9时一起做的配套升级。新版的openldap配置大致与老版本比较相似&#xff0c;但有些地方配置还是有变化&#xff0c;另外&#xff0c;铺天盖地的帮助文…...

12-1- GAN -简单网络-线性网络

功能 随机噪声→生成器→MINIST图像。 训练方法 0 损失函数:gan的优化目标是一个对抗损失,是二分类问题,用BCELoss 1 判别器的训练,首先固定生成器参数不变,其次判别器应当将真实图像判别为1,生成图像判别为0 loss=loss(real_out, 1)+loss(fake_out, 0) 2 生成器的…...

Antv/G2 分组柱状图+折线图双轴图表

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,heightdevice-height"><title>分组柱状图折线图双轴图表</title><styl…...

springboot323基于Java的美妆购物网站的设计与实现

交流学习&#xff1a; 更多项目&#xff1a; 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示&#xff1a; ————————————————...

vue项目本地开发完成后部署到服务器后报404

vue项目本地开发完成后部署到服务器后报404是什么原因呢&#xff1f; 一、如何部署 前后端分离开发模式下&#xff0c;前后端是独立布署的&#xff0c;前端只需要将最后的构建物上传至目标服务器的web容器指定的静态目录下即可 我们知道vue项目在构建后&#xff0c;是生成一系…...

Uniapp网络请求进阶:手把手教你用uni.addInterceptor实现全局请求管理与错误处理

Uniapp网络请求工程化实战&#xff1a;基于uni.addInterceptor的全局管控体系 在移动开发生态中&#xff0c;网络请求如同项目的血脉系统。当Uniapp项目规模扩展到企业级时&#xff0c;原始的直接调用uni.request方式会暴露出诸多痛点&#xff1a;重复的配置代码、分散的错误处…...

HC7252晨芯阳内置MOS开关降压型LED恒流驱动器

HC7252是一款内置100V功率MOS高效率、高精度的开关降压型大功率LED恒流驱动芯片。HC7252采用固定关断时间的峰值电流控制方式&#xff0c;关断时间可通过外部电容进行调节&#xff0c;工作频率可根据用户要求而改变。HC7252通过调节外置的电流采样电阻&#xff0c;能控制高亮度…...

小米手机解锁BL保姆级教程:无需社区5级,用PHP脚本绕过HyperOS限制(附常见错误码解决)

小米手机解锁BL实战指南&#xff1a;突破HyperOS限制的完整方案 手里的小米13升级到HyperOS后&#xff0c;解锁Bootloader突然变得遥不可及&#xff1f;社区等级5和答题门槛让不少技术爱好者望而却步。本文将带你深入探索一种巧妙的技术方案&#xff0c;无需满足小米社区的苛刻…...

Linux内核安全模块深入剖析【1.9】

7.3.1 基本定义1.客体类别和操作这部分策略是内核代码逻辑的重复。按照机制和策略分离的原则&#xff0c;内核代码实现机制&#xff0c;用户编写策略。但是 SELinux 策略语言中偏偏有一部分是在重复内核代码的逻辑。这部分重新定义了客体类别和操作&#xff0c;有些不伦不类&am…...

终极免费窗口强制调整工具:如何突破Windows尺寸限制

终极免费窗口强制调整工具&#xff1a;如何突破Windows尺寸限制 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些无法拖拽的"顽固窗口"而烦恼吗&#xff1f;Wi…...

Vivado用户必看:中文用户名导致Vscode关联失效?手把手教你修改vivado.xml文件

Vivado与Vscode联动的终极解决方案&#xff1a;彻底攻克中文路径兼容性问题 在FPGA开发领域&#xff0c;Vivado作为Xilinx推出的旗舰级开发工具&#xff0c;与轻量级代码编辑器Vscode的联动已经成为提升开发效率的标准配置。然而&#xff0c;许多中文用户在实际操作中常常遇到…...

深入浅出DPCM与DAPM:图解高通音频架构如何实现动态功耗管理与低延迟播放

深入浅出DPCM与DAPM&#xff1a;图解高通音频架构如何实现动态功耗管理与低延迟播放 在智能穿戴设备和移动终端领域&#xff0c;音频系统的功耗优化一直是工程师面临的重大挑战。想象一下&#xff0c;当你的智能手表在待机状态下播放通知铃声时&#xff0c;如果每次都需要唤醒主…...

别再踩坑了!用Java Arrays.fill()初始化二维数组,这3个细节新手必看

Java二维数组初始化陷阱&#xff1a;为什么Arrays.fill()会让你掉坑里&#xff1f; 刚接触Java二维数组时&#xff0c;很多人会想当然地认为Arrays.fill()是个万能初始化工具&#xff0c;直到某天在算法题中遇到一个诡异的Bug——明明只修改了矩阵的某一行&#xff0c;所有行却…...

为什么你的DeepSeek在GCP延迟飙高2000ms?揭秘GPU实例选型、CUDA版本与A100/A100-80GB混部的底层冲突

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek GCP部署指南 在Google Cloud Platform上部署DeepSeek系列大语言模型&#xff08;如DeepSeek-V2、DeepSeek-Coder&#xff09;需兼顾计算性能、存储效率与网络低延迟。本指南基于GCP最新稳定API&…...

CANN/asc-devkit SIMD排序函数文档

Sort 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://gitcode.com/cann/…...