下载钉钉禁止下载的直播回放
钉钉有些群的直播回放会设置为不可下载,如果我们要下载的话,就需要使用秘密武器-抓包
(其实我本来是想要下载个直播回放的,可是一不小心整了个脚本出来…)
Github地址(开源)(Python):https://github.com/lilac-milena/Dingtalk-playback-download
0.更新日志
2023/7/20 版本更新
移除了对 wget 的依赖
增加了对手机客户端抓包的支持
2022/7/2 版本更新
适配linux系统
自动检测下载错误的ts片段并重新下载
优化错误日至的写出
优化逻辑
1.软件及依赖环境
1.1 抓包软件
这里我提供一个Fiddler的安装包,如果想要最新版可以自行去官网下载
安装包:https://raw.githubusercontent.com/lilac-milena/Dingtalk-playback-download/main/exes/FiddlerSetup.exe
安装完Fiddler之后可以在”开始”菜单中找到,我们需要打开Fiddler
点击Fiddler顶栏中的Tools,再点击Options
点击HTTPS,并将Decrypt HTTPS traffic打勾
之后会提示安装证书,点同意就好
1.2 配置ffmpeg
该脚本使用ffmpeg合并ts,所以需要安装这个玩意
这里就贴个教程,不浪费篇幅了
Windows10安装 ffmpeg 教程 https://zhuanlan.zhihu.com/p/118362010
Linux 安装 ffmpeg 教程 https://cloud.tencent.com/developer/article/1711770
2 抓取及准备
这一步分为两个分支,可以根据个人的要求选择使用什么平台的客户端进行抓包
手机客户端抓包不需要切换钉钉版本,可以直接抓取,比较方便;而 Windows 客户端抓取较稳定,受钉钉 API 改版的影响小。
2C.A 更换钉钉版本
最新版本的钉钉做了非常多的修改,导致无法获取完整的m3u8文件,也就造成了回放无法下载
2C.A.1 下载老版本
这个还是比较简单的,我使用的是 5.1.39.10 版本
官方下载链接:https://dtapp-pub.dingtalk.com/dingtalk-desktop/win_installer/Release/DingTalk_v5.1.39.10.exe
2C.A.2 使用老版本
钉钉对老版本的使用做出了限制,但是可以通过修改本地文件的方法跳过,具体教程见:
特别注意:安装老版本后第一时间不要启动钉钉,请打开老版本钉钉所在位置并删除安装目录的 update.exe 文件以防止自动更新
2C.B 设置代理
修改完成后登录的时候要注意一下设置代理连接,这一步是让钉钉与Fiddler建立连接
2C.B.1 点击右上角的小箭头
2C.B.2 照如下填写好后点击左下角的”测试”
如果成功,则点击保存,如果失败,请检查是否打开了Fiddler
如果操作后聊天乱码,请仔细看一下上面的教程,最后的步骤如果不做就会导致乱码
注意:本方法要求电脑和手机在同一网络环境下并且可以互相访问,如路由器开启了设备隔离(如校园网络,公司网络)则无法使用该方式抓包,请改用 Windows 客户端抓包
2M.A 获取本机 IP 地址
在打开 Fiddler 后,主页面的右上角会出现一个小地球标志,代表抓包服务可以供局域网的其他设备使用,将鼠标悬至此标志上方可以查看到本机可用于连接的 IP 地址
通常会显示很多条 IP,我们需要使用 IPv4 协议的内网地址(格式为 192.168.-.- 或 10.-.-.-)
所以我这里就记录下 192.168.31.218 这条 IP 以备后续使用
2M.B 在手机上安装 CA 证书以用于 HTTPS 抓包
同 Windows 端一样,任何抓取 HTTPS 数据包的行为都需要安装来自抓包工具的 CA 证书以获取 HTTPS 请求体
因为 Fiddler 默认是不支持其他设备抓包的,所以需要设置允许远程设备连接
打开设置菜单
勾选此选项后点击 OK
完成后需要 重启该软件,再次打开后 Windows 防火墙可能会弹出提示,如弹出,请选择 “公共网络”。
然后在手机浏览器中输入刚刚所记录的 “IP 地址 + :8888” (例:192.168.31.218:8888) (注意冒号是英文的) 打开证书安装页面
如果一切正常,会看到如下页面,然后点击下图所标注的链接下载 CA 证书文件
下载完成后单击 cer 文件可以直接使用安卓自带的证书安装程序打开
这一步有些手机可能要求输入锁屏密码,需要自己给证书起一个名字,验证手机密码后就可以成功安装证书了
2M.C 设置代理
钉钉手机版不同于 PC 版,并没有提供设置代理的选项,故我们需要借助手机自带的 WIFI 高级选项以进行配置。
因为手机系统差异较大,故这个步骤就不在本文中体现了,您可以前往以下链接了解详细的操作步骤:
对于 Android 设备:https://www.wikihow.com/Change-Proxy-Settings#Android
对于 IOS 设备:https://www.wikihow.com/Change-Proxy-Settings#iPhone
您可能需要以下信息:
Server(服务器地址):上文中所获得的IP地址
Port(端口号):8888示例: Server: 192.168.31.218 Port:8888
3.抓包
3.1 抓取
这么多记录,我们需要精确定位到我们需要的,其实很容易,首先,我们先要使用ctrl+a全选,再按delete删除全部记录,这样做是为了防止其他记录干扰我们,接下来,我们随意找一个直播回放,并打开,等待加载完毕后(不是等视频播放完,而是只要出现了视频画面并开始播放就可以关掉了)再关掉,这时看向Fiddler,就会发现Fiddler中出现了很多钉钉的记录
然后,我们使用ctrl+f进行搜索,搜索”m3u8”这个关键字
就会发现有很多记录被标黄了,我们现在需要从中找到钉钉的记录,大概长这样
这条记录前面是一个纸的图标,然后url里面会有”dingtalk.com”这个字串,一般同时符合这两点就是我们要找的数据
3.2 获取下载域名
然后右键这条数据,选择Copy→Just Url
现在,我们复制了一条URL,它的格式是这样的:
1 | 格式: |
请不要访问这个url,因为它的生命周期只有一次,已经被钉钉访问过了,所以我们再去访问会返回403错误
那为什么要复制这个url呢,因为我们需要下载域名,钉钉会每隔一段时间更换一次视频的下载域名(很奇怪,应该是为了防止视频下载),这可能导致你的直播回放的下载域名都是不一样的,所以我们需要这个域名才能下载
下载域名就是如下部分:
最后不要忘记加/
3.3 获取m3u8内容
前面说过,抓包获取的m3u8链接不能直接打开,所以我们需要从请求记录中找到m3u8文件的内容
还是找到m3u8的那条记录
按照下面这张图操作:
然后我们需要复制右下方那个文本框中的内容
这就是m3u8文件的内容,保存备用
4.下载
现在,就可以去Github下载我的Python脚本了~
脚本地址:https://github.com/lilac-milena/Dingtalk-playback-download/blob/main/ding.py
运行此脚本请自备Python环境
首先,把我们下载的ding.py文件放在一个文件夹中(最好是空文件夹)
然后在路径栏输入cmd,打开cmd
4.1 在cmd或终端中输入 python ding.py 运行脚本
如您使用linux运行脚本,请使用 python3 ding.py 运行
4.2.根据之前的下载域名选择下载通道
脚本内置了3个下载域名,请根据上面获取到的域名选择,如果都不是,请选择自定义
以下内容由2022/7/2更新
4.3.写入m3u8
打开脚本运行目录下的m3u8.txt文件
写入m3u8内容
写入完毕后,在脚本中输入y并按回车
4.4.选择m3u8来源
不同来源的m3u8文件需要使用不同的格式化方法,如m3u8通过windows端的钉钉抓包而来,就选择Windows端群直播
我的m3u8来源于ubuntu客户端,所以我就需要选择3(Linux端群直播)
4.5.下载&合并
下载:
下载ts分段
合并:
将ts分段合并为mp4
下载,合并完成后,python脚本运行目录会出现 output.mp4 这个文件,这就是下载完成的视频
文件/文件夹名 | 作用 |
---|---|
tss(文件夹) | 存放ts缓存文件(可在下载完成后删除) |
tss.txt | ts文件列表(可在下载完成后删除) |
m3u8.txt | m3u8文件,用户需将m3u8文件写入至此文件(可在下载完成后删除) |
output.mp4 | 最终下载的视频文件 |
err.log | 错误日至(如有错误则会生成) |