protocbuf 直播数据分析

免责任声明:
任何可操作性的内容与本文无关,文章内容仅供参考学习,如有侵权, 损害贵公司利益,
请联系作者,会立刻马上进行删除

"先上车先吃肉,卡好后带货,卖号,引私域,接星途广告,接小程序广告,带小游戏赚收益均可"是不是听到这样的话热血沸腾?直接开个直播礼物直接变成钞票是不是很心动,但这生金蛋的鹅别人不会给你的,要不就是有偿买程序但是发现都是打包好的无法改,要不就是被平台发现雷同直接被封,所以还是要靠自己自力更生。

这种无人直播其实可以分为两个关键点。

1.如何把某直播间的数据拉取下来(目前是最难的)

2.找个朋友或者外包开发个简单小游戏就可以

废话不多说,我们这里直接获取直播用户数据,先看看效果图

这里实现了进入用户进入直播间,刷礼物,发言等基本操作。

接下来是分享原理的时刻

直播web端的协议从https变成wss,导致抓不到数据包了所以以前常规是抓包无法抓到了,但是发现返回的数据是protobuf这种新型通信协议, 在某平台里的私信也是走的pro协议实现的。具体想了解protobuf的资料同学可以自行百度一下。现在拿网上下载的源码进行改造。ps:原来网上的源码也是有问题,没办法爬取最新的直播数据。

把部分代码贴上来。

先把 https://live.XXXX/webcast/im/fetch/ 里面的用户数据,打赏数据下载下来,存放到文件中

def filterResponse(response):
    if 'https://live.xxxx.com/webcast/im/fetch/' in response.url:
        # print("<<", response.url)
        with open('./LiveFile/' + uuid.uuid4().hex, 'wb') as file:
            file.write(response.body())
    else:
        # print("--", response.url)
        pass
    return response

将下载下来的数据进行解密,解密成功后可以拿到用户基础数据

def startWatcher(self):
        while True:
            files = os.listdir(self.monitoringFile)
            if files:
                for _ in files:
                    filepath = self.monitoringFile + '\\' + _

                    with open(filepath, 'rb') as f:
                        # print(f.read())
                        response = message_pb2.Response()
                        response.ParseFromString(f.read())

                    for message in response.messages:
                        if message.method == 'WebcastChatMessage':
                            chat_message = ChatMessage()
                            chat_message.set_payload(message.payload)

                            # userID
                            userID = chat_message.user().id
                            # 发言
                            content = chat_message.instance.content
                            # 头像
                            userHeaderImg = chat_message.user().avatarThumb.urlList[0]
                            print(userID, content, userHeaderImg)
                            filePath = downloadImg(userHeaderImg,f"{getScriptDir()}\\userImages\\{userID}.jpg")
                            Socket.sendMsg(f"{userID}\0{content}\0{filePath}")
                            # 用户uid\0用户发送的消息\0用户头像路径
                            # print(chat_message)
                    try:
                        os.remove(filepath)
                    except PermissionError as e:
                        time.sleep(1)
                        os.remove(filepath)

            time.sleep(2)

接下来最关键的是用户实体

 这个实体正确后就可以直接解密出来

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chunaiji008

奔跑吧铁子们

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值