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(四)抓包数据乱码

  • 相关阅读:
    如何获取汉字对应的拼音
    php each()函数和list()函数
    php list()函数
    addslashes给预定义字符前面加上反斜杠
    array_filter() 过滤数组中的空白元素
    用.htaccess文件实现URL重写
    xml中实体引用
    onsubmit阻止表单提交
    php获取当前文件绝对路径
    array_merge() 函数的用法
  • 原文地址:https://www.cnblogs.com/keinlee/p/6411453.html
Copyright © 2011-2022 走看看