python - bilibili(三)wireshark分析

时间:2024-04-03 08:35:38

当我们开始打开浏览器,并进入B站直播网页前,我们打开wireshark软件(软件的下载与安装请百度一下)开始截取当前数据。

然后输入直播间网址,enter进入就可以停止截取数据了,然后我们分析所截取的这段数据。

python - bilibili(三)wireshark分析

GET请求 如果你的数据过多请这样过滤:

python - bilibili(三)wireshark分析

这样 你的http网址请求就很快筛选出来了。右键跟踪流发现这个请求得到的是源代码。

python - bilibili(三)wireshark分析

这段源代码对于我们来说是没有意义的。我们使用urlopen就可以打开这样的源码。

接着,我们继续往下翻,发现浏览器接着又来了个GET请求了

python - bilibili(三)wireshark分析

同样我们追踪这个流发现服务器端给我们发来了两个有意义的通讯

python - bilibili(三)wireshark分析

python - bilibili(三)wireshark分析

从上图我们可以得知 :

<state>PREPARING</state>中的PREPARING是直播状态,翻译过来就是准备中,通俗来讲就是没有直播。

<chatid>98284</chatid> 中的98284是房间的真实ID,房间180进入和98284进入的房间页面是一毛一样的。

<server>livecmt-2.bilibili.com</server>中的livecmt-2.bilibili.com就是服务器地址啦。

<dm_port>788</dm_port>中的788看名字就知道是弹幕端口,也就是服务器的端口是788。

<dm_server>broadcastlv.chat.bilibili.com</dm_server>看取名字是弹幕服务器,有兴趣的朋友可以试试链接这个域名是否可以得到弹幕。

<dm_ws_port>7170</dm_ws_port>

<dm_wss_port>7172</dm_wss_port>这两个端口不明白ws和wss意思,也就没有使用这两个端口。

既然我们知道了服务器的端口那我们可以设置wireshark的过滤规则了。

python - bilibili(三)wireshark分析

info里面的内容你可以理解为[SYN]为拜拜,[ACK]为应答,[PSH] 为传输数据。其中涉及到三次握手和四次挥手的知识,请自行百度了解。

python - bilibili(三)wireshark分析

同样是追踪流,红色底纹代表我们发送的,蓝色底纹代表我们接受到的。换句话说,客户端给服务端一个请求,服务端给客户端一个或者多个回应。

上图可以看出,客户端发送了一段数据,服务端也回了一段数据,后面还有一段开头cmd的数据,这段数据正好就是我们所需要的弹幕数据。由此可见,只要我们向服务端发送一段正确的指令就可以得到弹幕了,是不是很简单?

其实,并不是,我所上的图都是我自己编译的客户端所传输的数据,而浏览器中的数据更加复杂,你要分析的更多,最关键的一点是你根本就不知道那段数据是弹幕,因为你所截取的数据全部是乱码。何为乱码,如下图:

python - bilibili(三)wireshark分析

这些乱码是弹幕无疑,然而你怎么去破解呢?如何让收到的弹幕是正常你能解析的呢?

下一篇来解决这个问题。