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 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...
随机推荐
- uoj#38. 【清华集训2014】奇数国【欧拉函数】
number⋅x+product⋅y=1 有整数x,y解的条件是gcd(number, product) == 1. product用线段树维护一下,然后现学了个欧拉函数. 可以这样假如x = p ...
- LPC2478的外部中断使用
LPC2478外部中断 2478的外部中断模型如下 也就是说,port0和2支持外部中断,EINT0-2是三个独立管脚的中断,而EINT3则是port0和2的所有中断共同拥有的向量 对于port0和2 ...
- 关于iOS开发中info.plist文件的解读
我们建立一个工程后,会在Supporting files下面看到一个"工程名-Info.plist"的文件,这个是对工程做一些运行期配置的文件,很重要,不能删除. 下面就对其ke ...
- angular中ui calendar的一些使用心得
ui calendar是封装fullcalendar的一款angular指令插件 官方地址:http://angular-ui.github.io/ui-calendar/ fullcalendar ...
- leetcode day8
[83] Remove Duplicates from Sorted List Given a sorted linked list, delete all duplicates such that ...
- EF 实体字段设置主键和自增
[Key] //主键 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] //设置自增 public int id { get; set; } ...
- p1349星屑幻想
这道题的原题目我也不知道是什么. 大致题意是有一个图,有些点的权值已确定,要求你确定其他点的权值使所有边两个点的权值的xor和最小,输出所有点的最终权值,输出有spj: 解法是最小割,由于题目要求的使 ...
- ImageView的展示方式
[转]http://www.cnblogs.com/yejiurui/archive/2013/02/25/2931767.html 在网上查了好多资料,大致都雷同,大家都是互相抄袭的,看着很费劲 ...
- highcharts设置Y轴范围及根据Y轴范围设置不同颜色
yAxis : { title : { text : '数据' }, plotLines : [ { value : 0, width : 1, color : '#808080' } ], min: ...
- NodeMCU之旅(一):构建、刷入固件,上传代码
扬帆起航 本系列文章将试图实现,使用Web页面远程点亮led.具体包括: 在NodeMCU上搭建HTTP服务器,使其可以通过Web页面配置要接入的网络. 在配置页面可以显示附近中英网络名与信号强度. ...