zoukankan      html  css  js  c++  java
  • python bilibili(三)wireshark分析

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

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

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

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

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

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

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

    从上图我们可以得知 :

    <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。(2017-07-07更新:现在这个弹幕端口可以访问,但是更新弹幕服务器端口为2243)

    <dm_server>broadcastlv.chat.bilibili.com</dm_server>看名字是弹幕服务器。

    <dm_ws_port>7170</dm_ws_port>这个端口是弹幕Websocket中的ws协议,是普通请求。(2017-07-07更新:弹幕ws协议端口已变)

    <dm_wss_port>7172</dm_wss_port>这个端口是弹幕Websocket中的wss协议,是基于SSL的安全传输。两者之间的区别就是安全问题。(2017-07-07更新:弹幕wss协议端口已变)

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

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

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

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

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

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

    下一篇来解决这个问题。

    系列上一章:python - bilibili(二)房间号格式出错

    系列下一章:python - bilibili(四)抓包数据乱码

  • 相关阅读:
    字符串替换
    字符串查找
    字符串比较
    字节与字符串相互转换
    1365. How Many Numbers Are Smaller Than the Current Number
    1486. XOR Operation in an Array
    1431. Kids With the Greatest Number of Candies
    1470. Shuffle the Array
    1480. Running Sum of 1d Array
    【STM32H7教程】第56章 STM32H7的DMA2D应用之刷色块,位图和Alpha混合
  • 原文地址:https://www.cnblogs.com/keinlee/p/6411453.html
Copyright © 2011-2022 走看看