使用 Wireshark 分析斗鱼弹幕的请求规则

By | 2017年7月6日 | 阅读:723 次

前言
公司有一个项目核心需求是弹幕兑换积分,积分兑换主播准备好的礼物,实现弹幕数量和实物的兑换;从而榜主播涨人气,也增加主播和粉丝的互动;
其中最核心的技术就是弹幕的抓取和识别,参考 doseeing.com 的做法:让用户去指定直播间发指定的弹幕,通过抓取弹幕拿到该用户的斗鱼数据,绑定小程序的微信用户的斗鱼身份,才能用斗鱼账号发弹幕,用微信账号兑换礼物;


  1. 获取斗鱼弹幕服务器信息
  2. Wireshark 抓包分析请求规则
  3. 请求格式分析

1. 确定斗鱼弹幕服务器的 IP 和端口

  • 从直播页面获取:在 Chrome 开发者工具中过滤 Server 可看到被编码的 IP 和端口(看到%22对应分号 )

  • 复制 value 到 UrlDecode 解码,得到 JSON 格式的 ip:port


2. Wireshark 抓包请求规则

为了抓取弹幕,需要模拟客户端向弹幕服务器发送请求,请求的构造需要参考包内容的字段,同时参考:《斗鱼弹幕服务器第三方接入协议》

  • 根据找到的端口号,将 tcp.port==8083||tcp.port==8008||... 端口号作为过滤条件,可以看到下边的包

  • 包列表的第 4 个:客户端的 ACK 包内容如下:

    • ① : f4 00 00 00 协议的消息长度,表示此条消息长为十六进制的 f4 = 244 Bytes
    • ② : f4 00 00 00 头部的消息长度,与 ① 相同;
    • ③ : b1 02 00 00 表示客户端发送到弹幕服务器的请求;
      • 689 = 02 b1
      • 690 = 02 b2,所以服务器返回的包应该有 b2 02 00 00

  • 加密和保密字段均为 00,文档如下:


3. 请求格式分析

  • 根据上边查看到的请求包的内容,格式概括如下:

  • 构造请求后抓取到弹幕效果,代码在我的代码仓库 wuYin/spider;接下来会写两篇文章分析具体怎么构造请求,发送请求,解析数据。

参考


后记
我们使用 swoole 来代替 CURL、PHP Socket 这样的手动构造请求的工具,在主播弹幕量高峰时段抓取更有保障 233;

发表评论

电子邮件地址不会被公开。