当前位置: 首页 > 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 规则里自行查看含义)

http://www.lryc.cn/news/234624.html

相关文章:

  • srs webrtc推拉流环境搭建(公网)
  • 【Flutter】设计原则(2)深入解析 SOLID 原则的应用
  • python爬虫概述及简单实践:获取豆瓣电影排行榜
  • ts视频文件转为mp4(FFmpeg)
  • 2023年咸阳市《网络建设与运维》赛题解析------四、安全配置
  • 什么是java枚举?为什么要用java枚举?
  • USB复合设备构建CDC+HID鼠标键盘套装
  • 准备篇(四)HTTP 基本原理
  • 模板初阶笔记分享
  • 使用Spring Boot实现大文件断点续传及文件校验
  • 读取PDF中指定数据写入EXCEL文件
  • [黑马程序员SpringBoot2]——开发实用篇1
  • Python------列表 集合 字典 推导式(本文以 集合为主)
  • 网工内推 | Linux运维,六险二金,最高30K,IE认证优先
  • 服务器集群配置LDAP统一认证高可用集群(配置tsl安全链接)-centos9stream-openldap2.6.2
  • 12-1- GAN -简单网络-线性网络
  • Antv/G2 分组柱状图+折线图双轴图表
  • springboot323基于Java的美妆购物网站的设计与实现
  • vue项目本地开发完成后部署到服务器后报404
  • Android设计模式--状态模式
  • C++关系运算符重载
  • HLS基础issue
  • C#特性(Attribute)
  • 【设计模式】七大设计原则
  • 思维导图软件 Xmind mac中文版特点介绍
  • Day32力扣打卡
  • 抗击.Elbie勒索病毒:如何应对.Elbie病毒威胁,保卫您的数据
  • Vue3 函数式弹窗
  • 如何解决 Critical dependency: the request of a dependency is an expression ?
  • 挑战视觉边界,探索图形验证码背后的黑科技