simon300000 / bilibili-live-ws

Bilibili live WebSocket/tcp API
MIT License
316 stars 31 forks source link

弹幕用户名打码功能跟进 #397

Open sparanoid opened 1 year ago

sparanoid commented 1 year ago

最近b站开始对弹幕用户名进行随机打码,打码后 UID 返回为 0:

preview

目前观察下来这个功能是灰度的,不是每次都会出现这个情况,有时候主播的弹幕机刷新一下就正常了,但过一会所有 DANMU_MSG 事件又会被打码。~具体触发条件未知~

simon300000 commented 1 year ago

似乎是因为portover=3?

sparanoid commented 1 year ago

观察了一段时间,WS 连接超过一段时间后(大概 5 分钟,但这个似乎是灰度,有时候未登录状态下很长时间也还是正常的)会出现如下事件,之后的用户名开始打码:

{
  "cmd": "LOG_IN_NOTICE",
  "data": {
    "notice_msg": "为保护用户隐私,未注册登陆用户将无法查看他人昵称",
    "image_web": "http://i0.hdslb.com/bfs/dm/75e7c16b99208df259fe0a93354fd3440cbab412.png",
    "image_app": ""
  }
}
simon300000 commented 1 year ago

相关问题 https://github.com/xfgryujk/blivedm/issues/28

sparanoid commented 1 year ago

目前观测下来,完整的构建建立连接的请求可以进行规避,即:额外传入 uidbuvidkey 即可绕过限制。另外现在官方已经不传 clientver 字段了

但是由于以上两个请求都有 CORS,因此不适用于 client-side 应用,加上最近哔哩哔哩频繁对验证进行改动,可以考虑支持传入任意对象(或者直接用 authBody?),这样可以通过第三方渠道来获取这些字段,也更方便日后扩展

eppzrypt commented 1 year ago

额外传入 uidbuvidkey

这个后续会跟进嘛

simon300000 commented 1 year ago

似乎有效的办法 https://github.com/xfgryujk/blivedm/pull/29

simon300000 commented 1 year ago

目前来说就直接传入一个authBody罢(还好之前留了这个参数

sparanoid commented 1 year ago

@simon300000 authBody 理论上也需要用 encoder 做一次编码才可以?目前是没有这么做的:

https://github.com/simon300000/bilibili-live-ws/blob/1c70a53e42facf63facafff7f887b94137bdc7e7/src/common.ts#L77-L86

simon300000 commented 1 year ago

哦确实,这样不太好用

sparanoid commented 1 year ago

@CottnCor 从代码逻辑来看是需要的,另外根据 https://github.com/xfgryujk/blivedm/pull/29 的描述,目前似乎只额外传入 uid 就可以了

simon300000 commented 1 year ago

刚刚移除了 clientver,加入了 uid 和 buvid 的选项,typeof autoBody === object 的 autoBody 会被 encode 再发出去,应该不会影响开放平台🤔

bilibili-live-ws@6.3.0

simon300000 commented 1 year ago

https://github.com/xfgryujk/blivechat/pull/114

似乎可用的方法又增加了

LuiScreaMed commented 1 year ago

xfgryujk/blivechat#114

似乎可用的方法又增加了

这个 blivechat 作者试过,给我回复了似乎 key 和 ip 绑定,只能本地用,目前直接在 Auth 时填 uid 就有效

eric2788 commented 1 year ago

问个问题,https://github.com/simon300000/bilibili-live-ws#class-livews--livetcp--keeplivews--keeplivetcp 创建实例的时候有没有可以pass cookie的地方(具体我不清楚需要哪个cookie)?我觉得有一个方式直接pass cookie会比较方便点?

simon300000 commented 1 year ago

问个问题,https://github.com/simon300000/bilibili-live-ws#class-livews--livetcp--keeplivews--keeplivetcp 创建实例的时候有没有可以pass cookie的地方(具体我不清楚需要哪个cookie)?我觉得有一个方式直接pass cookie会比较方便点?

目前可以自己用api通过http拿token/key然后填key,uid,buvid

simon300000 commented 1 year ago

我记得只需要这三个

kongmingLatern commented 11 months ago

有个uid的问题想问一下:

  1. 当我传入9位uid的时候,用户名和弹幕都可以正常获取显示
  2. 但是当我传入16位uid的时候,弹幕和用户名一个都获取不到了 是不是uid(int类型,2^32 = 4294967296 )范围有限制?