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

news2024/11/20 0:36:11

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

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 规则里自行查看含义)

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

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

相关文章

Python学习笔记--自定义元类

四、自定义元类 到现在&#xff0c;我们已经知道元类是什么鬼东西了。 那么&#xff0c;从始至终我们还不知道元类到底有啥用。 只是了解了一下元类。 在了解它有啥用的时候&#xff0c;我们先来了解下怎么自定义元类。 因为只有了解了怎么自定义才能更好的理解它的作用。…

es使用客户端,“grunt” 不是内部或外部命令,多种解决方法

”grunt“不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 4、问题排查 查看node的安装根目录 npm root -g 在运行grunt -version还是不行 网上找了很多&#xff0c;给出正确解决方案的没几个&#xff0c;所以自己摸索&#xff0c;最后确定了加环境变量的解…

python使用selenium webDriver时 报错

可能原因和解决&#xff1a; 1. python 解释器 ----> 设置 2. 浏览器版本 与 浏览器驱动版本不一致 ----> 安装同一版本的 (下载chromedriver | 谷歌驱动更高版本的测试版) 参考&#xff1a;Python使用Selenium WebDriver的入门介绍及安装教程-CSDN博客 Selenium安…

刷题学习记录(攻防世界)

wife_wife 一拿到题目就提示这题不用爆破 进入环境得到的是一个登录框 随便试了一下登录账户密码会提示错误&#xff0c;那就去注册账户&#xff0c;注册的账户还有注册管理员的选项 先注册普通用户234&#xff0c;注册好后登录 这样就得到flag&#xff0c;但是提交是错误的&a…

Linux设置禁止SSH空密码登录

为什么要禁止SSH空密码登陆&#xff1f; 禁止SSH空密码登录的原因是出于安全考虑。如果允许使用空密码进行SSH登录&#xff0c;那么任何人都可以通过尝试使用空密码来尝试登录到系统&#xff0c;从而获取系统的访问权限&#xff0c;这显然是非常不安全的。 此外&#xff0c;使…

FullCalendar日历插件说明文档

一般标准配置 属性描述默认值header设置日历头部信息。 如果设置为false&#xff0c;则不显示头部信息。包括left&#xff0c;center,right左中右三个位置&#xff0c;每个位置都可以对应以下不同的配置&#xff1a; title: 显示当前月份/周/日信息 prev: 用于切换到上一月/周…

蓝桥杯 map

map 代码示例 #include<iostream> #include<map> using namespace std; int main(){//创建并初始化mapmap<int,string> myMap{{1,"Apple"},{2,"Banana"},{3,"Orange"}} ;//插入元素myMap.insert(make_pair(4,"Grapes&qu…

Simulink 自动代码生成电机控制:模型预测控制(MPC)模块使用总结(2)

目录 设置预测范围对系统的影响 设置输入输出约束对系统的影响 设置权重对系统的影响 调整Close-Loop Performance 和State Estimation效果 检查MPC设计是否合理 总结 设置预测范围对系统的影响 预测范围越小&#xff0c;响应越快&#xff0c;预测性能越差&#xff0c;系统稳…

Javascript if 语句使用详解

Javascript if 语句使用详解 目录 Javascript if 语句使用详解 一、if语句 二、if……else语句 三、if……else if语句 if语句是使用最为普遍的条件选择语句&#xff0c;每一种编程语言的if语句都差不多。if语句类型共有3种&#xff1a; &#xff08;1&#xff09;if语句&…

黔院长 | 何为风邪?

中医上所说的风&#xff0c;也称风邪&#xff0c;是指受到外界侵犯&#xff08;外邪&#xff09;而感得风寒、风热、风湿等症状&#xff0c;导致人的免疫力下降。寒、湿、燥、暑、热等都属于外邪&#xff0c;多依附于风而入侵人体&#xff0c;因此风邪更多的是指一种致病因素。…

LED裸机

关于STM32的GPIO的初始化&#xff1a; 初始化&#xff1a; 时钟&#xff1b;输出/输入功能、上拉、速度等等&#xff1b;设置复用功能等等 回顾GPIO和IO&#xff1a; GPIO&#xff1a; 通用IO口。嵌入式系统中常常有数量众多&#xff0c;但是结构却比较简单的外部设备/电路&a…

Python系列:如何提高python程序代码的健壮性

前言 在编程的时候,我们难免会遇到一些不可靠的情况,比如网络请求失败,数据库连接超时等等。这些不确定性会让我们的程序容易出现各种错误和异常。那么如何来增加程序的容错性和健壮性呢? 可能大多数人会想到使用try except来进行异常捕捉进行失败重试(Retry)。虽然try-esc…

lvgl 画好一个圆弧arc 要了解的相关知识

目录 一、概述 1. css盒子模型示意图2. 圆弧的理解对象3. lvgl 版本 二、功能细节 1. 圆弧的角度 1.1 圆弧的0度在哪里&#xff1f;1.2 设置圆弧角度的1.3 设置圆弧的背景角度 2. 圆弧的半径3. 圆弧的圆角 3.1 设置圆弧的圆角 效果如下&#xff1a; 4. 圆弧的宽度 4.1圆弧主体…

基于SSM的宠物医院管理系统

基于SSM的宠物医院管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 后台 摘要 随着人们对宠物健康关注的增加&#xff0c;宠物医疗服务的需求也…

云端力量:探索亚马逊云服务器,提升您的业务无限可能

文章目录 前言亚马逊云服务器简介亚马逊云服务器的优势使用步骤Amazon EC2 实例类型常见问题 总结 前言 随着大数据、人工智能和物联网等技术的飞速发展&#xff0c;企业对于高效、灵活和可扩展的计算需求日益增强。在这样的背景下&#xff0c;亚马逊云服务器 以其卓越的性能、…

TSINGSEE青犀视频平台EasyCVR如何搭建自然保护区视频监控系统

随着经济的发展与城市化进程&#xff0c;很多国家自然保护区不断被破坏&#xff0c;为了对国家自然保护区进行全面管理&#xff0c;加大保护区的防护管理力度&#xff0c;人工管理工作量十分繁重&#xff0c;并会存在一些漏洞。因此在国家自然保护区建立一套完整的视频监控系统…

(免费)双相情感障碍筛查MDQ 在线测试双向情感障碍

MDQ用于筛查双相障碍&#xff0c;主要包含13个关于双相障碍症状的是非问题&#xff0c;当前测试采用的量表为2010年杨海晨博士翻译版。该量表为目前世界范围内最常用的双相障碍筛查量表&#xff0c;目前在精神科门诊最为常用的量表之一。 双向情感障碍筛查量表&#xff0c;也叫…

提取纯色马赛克

​​​​​​ 图像预处理 将彩色图像加载到内存。 转换图像为灰度图像&#xff0c;以简化处理。 对灰度图像应用二值化处理&#xff0c;将图像中的纯色区域分为前景和背景。这可以使用阈值处理来完成。 轮廓检测 使用轮廓检测算法&#xff0c;例如OpenCV的 findContours 函数&…

①Redis String 字符串类型【命令汇总】

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Redis String ①Redis String 字符串类型【命令…

Linux 无名管道实现文件复制

无名管道 通过一个管道&#xff08;假象&#xff09;进行传输数据&#xff0c;但是这个管道的传输方式是单工&#xff08;半双工&#xff09;的&#xff0c;就是这个管道允许进行发送和接受数据&#xff0c;不过不能同时进行。 创建无名管道 这里用到一个pipe&#xff08;&…