百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

HLS实战之Wireshark抓包分析

csdh11 2025-03-02 16:52 17 浏览

0.引言

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

在过去,网络封包分析软件是非常昂贵的,或是专门属于盈利用的软件。Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是全世界最广泛的网络封包分析软件之一。

Wireshark官网地址:
https://www.wireshark.org/

软件主界面:

wireshark怎么抓包、wireshark抓包详细图文教程

为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容,总结,如果是处理HTTP,HTTPS 还是用Fiddler, 其他协议比如TCP,UDP 就用wireshark。

wireshark 开始抓包

开始界面

wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。点击Caputre->Interfaces.. 出现下面对话框,选择正确的网卡。然后点击"Start"按钮, 开始抓包。注意网卡,千万不能选错了,否则抓不到正确的数据。我下面抓包这里选取的是VM8.

Wireshark 窗口介绍

(1) Display Filter(显示过滤器), 用于过滤

(2) Packet List Pane(封包列表), 显示捕获到的封包, 有源地址和目标地址,端口号。 颜色不同,代表

(3) Packet Details Pane(封包详细信息), 显示封包中的字段

(4) Dissector Pane(16进制数据)

(5) Miscellanous(地址栏,杂项)

使用过滤是非常重要的, 初学者使用wireshark时,将会得到大量的冗余信息,在几千甚至几万条记录中,以至于很难找到自己需要的部分。搞得晕头转向。过滤器会帮助我们在大量的数据中迅速找到我们需要的信息。

过滤器有两种:

一种是显示过滤器,就是主界面上那个,用来在捕获的记录中找到所需要的记录

一种是捕获过滤器,用来过滤捕获的封包,以免捕获太多的记录。 在Capture -> Capture Filters 中设置保存过滤,在Filter栏上,填好Filter的表达式后,点击Save按钮, 取个名字。比如"Filter 102"。

Filter栏上就多了个"Filter 102" 的按钮。

过滤表达式的规则

表达式规则如下:

(1) 协议过滤

比如TCP,只显示TCP协议。下面抓包中会涉及到RTMP和HTTP协议。

(2)IP 过滤

比如 ip.src ==192.168.1.102 显示源地址为192.168.1.102,ip.dst==192.168.1.102, 目标地址为192.168.1.102

(3)端口过滤

tcp.port ==80, 端口为80,tcp.srcport == 80, 只显示TCP协议的愿端口为80。下面涉及到8080端口。

(4)Http模式过滤

http.request.method=="GET", 只显示HTTP GET方法的。

(5)逻辑运算符为 AND/ OR


封包列表(Packet List Pane)

封包列表的面板中显示,编号,时间戳,源地址,目标地址,协议,长度,以及封包信息。 你可以看到不同的协议用了不同的颜色显示。你也可以修改这些显示颜色的规则, View ->Coloring Rules。

封包详细信息 (Packet Details Pane)

这个面板是我们最重要的,用来查看协议中的每一个字段。

各行信息分别为

Frame: 物理层的数据帧概况。

Ethernet II: 数据链路层以太网帧头部信息。

Internet Protocol Version 4: 互联网层IP包头部信息。

Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP。

Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议。


TCP包的具体内容

从下图可以看到wireshark捕获到的TCP包中的每个字段。

看到这, 基本上对wireshak有了初步了解, 现在我们看一个TCP三次握手的实例:

三次握手过程为,如下:


图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接。

第一次握手数据包

客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 如下图

第二次握手的数据包

服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即0+1=1, 如下图:

第三次握手的数据包

客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1, 如下图:

就这样通过了TCP三次握手,建立了连接。

这一节都是Wireshark使用图文教程。手把手教你抓包。


1.Wireshark抓包HLS

其中要设置三要素,三要素如下:

(1)ip地址

(2)端口

(3)协议 http

Wireshark窗口设置,如下:

ip.addr==172.16.204.133 and tcp.port==8080 and http


点击推流(可以使用各种推流工具),可以看到如下界面:

这里举例使用ffmpeg 推流: ffmpeg -re -i time.flv -vcodec copy -acodec copy -f flv -y

也可以参考前面的文章

超详细RTMP协议详解(资深流媒体架构师推荐)

手把手搭建流媒体服务器详细步骤

拉流使用ffplay(也可以使用其它工具),命令如下,界面如下表示可以捕获成功。

这里拉取RTMP流:ffplay
rtmp://172.16.204.133/live/livestream

拉取HTTP流,命令如下,表示可以捕获成功,可以看到这里捕获的都是HTTP协议的内容。

关于HLS手把手搭建流媒体服务器,可以参考这篇文章:手把手配置HLS流媒体服务器

这里拉取HTTP流:HLS拉流地址:ffplay
http://172.16.204.133:8080/live/livestream.m3u8

注意:HLS,这里走的是HTTP协议。

可以看到客户端请求服务器端livestream.m3u8的数据。

