视频嗅探就是通过对一个可播放的url进行分析,最终获取该url中的视频资源。
###视频嗅探的作用
骚年有木有在看视频的时候面对60秒的广告有摔电脑的冲动,有木有面对一堆广告位X疼X紧,想看高清资源特么还要加入会员有木有...没关系,通过视频嗅探,一切都会变得so easy,广告也没了,视频流畅了,一口气看完不是梦! ###视频嗅探原理 要想获取到一个播放页的视频资源,要经过以下三部曲:
- 分析播放页url规则
- 抓包
- 破解规则
在抓取一段视频资源前,需要对视频播放页的url进行分析,把具有相同规则的url归位一类,以便在抓取的时候根据不同的url对应不同的规则,在这里我们仅抓http请求,加密的https放弃。
###抓包
在破解规则之前,我们需要抓取所有的请求,一般需要改下ua模拟一下移动端设备,值得关注的有视频资源(mp4,flv,flash
等)、json请求、xml、网页源码等,还要注意其中的http states
是否有302、301
等。
###破解规则
#####在成功抓包后,需要对它们之间的关系进行猜解,一般步骤是这样的:
-
抓到视频资源,一般是mp4神马格式的,如果有302神马的还需要往上找,直到找到最初发出请求的那个地址。
-
找到最初地址后,看看该地址的格式,如果是一堆码神马的应该就是在js里面经过一些编码转码操作搞出来的,如果是一个规则的url,有两种可能,一种是直接打在源码里面的,这个时候直接抓源码即可,另外一般就是在json、xml接口里面的,这个时候需要我们再对抓到的json、xml进行分析。
-
一般第二步完成之后,如果能顺利在json接口里面找到真实的播放地址,那就进入第四步,否则,还需要再进行分析,可以把视频真实地址分割,然后再在json里面找,有很多视频地址是经过拼接完成的,一般来说,绝大数视频地址都是通过json接口或者xml取到的,无非是对json的一些字段进行一些混淆与包装最终拼接成真实的url。
-
找到json接口后,我们得分析该json接口的地址是怎么发出的。技术渣一点的网站一般是直接写死在js里面,通过调试瞬间可以抓到。牛逼一点的站点可能会定义一个时间种子跟服务器密钥,在获取每个视频资源的时候,该种子跟密钥唯一,但是再牛逼,js是开放的,密钥无非是跟服务器的另外一个通信接口而已,我们只需要伪造一个相同的请求就可以获取到密钥,然后种子也是,可能在本地对时间函数进行了一些加密包装,只要一步一步调试即可发现具体生成步骤。
-
通过以上4步基本可以搞定绝大多数站点。
###示例
对http://tv.sohu.com/20140518/n399706722.shtml
的视频资源进行抓取
-
配置ua,url跳转至
http://m.tv.sohu.com/xxxx
-
很容易抓取到初步的请求地址
http://data.vod.itc.cn/?new=/67/254/DtqGJ5QDo3yxdWQ4qCbC9.mp4&vid=1001434726&plat=17&mkey=DZo7YHoBK66QA2Hfrt6NiYlRU9d9p3XQ&ch=tv&vid=1775180&uid=1312061159241820&plat=17&pt=1&prod=h5&pg=1&eye=0&cateCode=122;122102
-
然后也很容易抓到是
http://api.tv.sohu.com/v4/video/info/1775180.json?site=1&callback=initLoadVideoCallback&api_key=695fe827ffeb7d74260a813025970bd5&plat=17&sver=1.0&partner=1
该json请求中的download_url
字段 -
通过对
min.tv.js
分析,可以发现该json请求中的唯一变量就是XXXX.json,而这个id正是写在网页源码中的vid -
最终可以通过先抓网页源码中的vid,再拼接成json请求,取到
download_url
字段的值便是真实的视频地址。
###demo http://liwei24.fe.baidu.com/VideoSpider/index.php
https://github.com/leaven/VideoSpider/
未完待续...