斗鱼直播平台的弹幕抓取与发送

申明

本文的接收弹幕抓包教程来自知乎,对于发送弹幕的抓取,感谢douyu-danmaku_checkin-helper项目的作者MeanEvo,在这里感谢老虎会游泳告诉我TCP/IP的通信方式,感谢俊男、告知斗鱼弹幕的编码格式。本文仅用于学习研究,不允许用于商业用途,文章重点在于发送弹幕,如只需要接收弹幕的话请查看斗鱼开发者论坛提供的API

0.前言

在斗鱼的一些房间具有积分系统,积分来源在于在指定时间发送弹幕,例如:斗鱼影视直播间超级小桀直播间
到目前为止,我已经测试过,使用nodejs语言发送成功,在和安卓APP作者俊男、交流后,他使用JAVA也发送成功。
由于他是使用app来操作的,有许多系统资源可以使用,APP可以内嵌浏览器获取cookies,但是我的WIFI模块(基于Esp8266的NodeMcu)不行,我需要解决cookies的问题,还可能需要用到MQTT协议,而不是完整的TCP/IP,我可能还需要利用第三方MCU来辅助处理签到,为了方便管理可能还要出APP,工程量特别大,近期可能不会出这个项目,开学后可能会无限期拖后!

1.弹幕抓取

首先先进入超级小桀直播间,查看网页源码,搜索server_config,发现这样的东西:
server_ip.png

然后对第一个参数
%5B%7B%22ip%22%3A%22119.90.49.86%22%2C%22port%22%3A%228078%22%7D%2C%7B%22ip%22%3A%22119.90.49.90%22%2C%22port%22%3A%228098%22%7D%2C%7B%22ip%22%3A%22119.90.49.87%22%2C%22port%22%3A%228083%22%7D%2C%7B%22ip%22%3A%22119.90.49.107%22%2C%22port%22%3A%228032%22%7D%2C%7B%22ip%22%3A%22119.90.49.86%22%2C%22port%22%3A%228077%22%7D%2C%7B%22ip%22%3A%22119.90.49.88%22%2C%22port%22%3A%228088%22%7D%2C%7B%22ip%22%3A%22119.90.49.88%22%2C%22port%22%3A%228086%22%7D%2C%7B%22ip%22%3A%22119.90.49.86%22%2C%22port%22%3A%228076%22%7D%2C%7B%22ip%22%3A%22119.90.49.104%22%2C%22port%22%3A%228020%22%7D%2C%7B%22ip%22%3A%22119.90.49.86%22%2C%22port%22%3A%228080%22%7D%2C%7B%22ip%22%3A%22119.90.49.104%22%2C%22port%22%3A%228019%22%7D%2C%7B%22ip%22%3A%22119.90.49.106%22%2C%22port%22%3A%228027%22%7D%2C%7B%22ip%22%3A%22119.90.49.103%22%2C%22port%22%3A%228012%22%7D%2C%7B%22ip%22%3A%22119.90.49.92%22%2C%22port%22%3A%228059%22%7D%2C%7B%22ip%22%3A%22119.90.49.89%22%2C%22port%22%3A%228092%22%7D%2C%7B%22ip%22%3A%22119.90.49.102%22%2C%22port%22%3A%228007%22%7D%2C%7B%22ip%22%3A%22119.90.49.103%22%2C%22port%22%3A%228015%22%7D%2C%7B%22ip%22%3A%22119.90.49.106%22%2C%22port%22%3A%228028%22%7D%2C%7B%22ip%22%3A%22119.90.49.93%22%2C%22port%22%3A%228063%22%7D%2C%7B%22ip%22%3A%22119.90.49.90%22%2C%22port%22%3A%228096%22%7D%2C%7B%22ip%22%3A%22119.90.49.91%22%2C%22port%22%3A%228052%22%7D%2C%7B%22ip%22%3A%22119.90.49.90%22%2C%22port%22%3A%228099%22%7D%2C%7B%22ip%22%3A%22119.90.49.110%22%2C%22port%22%3A%228047%22%7D%2C%7B%22ip%22%3A%22119.90.49.93%22%2C%22port%22%3A%228065%22%7D%2C%7B%22ip%22%3A%22119.90.49.105%22%2C%22port%22%3A%228024%22%7D%2C%7B%22ip%22%3A%22119.90.49.93%22%2C%22port%22%3A%228061%22%7D%2C%7B%22ip%22%3A%22119.90.49.102%22%2C%22port%22%3A%228009%22%7D%2C%7B%22ip%22%3A%22119.90.49.87%22%2C%22port%22%3A%228081%22%7D%2C%7B%22ip%22%3A%22119.90.49.92%22%2C%22port%22%3A%228056%22%7D%2C%7B%22ip%22%3A%22119.90.49.108%22%2C%22port%22%3A%228037%22%7D%5D
进行URL解码,结果是:
[{"ip":"119.90.49.86","port":"8078"},{"ip":"119.90.49.90","port":"8098"},{"ip":"119.90.49.87","port":"8083"},{"ip":"119.90.49.107","port":"8032"},{"ip":"119.90.49.86","port":"8077"},{"ip":"119.90.49.88","port":"8088"},{"ip":"119.90.49.88","port":"8086"},{"ip":"119.90.49.86","port":"8076"},{"ip":"119.90.49.104","port":"8020"},{"ip":"119.90.49.86","port":"8080"},{"ip":"119.90.49.104","port":"8019"},{"ip":"119.90.49.106","port":"8027"},{"ip":"119.90.49.103","port":"8012"},{"ip":"119.90.49.92","port":"8059"},{"ip":"119.90.49.89","port":"8092"},{"ip":"119.90.49.102","port":"8007"},{"ip":"119.90.49.103","port":"8015"},{"ip":"119.90.49.106","port":"8028"},{"ip":"119.90.49.93","port":"8063"},{"ip":"119.90.49.90","port":"8096"},{"ip":"119.90.49.91","port":"8052"},{"ip":"119.90.49.90","port":"8099"},{"ip":"119.90.49.110","port":"8047"},{"ip":"119.90.49.93","port":"8065"},{"ip":"119.90.49.105","port":"8024"},{"ip":"119.90.49.93","port":"8061"},{"ip":"119.90.49.102","port":"8009"},{"ip":"119.90.49.87","port":"8081"},{"ip":"119.90.49.92","port":"8056"},{"ip":"119.90.49.108","port":"8037"}]
我们发现有很多ip,这些ip就是发送弹幕的服务器,我们在稍后的登录操作完成后就向这里面的一个随机ip发送数据即可发送弹幕。

1.1发送TCP数据包的要求

1.2授权登录

在上面的获取ip步骤后,现在要做的就是登录这些服务器,告诉服务器我是谁,这里不考虑匿名登录的问题,因为我们要发送弹幕
从上列ip列表中随机选择一个ip

0 评论