通过HLS抓包分析,可以看到通过HTTP分段拉取ts片段,如下图中的livestream-148.ts、livestream-149.ts、livestream-150.ts、livestream-151.ts

注意:客户端会实时拉取更新的livestream.m3u8。


还能抓取到PAT表、PMT表。

有些为了降低延时,有些策略会去拉取最近的ts流,但是这样可能会有个问题。为什么呢?

如果直接播放最后一个ts文件,那播放完当前ts文件的时候,这个时候去拉更新m3u8文件,接下来的ts文件不一定生成好。这样就可能会有断音,造成不好的用户体验。比如当前播放的是9秒,新生成的ts要10秒,这样就会造成断音。为了兼容这两种情况,那就可以适当缓冲下,再播放。

本篇文章偏向实战,抓包分析,本篇文章就分析到这里,欢迎大家关注欢迎关注,点赞,转发,收藏,分享,评论区讨论。

后面关于项目知识,后期会更新。欢迎关注微信公众号"记录世界 from antonio"。

相关推荐

OKHttp原理解析(okhttp的作用)

Okhttp应该是Android目前非常流行的第三方网络库,尝试讲解他的使用以及原理分析,分成几个部分:...

快速教会你优雅的解决TCP客户端端口耗尽的问题

Hello,我是Henry,相信各位开发老爷在使用大并发网络连接的时候,可能都遇到过TCP客户端端口耗尽的问题,这是一个常见问题,以下是系统性的解决方案及技术细节:1.理解端口限制的本质...

这3个接口基础知识,产品经理需要知道

产品经理在工作中,避免不了要阅读接口文档,希望本文能够帮助大家更好的了解接口。接口,即客户端(浏览器)向服务器提交请求,服务器向客户端返回响应。本质就是数据的传输与接收。本文主要介绍接口相关的基础知识...

Java 11新特性对开发者的影响:让编程更高效、更自由

Java11新特性对开发者的影响:让编程更高效、更自由在这个瞬息万变的编程世界里,每一代Java的更新都承载着无数开发者对性能优化、生产力提升以及代码美感追求的期望。作为继Java8之后的首个长期...

干货-okHttp的优点-收藏了(okhttp的好处)

OkHttp相较于其它的实现有以下的优点.支持SPDY,允许连接同一主机的所有请求分享一个socket。如果SPDY不可用,会使用连接池减少请求延迟。使用GZIP压缩下载内容,且压缩操作对用...

如何在 Java 项目中集成 DeepSeek

一、使用官方SDK基础集成1.添加依赖(Maven)<dependency><groupId>com.deepseek</groupId>...

spring cloud gateway 性能优化思路

SpringCloudGateway是一个高性能的API网关,但在实际的生产环境中,可能会遇到一些性能瓶颈。以下是一些SpringCloudGateway的性能优化方面:调整线程池...

你对Android中的okHttp的使用真的了解吗

框架下载地址:https://github.com/square/okhttp今天给大家讲解下网络框架okhttp的使用,这个框架非常强大,很多框架都用它来加载网络资源,目前很多开发者还在用As...

京东大佬问我,Nginx并发连接如何设置?详细说明

京东大佬问我,Nginx并发连接如何设置?详细说明首先,我需要回忆一下Nginx的并发模型。Nginx是基于事件驱动的异步架构,所以它的并发处理能力和配置参数有很大关系。主要的参数应该包括worker...

如何实现一个连接池?一文带你深入浅出,彻底搞懂

-前言-【2w1h】是技术领域中一种非常有效的思考和学习方式,即What、Why和How;坚持【2w1h】,可以快速提升我们的深度思考能力。...

Golang 网络编程(golang 系统编程)

TCP网络编程存在的问题:拆包:对发送端来说应用程序写入的数据远大于socket缓冲区大小,不能一次性将这些数据发送到server端就会出现拆包的情况。通过网络传输的数据包最大是1500字节,当TCP...

Spring6|Spring Boot3有哪些HTTP客户端可以选择

个人博客:无奈何杨(wnhyang)个人语雀:wnhyang...

10. 常用标准库(标准库有哪些)

本章深入解析Go语言核心标准库的关键功能与生产级应用技巧,结合性能优化与安全实践,提供高效开发指南。10.1fmt/io/os10.1.1fmt高级格式化...

Nginx之连接池(nginx 长连接 连接复用)

我们知道Nginx利用连接池来增加它对资源的利用率。下面我们一起来看看Nginx是如何使用连接池的。从上一节模块开始已经慢慢会接触一些Nginx的源码部分来。每个worker进程都有一个独立的ngx...

开发者必备的Android开发资源之OkHttp

小编在这里给各位Android开发者介绍的资源包括工具、库和网站等。有效地利用它们,将有助于减轻我们的工作量,提高我们的工作效率。为什么需要一个HTTP库Android系统提供了两种HTTP通信类,H...