RTSP协议分析与安全实践

news2025/1/11 22:48:03

RTSP协议,全称实时流协议(Real Time Streaming Protocol),前文已经简单介绍了RTSP相关协议;

RTSP和RTP(RTCP)

这里再提一下RTSP和RTP/RTCP、RSVP的关系;如图:

请添加图片描述

RTSP和HTTP

  • 相似性:RTSP和HTTP协议都使用纯文本来发送消息,而且RTSP协议的语法也类似于HTTP。 RTSP一开始就是这样设计的,主要是为了能兼容使用之前编写的HTTP协议分析代码。
  • 区别:RTSP是有状态的,需要知道当前处于什么状态,也就是说RTSP的命令总是按照顺序发送,某个命令总在另一个命令之前发送。无论处于什么状态,RTSP都不会断开连接。而HTTP则无状态,发送一个命令后,连接就会断开,命令之间没有依赖性。另外,RTSP协议使用554端口,HTTP使用80端口。

RTSP交互过程

RTSP Client RTSP Server OPTIONS request--询问S有哪些方法可用 OPTIONS response--S回应信息中包括提供的所有可用方法 DESCRIBE request--要求得到S提供的媒体初始化描述信息 DESCRIBE response--S回应媒体初始化描述信息,主要是sdp SETUP request--设置会话的属性,以及传输模式,提醒S建立会话 SETUP response--S建立会话,返回会话标识符,以及会话相关信息 PLAY request--(with Session ID)C请求播放 PLAY response--S回应该请求的信息 Streaming Data (RTP over UDP/TCP) PAUSE request (with Session ID)--C请求关闭会话 PAUSE response TEARDOWN request (with Session ID) TEARDOWN response RTSP Client RTSP Server

RTSP交互过程的请求数据解析

由于RTSP跟HTTP的相似,除了在wireshark上捕获RTSP请求,burpsuite一类http流量的测试工具也可以捕获RTSP流量;
请添加图片描述

OPTIONS

请求服务器提供的可用方法;

OPTIONS rtsp://192.170.1.1/xxx RTSP/1.0
CSeq: 34
User-Agent:VLC media player (LIVE555 Streaming Media v2005.11.10)

服务器返回对应的可用方法,常见包含OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE,GET_PARAMETER

RTSP/1.0 200 OK
CSeq: 34
Date: Tue, May 07 2024 07:32:10 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE,GET_PARAMETER //服务器提供的可用的方法

DESCRIBE

请求会话描述信息(SDP)

DESCRIBE rtsp://192.170.1.1/xxx RTSP/1.0
CSeq: 35
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
Accept: application/sdp

详细SDP信息参考SDP协议解析

RTSP/1.0 200 OK
CSeq: 35
Date: Tue, May 07 2024 07:32:11 GMT
Content-Type: application/sdp
Content-length: 414
Content-Base: rtsp://192.170.1.20/xxx/

v=0
o=StreamingServer 3331435948 1 IN IP4 192.170.1.20
s=RTSP Session
c=IN IP4 0.0.0.0
t=0 0
a=control:*
a=range:npt=0-
m=video 0 RTP/AVP 96
a=control:trackID=0
a=rtpmap:96 H264/90000
a=fmtp:96  packetization-mode=1; profile-level-id=4D0033; sprop-parameter-sets=J00AM+dAPAET8s1AQEB8AAADAAQAAAMAyMQAAfoYAAF7k///wKA=,KO48gA==;
m=audio 0 RTP/AVP 97
a=control:trackID=1
b=as:32
a=rtpmap:97 L16/16000/1

SETUP

客户端提醒服务器建立会话,并确定传输模式;通过trackID参数进行控制,0表示rtp包,1表示rtcp包

SETUP trackID=1 RTSP/1.0
CSeq: 37
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
Transport: RTP/AVP/TCP;unicast;interleaved=2-3
Session: 1012;timeout=65

服务端返回会话标识,Session值;

