转载自:

https://ihomura.cn/2018/05/15/Bilibili%E7%9B%B4%E6%92%AD%E5%BC%B9%E5%B9%95%E6%8A%93%E5%8F%96-2-Fiddler%E4%B8%8EWireShark/

前言

上次提到了 Bilibili 的弹幕传输是基于 WebSocket 的二进制帧,因此给调试带来了一定不便。

但是 WebSocket 归根到底还是 TCP,并且我们已经知道它的帧结构了,剩下的就是抓包了。

这里提供三种方法:websocket-monitor, Fiddler, WireShark。

websocket-monitor

websocket-monitor 是 FireFox 的一款插件,它是由大名鼎鼎 Firebug 开发团队开发的。

不过不幸的是它只支持到 FireFox 57,在我的电脑上 FireFox 的版本号是 59,所以我没法使用它,但是从截图来看应该是一个很不错的插件。

这也是为什么标题中没有它(笑)。

Fiddler

Fiddler 其实是一款 HTTP 层面的网络调试器,按理来说它应该没有能力调试 WebSocket,因为 WebSocket 只有握手的时候才会使用 HTTP。

不过事实上从 Fiddler 4.5 之后 Fiddler 就内置了调试 WebSocket 的功能,非常方便。

只要双击最初握手的 HTTP 包,切换到 WebSocket 选项卡即可:

从图中可以看出 Fiddler 支持多种形式解析数据,由于弹幕数据是用 JSON 传输的,因此我们正好可以用 JSON 看到数据。

WireShark

相比 Fiddler 来说,WireShark 就要底层的多了,它甚至可以用来抓链路层的包,对于 WebSocket 这种基于 TCP 的包自然也是不在话下。

不过稍微有点麻烦的是,Bilibili 采用的是 wss,即 Secure WebSocket。和 HTTPS 类似,它采用了 SSL/TLS 加密,因此在用 WireShark 抓包的时候我们只能看到加密后的数据,要解密的话需要相应的 key。

好在浏览器为我们提供了一项功能是 key logs,利用这个功能就可以让 WireShark 自动解密。

首先我们设置环境变量 SSLKEYLOGFILE 为存放 key logs 的路径,比如在 Windows 下:

重启浏览器就可以看到文件中有内容了,然后我们需要设置 WireShark 让它自动读取这个文件,在首选项中选择 Protocols->SSL-> (Pre)-Master-Secret log filename 设置为刚才环境变量中的路径即可。

WireShark 默认会捕获所有链路层、网络层和传输层的包,所以如果不过滤的话根本没法找到想要的包。

由于之前在 Chrome 摁 F12 看见 WebSocket 走的端口是 2245,所以这里使用的条件是 tcp and tcp.port == 2245

可以看到所有的包都被筛选出来了。

这时候只要在任意一个包上双击,在弹出的页面中可以看到下面有一个 Decrypted SSL,其中就是解密后的内容了。

这里中间的昵称和弹幕内容等都是 UTF-8 编码的,但是 WireShark 并没有检测出编码,只显示了 ASCII 字符。

小结

到这里其实调试就非常简单了,个人推荐采用 Fiddler 调试,相当灵活和简单。

