首页 > 其他分享 >HTTP-FLV协议 抓包分析详解

HTTP-FLV协议 抓包分析详解

时间:2023-12-28 17:33:25浏览次数:25  
标签:十六进制 HTTP 字节 分块 2df99 FLV 长度 抓包

实现

实际就是利用了HTTP的分块传输,发送FLV数据,服务器无法知道流长度,所以不会填写Content-Length字段而是携带Transfer-Encoding: chunked字段,这样客户端就会一直接受数据了。

分块传输

编码规则

下面我们来看一下分块传输的编码规则,其实也很简单,同样采用了明文的方式,很类似响应头。

  1. 每个分块包含两个部分,长度头和数据块;
  2. 长度头是以 CRLF(回车换行,即\r\n,十六进制中是0d 0a)结尾的一行明文,用 16 进制数字表示长度;
  3. 数据块紧跟在长度头后,最后也用 CRLF 结尾,但数据不包含 CRLF;
  4. 最后用一个长度为 0 的块表示结束,即“0\r\n\r\n”。

HTTP-FLV协议 抓包分析详解_HTTP-FLV协议 抓包分析详解

9
FLV.....	
4
....
2df99
.............

理解分块长度

是将长度转换成十六进制,然后将十六进制存储成字符串,然后写入到发送数据里面

例如:

长度为188,313,十六进制为2df99,存储成字符串2df99, 然后填写到发送缓存,通过下面的TCP追踪流可以看到长度的展示

抓包分析

HTTP-FLV协议 抓包分析详解_HTTP-FLV协议 抓包分析详解_02

追踪TCP流

HTTP-FLV协议 抓包分析详解_HTTP-FLV协议 抓包分析详解_03

可以看到

9          字符串9,代表十六进制的9,表明后面数据长度是9,后面两个字节/r/n,分割

FLV.....   FLV的头部数据,刚好是九个字节,后面两个字节/r/n,分割  

4      字符串4,代表十六进制的4,表明后面数据长度是4,后面两个字节/r/n,分割  

........这里是四个字节,表示前面Tag长度,因为第一个FLV头没有Tag,所以这里是长度为0,后面两个字节/r/n,分割  

2df99 字符串2df99,十六进制为2df99,长度为188,313,后面两个字节/r/n,分割  

 1.请求:

GET /live/1_1.flv HTTP/1.1
Host: 192.168.12.202:8080
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Accept: */*
Referer: http://192.168.12.202:8080/players/srs_player.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8

2.响应:

HTTP/1.1 200 OK
Connection: Close
Content-Type: video/x-flv
Server: SRS/6.0.59(Bee)
Transfer-Encoding: chunked//表示启用分块传输

HTTP-FLV协议 抓包分析详解_HTTP-FLV协议 抓包分析详解_04

这里注意,因为没有Content-length字段,所以wirshark抓包未识别为HTTP,还是TCP,如下图所示。

3.传输数据

HTTP-FLV协议 抓包分析详解_HTTP-FLV协议 抓包分析详解_05

我们可以看到就是基于分块传输的flv数据流:

39是ascii码的9,表示块大小是9;

0d0a就是\r\n,表示分隔符;


标签:十六进制,HTTP,字节,分块,2df99,FLV,长度,抓包
From: https://blog.51cto.com/fengyuzaitu/9017088

相关文章

  • 恒创科技:常见HTTP 500错误发生原因及解决办法剖析
    ​对于网站运营者来说,提到500内部服务器错误并不陌生。互联网行业对它的称呼有好几种,如“500内部服务器错误”、“HTTP500-内部服务器错误”、“临时错误(500)”、“内部服务器错误”。尽管叫法不同,但根本问题是相同的。目前,它仍算是一个比较常见的错误提示,一般情况下......
  • 海康华为大华宇视等摄像头以及各种直播流地址(RTSP/RTMP/FLV/HLS等)通过LiveNVR转成标准
    @目录1、背景说明2、通道配置2.1、直播流地址配置2.2、配置RTSP接入2.3、配置Onvif接入2.4、配置SDK接入2.4.1、海康SDK接入2.4.2、大华SDK接入2.4.3、天地伟业SDK接入2.5、配置拉转视频文件2.6、海康ISUP接入2.6.1、海康ISUP接入配置2.6.2、海康设备接入2.6.2.1、海康EHOME接......
  • .NET Core发送HTTP Post和Get
    ///<summary>///公共方法——发送httppost请求2020年6月2日11:20:42Dennyhui///</summary>///<paramname="formData">参数</param>///<paramname="requestUri">请求地址</param>......
  • 项目中使用spring.session.store-type=redis和@EnableRedisHttpSession 的区别
    spring项目的session存在哪里SpringSession提供了多种存储策略,可以选择将session存储在内存、数据库或Redis缓存中。内存存储:这是默认的存储方式,适用于单个应用程序的情况。SpringSession会在应用程序启动时创建一个ConcurrentHashMap对象,用于存储session数据。JDBC存......
  • 配置Https访问
    背景:因为https工作工程中使用很多次了,今天给国产机上的tomcat进行部署的时候,发现一个报错,提示配置的协议无效,故记录下处理方法,也记录下整个https的配置过程。报错内容: 这个问题其实在window环境上部署的时候也出现过,windows环境上的解决方式是添加一个本地库tcnative-1.......
  • 记一次执行yum命令报错:Could not retrieve mirrorlist http://mirrorlist.centos.org/
    执行yum安装命令时报如下错误:root@docker-test101~]#vi/etc/hosts[root@docker-test101~]#yuminstallopenssl*-yLoadedplugins:fastestmirror,langpacksCouldnotretrievemirrorlisthttp://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=sto......
  • HTTP代理服务器:Go语言下的“网络翻译官”
    开场白:在这个全球化的网络时代,有时我们需要一个“翻译官”来帮助不同系统、不同语言进行交流。今天,我们就来探讨如何使用Go语言,轻松实现这样一个角色——HTTP代理服务器,让我们的网络请求更加畅通无阻!知识点一:什么是HTTP代理服务器?想象一下,你是一名只会说中文的游客,身处一个只会说英......
  • 处理HTTP请求的gzip压缩
    开场白:在互联网的浩瀚海洋中,数据传输是不可或缺的一环。为了提高传输效率,许多服务采用gzip压缩技术对数据进行压缩。今天,我们将深入探讨如何在Go语言中优雅地处理HTTP请求的gzip压缩。知识点一:gzip压缩的原理Gzip压缩是一种广泛使用的压缩算法,通过将数据中的重复模式和冗余信息进行......
  • 处理HTTP错误响应:Go语言中的稳健之道
    开场白:在Web开发中,HTTP错误响应是不可避免的一部分。当请求无法成功完成时,服务器会返回一个错误响应。今天,我们将深入探讨如何在Go语言中优雅地处理这些HTTP错误响应。知识点一:HTTP错误响应的常见类型HTTP错误响应通常由状态码和相应的消息组成。常见的状态码包括:404(未找到)、500(内......
  • 使用aiohttp异步调用API+request上传文件中文文档名乱码解决方案
    有时候在调用需要用异步调用API接口。在python中有很多框架,比如asyncio,Celery,Quart等。这里我选择了asyncio。Python3.5以上版本内置了asyncio库,可以用来编写单线程的并发代码。可以使用此库与aiohttp结合来发送异步HTTP请求。Python调用案例GETimportasyncioimportaio......