RTSP/1.0 200 OK
CSeq: 37
Date: Tue, May 07 2024 07:32:11 GMT
Transport: RTP/AVP/TCP;unicast;destination=192.170.1.20;source=192.170.1.20;interleaved=2-3
Session: 1012;timeout=65

PLAY

播放请求;

PLAY rtsp://192.170.1.20/xxx/ RTSP/1.0
CSeq: 38
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
Session: 1012;timeout=65
Range: npt=0.000-

返回流数据;

RTSP/1.0 200 OK
CSeq: 38
Date: Tue, May 07 2024 07:32:11 GMT
Range: npt=0.000-
Session: 1012
RTP-Info: url=rtsp://192.170.1.20/;seq=0

$../....H.....tx'k..K4{s>/..f..BI.....22 .(`.o%....$.........tz.....E= ...........#$.......H.....tx(.<.$....`..H.....tx<.. ..F!.....1d.....%2.h 6...h%q.|.te.zs........u.5..X...)y..x...t.C....6s..SE..F.....m[..... .'b/.^.GbV..^n.E.5=7....g..v.ZD;..-z.-..S%...
....4M..>E6.TK....I2pC.....aE.epb.....{.. ....~..h*.7...MY...."..x....Om....|T.7...TI,B+DO+z.b.Z...E..3.-.|T..,.....P%.G.../...V.H.Y.....><......... ..]...1_qq......+[............?.c^....\...y.........*8T....3L.....>3_x.=.84.WG!r..k....V.......x#..a}./J..?t...C...2...W...U....X.[.CB...?v...e..

TEARDOWN

客户端发起关闭请求;

TEARDOWN rtsp://192.170.1.20/xxx/ RTSP/1.0
CSeq: 38
Session: 1012
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

服务器回应关闭会话;

RTSP/1.0 200 OK
Server: UServer 0.9.7_rc1
Cseq: 38
Session: 1012

SDP协议

SDP(Session Description Protocol)是一个描述多媒体通信会话的格式,用来在会话发起者和参与者之间交换会话的参数和能力。SDP 本身并不传送媒体数据,它只描述了媒体流的元数据,比如媒体类型(音频、视频、文本等)、格式、传输协议和网络地址。

v=0
o=StreamingServer 3331435948 1 IN IP4 192.170.1.20
s=RTSP Session
c=IN IP4 0.0.0.0
t=0 0
a=control:*
a=range:npt=0-
m=video 0 RTP/AVP 96
a=control:trackID=0
a=rtpmap:96 H264/90000
a=fmtp:96  packetization-mode=1; profile-level-id=4D0033; sprop-parameter-sets=J00AM+dAPAET8s1AQEB8AAADAAQAAAMAyMQAAfoYAAF7k///wKA=,KO48gA==;
m=audio 0 RTP/AVP 97
a=control:trackID=1
b=as:32
a=rtpmap:97 L16/16000/1
  1. v=(版本) - 指定SDP的版本号,目前通常为0。

  2. o=(所有者/创建者和会话ID) - 描述会话的所有者,包含用户名、会话ID、会话版本、网络类型、地址类型和所有者地址。

  3. s=(会话名称) - 会话的名字。

  4. c=(连接信息) - 网络类型、地址类型和连接地址。

  5. t=(时间描述) - 会话的开始和结束时间。

  6. a=(属性) - 会话属性描述(可选),可以是媒体属性或会话属性,不同的属性有不同的含义。

  7. m=(媒体描述) - 描述媒体类型、端口、协议和格式。

  8. i=*(会话信息) - 提供有关会话的额外信息(可选)。

    i=A Seminar on the session description protocol
    
  9. u=(URI) - 描述与会话相关的更多信息的URI(可选)。

    u=http://www.example.com/seminars/sdp.pdf
    
  10. e=(电子邮件地址) - 提供会话联系人的电子邮件地址(可选)。

    e=j.doe@example.com
    
  11. p=(电话号码) - 提供会话联系人的电话号码(可选)。

    p=+1 617 555-6011
    
  12. b=(带宽信息) - 指定会话或媒体的带宽信息(可选)。

    b=CT:384
    
  13. r=*(重复时间) - 会话的重复时间(可选)。

    r=604800 3600 0 90000
    
  14. z=*(时区调整) - 会话的时区偏移量(可选)。

    z=2882844526 -1h 2898848070 0
    
  15. k=*(加密密钥) - 指定媒体加密的密钥(可选且不推荐使用)。

    k=clear:1234
    

以上是SDP协议中的一些主要字段。SDP是非常灵活的,可以包含多个媒体描述m和多个属性a,每个描述可以有自己的设置,如编解码器、带宽限制和其他媒体特定属性,业务上可以在这个参数上自定义使用。

RTSP安全测试

python脚本

import cv2

# RTSP URL of the video stream
rtsp_url = 'rtsp://192.168.137.81:554/xxx'

# Create a VideoCapture object
cap = cv2.VideoCapture(rtsp_url)

# Check if the video stream is opened correctly
if not cap.isOpened():
    print("Error: Could not open video stream.")
else:
    print("Video stream opened successfully.")

# Loop to display the frames
while cap.isOpened():
    # Capture frame-by-frame
    ret, frame = cap.read()
    
    # If frame is read correctly ret is True
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    
    # Display the resulting frame
    cv2.imshow('RTSP Stream', frame)
    
    # Press 'q' on the keyboard to exit
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything is done, release the VideoCapture object
cap.release()
# Closes all the frames
cv2.destroyAllWindows()

VLC等连接工具

请添加图片描述

burpsuite等http流量请求抓包工具

请添加图片描述

RTSP安全实践

使用RTSPS

观察RTSP的交互过程后,我们可以发现RTSP没有任何权限验证,也没有加解密过程(即使有加密,也是明文传输加密密钥)。因此,RTSP并不是一个安全的协议,与http类似,RTSP有自己的安全版本RTSPS,通过SSL/TLS进行通道加密,以确保传输数据的保密性和完整性。然而,RTSP常用于嵌入式设备摄像头中,这类IoT的场景由于性能等原因的限制,无法使用RTSPS。那么,针对这类场景,有哪些相对安全的方案可以使用呢?

身份验证

因为RTSP是基于HTTP实现的,所以也可以使用HTTP相关的认证服务,包括不限于

  • HTTP基础认证(Basic Authentication)
  • HTTP Digest 认证
  • WS-Security(Web Services Security,简称WSS)

基本就是在服务之前添加一个认证授权,但是在局域网环境下,在配网阶段或者服务第一次开启的时候,需要让用户配置一个账号密码;

私有加密

获取RTSP流量后,主要包括视频和音频流。如果对数据进行加密处理,即使被获取,也无法解析播放。

常见的加密或数据处理方法包括:

  • 数据偏移(非加密)
  • 新增一个字段(非加密)
  • 使用AES加密或其他常见的加密方案

虽然在私有加密中出现了多个非加密的方案,但由于视频流需要实时率,加上嵌入式设备的数据处理能力有限,视频流的数据量较大,因此前两种方法是常见的处理方案。

即使采用AES加密视频流数据,加密key也需要在发送端和接收端存储,且通常是固定的key。一旦被分析提取,其效果等同于未加密。在性能允许的情况下,相对安全的方案是通过用户在身份验证过程中配置的账号密码来衍生对应的加密key。这样,两端都有key并且key不是固定的,但在实际场景下这种方案较难实现。

其他

  • 限制连接数
  • 网络隔离

这里是有一些特定场景的限制,具体也要看业务需求;当然局域网服务本身就很难实现的不存在风险一说,这里也只是为了在有限的条件下达到最好的效果,如果还有其他更好的方案也可以交流。

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

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

相关文章

Android13 WMS窗口层级树

1&#xff0c;认识层级树 可以通过dumpsys activity containers 看到 WMS 层级树的结构 ACTIVITY MANAGER CONTAINERS (dumpsys activity containers) ROOT typeundefined modefullscreen override-modeundefined requested-bounds[0,0][0,0] bounds[0,0][1440,2960]#0 Displa…

【驱动篇】龙芯LS2K0300之单总线驱动

实验过程 实验目的&#xff1a; 在龙芯开发板上面使用单总线驱动DS18B20温度传感器 ① 根据原理图连接DS18B20模块 ② 将i2c0引脚的功能复用为GPIO ③ 注册字符设备&#xff0c;按照DS18B20的读写时序编写读写驱动接口 ④ 编写测试用例解析传感器的数值 原理图 将板子上…

细粒度图像分类论文阅读笔记

细粒度图像分类论文阅读笔记 摘要Abstract1. 用于细粒度图像分类的聚合注意力模块1.1 文献摘要1.2 研究背景1.3 本文创新点1.4 计算机视觉中的注意力机制1.5 模型方法1.5.1 聚合注意力模块1.5.2 通道注意力模块通道注意力代码实现 1.5.3 空间注意力模块空间注意力代码实现 1.5.…

[MQTT]Mosquitto的權限管理_使用者/密碼(pwfile)和訪問控制清單(aclfile)

延續Mosquitto的內網連接(intranet)和使用者/密碼權限設置文章&#xff0c;經解讀mosquitto官網文檔&#xff0c;在權限管理部分&#xff0c;除了設置使用者/密碼(pwfile)之外&#xff0c;還有訪問控制清單(Access Control List, aclfile)可以設置。經過測試&#xff0c;同時設…

Python中使用PyQT5库时报错:没有Qt平台插件可以初始化

一、发现问题&#xff1a;无限易pythonGo打开执行的时候报&#xff1a;“没有Qt平台插件可以初始化&#xff0c;请重新安装应用程序。”的错误&#xff0c;点击确定后无限易崩溃闪退。 二、解决问题&#xff1a; 1、重新安装依赖&#xff0c;打开CMD输入pip list&#xff0c;查…

开发uniapp插件包aar文件,使uniapp可以调用jar包

背景 使用 uniapp 开发应用时&#xff0c;很多时候都需要调用第三方的sdk&#xff0c;一般以 jar 为主。为了应对这个问题&#xff0c;官方提供了插件方案&#xff0c;可以将第三方 jar 包进行封装为 aar 包后&#xff0c;再集成到 uniapp 中使用。 一、环境安装工具 1、jdk…

拓扑排序——C语言

拓扑排序&#xff08;Topological Sorting&#xff09;是一种用于有向无环图&#xff08;DAG&#xff09;的排序算法&#xff0c;其输出是图中所有顶点的线性排序&#xff0c;使得对于每条有向边 (u, v)&#xff0c;顶点 u 在 v 之前出现。拓扑排序确定了项目网络图中的起始事件…

嵌入式中逻辑分析仪与示波器的基本原理

大家好,今天主要给大家分享一下,嵌入式中如何使用逻辑分析仪和示波器的方法,希望对大家有所帮助。 https://dreamsourcelab.cn/ 第一:什么是逻辑分析仪 是否遇到使用示波器分析数字电路的冏境:深度不够,时间太短,无法抓到想要的波形,没有协议内容解析? 逻辑分析仪…

深度学习11-13

1.神经元的个数对结果的影响&#xff1a; &#xff08;http://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html&#xff09; &#xff08;1&#xff09;神经元3个的时候 &#xff08;2&#xff09;神经元是10个的时候 神经元个数越多&#xff0c;可能会产生…

注意 llamaIndex 中 Chroma 的坑!

llamaIndex 做索引是默认存在内存中&#xff0c;由于索引需要通过网络调用 API&#xff0c;而且索引是比较耗时的操作&#xff0c;为了避免每次都进行索引&#xff0c;使用向量数据库进行 Embedding 存储以提高效率。首先将 Document 解析成 Node&#xff0c;索引时调用 Embedd…

解析PDF文件中的图片为文本

解析PDF文件中的图片为文本 1 介绍 解析PDF文件中的图片&#xff0c;由两种思路&#xff0c;一种是自己读取PDF文件中的图片&#xff0c;然后用OCR解析&#xff0c;例如&#xff1a;使用PyMuPDF读取pdf文件&#xff0c;再用PaddleOCR或者Tesseract-OCR识别文字。另一种使用第…

小鹏汽车2025冲刺类L4智驾,挑战与机遇并存

随着科技的飞速发展&#xff0c;智能驾驶已成为汽车行业的前沿领域。近日&#xff0c;小鹏汽车在AI DAY上宣布国内首个量产上车的端到端大模型&#xff0c;这一创新举措无疑为智能驾驶的发展注入了新的活力。然而&#xff0c;在迈向2025年实现类L4级智能驾驶的道路上&#xff0…

DHCP原理1-单个局域网出现多个DHCP服务器会发生什么

1. 背景 DHCP全称是Dynamic Host Configuration Protocol。其协议标准是RFC1541&#xff08;已被RFC2131取代&#xff09;&#xff0c;主要实现服务器向客户端动态分配IP地址&#xff08;如IP地址、子网掩码、网关、DNS&#xff09;和配置信息。其系统架构是标准的C/S架构。RFC…

运算放大器(运放)低通滤波反相放大器电路和积分器电路

低通滤波反相放大器电路 运放积分器电路请访问下行链接 运算放大器(运放)积分器电路 设计目标 输入ViMin输入ViMax输出VoMin输出VoMaxBW&#xff1a;fp电源Vee电源Vcc–0.1V0.1V–2V2V2kHz–2.5V2.5V 设计说明 这款可调式低通反相放大器电路可将信号电平放大 26dB 或 20V/…

算是一些Transformer学习当中的重点内容

一、基础概念 Transformer是一种神经网络结构&#xff0c;由Vaswani等人在2017年的论文Attentions All YouNeed”中提出&#xff0c;用于处理机器翻译、语言建模和文本生成等自然语言处理任务。Transformer同样是encoder-decoder的结构&#xff0c;只不过这里的“encoder”和“…

OpenCV机器学习-人脸识别

一 基本概念 1 计算机视觉与机器学习的关系 计算机视觉是机器学习的一种应用&#xff0c;而且是最有价的应用。 2 人脸识别 哈尔(haar)级联方法 Harr是专门为解决人脸识别而推出的&#xff1b; 在深度学习还不流行时&#xff0c;Harr已可以商用&#xff1b; 深度学习方法&am…

thrift接口调用工具

写了一个thrift接口调用工具 导入thrift文件就可以直接调用相应接口 工具会根据thrift文件中接口的参数名&#xff0c;参数类型&#xff0c;返回值等等&#xff0c;自动生成接口参数&#xff0c;和结果json化显示。 https://github.com/HuaGouFdog/Fdog-Kit

C++初学者指南第一步---14.函数调用机制

C初学者指南第一步—14.函数调用机制 文章目录 C初学者指南第一步---14.函数调用机制1.记住&#xff1a;内存的结构2.函数调用是如何工作的3. 不要引用局部变量4. 常见编译器优化5. Inlining内联 1.记住&#xff1a;内存的结构 堆&#xff08;自由存储&#xff09; 用于动态存…

鸿蒙开发系统基础能力:【@ohos.hiAppEvent (应用打点)】

应用打点 本模块提供了应用事件打点能力&#xff0c;包括对打点数据的落盘&#xff0c;以及对打点功能的管理配置。 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import hiAppEve…

英伟达下一代DLSS或利用人工智能

英伟达的黄仁勋在2024年Computex展会上的问答环节中&#xff0c;提前透露了公司未来几代深度学习超采样&#xff08;DLSS&#xff09;技术的发展方向。在回答有关DLSS的问题时&#xff0c;黄仁勋表示&#xff0c;未来我们将看到通过纯粹的人工智能生成的纹理和对象。他还提到&a…