下一节就是真正分析 Bilibili 弹幕传输协议了,不过实际上我才用了一种非常偷懒的办法(逃。

参考资料

What’s New in Fiddler 4.5
发现新大陆:一个最简单的破解SSL加密网络数据包的方法
NSS Key Log Format

后记

一开始使用 Fiddler 的时候不知道可以直接调试 WebSocket,果断写了 FiddlerScipt 结果最后倒在了编码问题上。

核心原因是 FiddlerScipt 本质是 JScipt.NET,所以它的 char 是双字节的,我把每个字节读入后转为 char 就直接导致 UTF-8 编码的文本 double encoded——当然,这是我卡了很久才发现的。

不过也算是复习了一下 UTF-8 编码规则吧,以后再见到 C2 C3 就有“二进制直觉”了吧(苦笑)。

Bilibili直播弹幕抓取(2):Fiddler与WireShark相关推荐

  1. Bilibili直播弹幕抓取(1):WebSocket

    Bilibili直播弹幕抓取(1):WebSocket 转载自https://ihomura.cn/2018/05/14/Bilibili%E7%9B%B4%E6%92%AD%E5%BC%B9%E5% ...

  2. Bilibili直播弹幕抓取(3):弹幕传输协议分析

    转载自 https://ihomura.cn/2018/05/17/Bilibili%E7%9B%B4%E6%92%AD%E5%BC%B9%E5%B9%95%E6%8A%93%E5%8F%96-3-% ...

  3. 虎牙直播弹幕抓取 相关资料整理

    当前可用项目 看大佬的汇总种类比较齐全,有其他开发需求直接fork修改就行 各种直播平台的直播流&弹幕流解析 https://github.com/wbt5/real-url 自行思路参考 1 ...

  4. matlab弹幕抓取,知乎直播弹幕抓取与解析

    背景 因为想拿到一些知乎弹幕的数据 以及做一个直播播报机器人,所以最近在研究知乎直播的弹幕 分析 抓取比较简单,不多说了...都是正常的操作 但是 拿到的数据却很奇怪 为了演示方便,我们以 rest ...

  5. 抖音弹幕抓取(适合纯小白)

    抖音弹幕抓取 准备代码 准备环境 运行 算是一个使用记录,代码和具体的环境配置已经有前辈写的很棒了,只是把这些整合到了一起,防止遗忘,也希望帮助到有需要的人. 准备代码 在github下载代码并解压, ...

  6. 极简式 Unity 获取 bilibili 直播弹幕、SC、上舰、礼物等 插件

    极简式 Unity 获取 bilibili 直播弹幕.SC.上舰.礼物等 1. 声明 下载链接 软件均仅用于学习交流,请勿用于任何商业用途! 2. 介绍 该项目为Unity实时爬取B站直播弹幕. 项目 ...

  7. 乐视直播api编写java,GitHub - czp3009/bilibili-live-api: bilibili 直播弹幕协议 API Java 版(deprecated)...

    Deprecated 本仓库已废弃. 本项目使用 Bilibili Web 协议, 随着 Bilibili 前端的更新, 已经无法正常使用. 本项目仅提供 Bilibili 直播间的弹幕获取有关 AP ...

  8. “免费午餐”成为销量第一,看明星吉杰淘宝直播如何抓取粉丝眼球

    29日晚,明星吉杰淘宝直播[第九届"穷人"狂欢节],6个多小时的直播里,吉杰共上架70件商品,1条免费午餐公益捐助链接.获得超过300万观看,带货销量近45万,销售额(估)达160 ...

  9. 斗鱼直播地址抓取——转载

    先附上原地址斗鱼直播真实地址解析,直播源抓取方法 找了很久发现52pj上有一个帖子把自己尝试出来的办法发出来了,虽然有点分功夫,但还是发现了规律,难得的毅力.以下为摘录: 2019-5-19重磅更新: ...

最新文章

  1. 学好python需要多久-python入门要学多久
  2. java 自定义tostring_Java 怎么写这个自定义class的toString方法?
  3. SpringBoot整合SpringBatch实用简例
  4. Python教程:Python内置数据结构之双向队列!
  5. 添加错误debug信息
  6. python3 列表相关操作
  7. BZOJ_1601_[Usaco2008_Oct]_灌水_(最小生成树_Kruskal)
  8. Description Resource Path Location Type Java compiler level does not match the version of the insta
  9. 英特尔推出业界领先的AI与数据分析平台,全新处理器、内存、存储、FPGA解决方案集体亮相
  10. nfs+lvm解决磁盘空间扩容问题
  11. c语言编程1 3 5 7 9的阶乘和,阶乘怎么写程序
  12. 华云数据入围2021新经济年度巅峰榜
  13. 康耐视智能相机更新固件版本方式
  14. FWT(快速沃尔什变换)
  15. kaggle TMDB Box Office Prediction
  16. ln x的matlab表示,matlab中ln怎么表示
  17. 操作系统:磁盘调度算法FCFS算法(c语言)
  18. AtCoder Regular Contest 071 C - 怪文書 / Dubious Document
  19. Silverlight开发历程—(绘制放射渐变图形)
  20. 区块链开发之Metamask使用调研

热门文章

  1. 邮件设置 ssl://smtp.exmail.qq.com:465 can not connect to the SMTP server
  2. 如何用你的知识创造额外收入
  3. 全境封锁:背水一战 - 概念艺术
  4. latex上编写论文转到word上
  5. 使用ErrorStack进行错误跟踪及诊断
  6. python中双下划线_python中的下划线及双下划线
  7. Java Stream流之求和
  8. 阿里云免费证书“fileauth.txt内容配置错误”解决
  9. iOS NSInteger 的输出 %d %ld %zd %ld (long)
  10. zabbix集成zatree和onealert告警安装