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。
<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的过滤规则了。

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

同样是追踪流,红色底纹代表我们发送的,蓝色底纹代表我们接受到的。换句话说,客户端给服务端一个请求,服务端给客户端一个或者多个回应。
上图可以看出,客户端发送了一段数据,服务端也回了一段数据,后面还有一段开头cmd的数据,这段数据正好就是我们所需要的弹幕数据。由此可见,只要我们向服务端发送一段正确的指令就可以得到弹幕了,是不是很简单?
其实,并不是,我所上的图都是我自己编译的客户端所传输的数据,而浏览器中的数据更加复杂,你要分析的更多,最关键的一点是你根本就不知道那段数据是弹幕,因为你所截取的数据全部是乱码。何为乱码,如下图:

这些乱码是弹幕无疑,然而你怎么去破解呢?如何让收到的弹幕是正常你能解析的呢?
下一篇来解决这个问题。
python - bilibili(三)wireshark分析的更多相关文章
- python - bilibili(二)出错的解决办法
在获取房间号之前我们先解决上篇文章遗留的bug,即输入的房间号不是数字和对应的房间号不存在而产生的问题. 输入的房间号不是数字: 在python中,你所输入的必定是字符串,虽然你输入的是数字,但是类型 ...
- python - bilibili(四)抓包数据乱码
上一篇文章中不知道大家发现端倪木有,两张照片对比很明显发现第一张是信息很明显的,第二张是乱码的. 为什么会出现这种情况?细心的童鞋可能发现是我们发送给服务器的请求连接的数据不同: 第一张图的信息是{& ...
- Wireshark分析非标准端口号流量
Wireshark分析非标准端口号流量 2.2.2 分析非标准端口号流量Wireshark分析非标准端口号流量 应用程序运行使用非标准端口号总是网络分析专家最关注的.关注该应用程序是否有意涉及使用非 ...
- 常用排序算法的python实现和性能分析
常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...
- python的引用计数分析(二)
python所有对象引用计数被减少1的情况: 一.对象的别名被赋予新的对象; a = 23345455 # 增加了一个引用 b = a # 增加了一个引用 print(sys.getrefcount( ...
- python的计数引用分析(一)
python的垃圾回收采用的是引用计数机制为主和分代回收机制为辅的结合机制,当对象的引用计数变为0时,对象将被销毁,除了解释器默认创建的对象外.(默认对象的引用计数永远不会变成0) 所有的计数引用+1 ...
- 【转】python之random模块分析(一)
[转]python之random模块分析(一) random是python产生伪随机数的模块,随机种子默认为系统时钟.下面分析模块中的方法: 1.random.randint(start,stop): ...
- Python进阶(三十五)-Fiddler命令行和HTTP断点调试
Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令 上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的se ...
- python slots源码分析
上次总结Python3的字典实现后的某一天,突然开窍Python的__slots__的实现应该也是类似,于是翻了翻CPython的源码,果然如此! 关于在自定义类里面添加__slots__的效果,网上 ...
- 孤荷凌寒自学python第三十九天python 的线程锁Lock
孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...
随机推荐
- 解决tomcat运行报错java.lang.UnsatisfiedLinkError: apache-tomcat-7.0.37\bin\tcnative-1.dll:Can load AMD 64
http://www.apache.org/dist/tomcat/tomcat-connectors/native/ 到该地址下下载一个tomcat-native-1.2.2-win32-bin压缩 ...
- 横向滚动视图scroll-into-view不起作用
横向视图scroll-into-view指定的id为hpink,但是效果图中显示的还是第1个view(未达到效果); 纵向视图scroll-into-view指定的id为yellowgreen,效果图 ...
- IOS9中联系人对象的使用及增删改查操作的函数封装
之前克服重重困难把IOS9中新的类联系人搞明白了,现在把增删改查封装成了函数,如下: // // ViewController.m // IOS9中联系人CNContact的使用 // // Crea ...
- python流程控制:for循环
for循环: 先来看一个猜年龄的小程序: AGE = 23 count = 0 for i in range(10): if count == 3: u_count = input("y|n ...
- BZOJ 1455: 罗马游戏 [可并堆]
1455: 罗马游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1715 Solved: 718[Submit][Status][Discuss] ...
- 递归添加 另一个ds 里的DataRow 时 报错:该行已经属于另一个表。
public void create_tree(DataSet ds, int parentid) { DataSet newds = new DataSet(); ...
- 决策树ID3算法
决策树 (Decision Tree)是在已知各种情况发生概率的基础上,通过构成 决策树 来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法 ...
- 关于oracle导出时的query用法
QUERY参数后面跟的是where条件,值得注意的是,整个where子句需要使用""括起来,where子句的写法和SELECT中相同: 如果是UNIX平台所有"和'都需 ...
- C#综合揭秘——细说进程、应用程序域与上下文之间的关系
引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高 ...
- spring mvc 资源包的映射
在springmvc.xml中进行设置: <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...