前言

本文记录的是我尝试抓包苏州移动IPTV的过程,苏州移动的IPTV使用的是“魔百盒”,通过打开里面自带的APP来看电视。

然而我怎么可能满足于用移动送的盒子来看电视呢,遂萌生抓取IPTV信号源,实现任意设备看电脑的想法。功夫不负有心人,简单操作就抓到了直播源,可以愉快看电视啦~

移动IPTV的特点

严格来说因为移动没有拿到IPTV,移动是没有IPTV的;但用移动的盒子又能看电视直播,这是怎么做到的呢?移动实际用到的是OTT的技术,简单来说相对电信的IPTV来说,移动的IPTV有两三分钟的延迟,这个先不说。

移动IPTV的另一大特点是,相对电信IPTV来说与光猫的联系不紧密。移动的安装人员直接把光猫的网线安装插在盒子上,然后盒子设置拨号连接,就能看直播了。这不禁让我怀疑移动IPTV是不是没有用到IP组播技术,也没有IPTV的专用带宽。抱着试一试的态度,我在盒子里设置无线连接到我的路由器(用的移动宽带),然后进入直播页面,也能正常观看直播,这充分验证了我的猜想,可能移动的IPTV就是打开一个链接开始获取视频流,事实上也是这样子。

抓包IPTV

抓包设置

所谓抓包,就是截取到所有进出盒子的网络信息,并进行分析。想要截取所有进出盒子的信息,那么只需要控制住盒子的网络连接就好了,我这里使用的方法是用电脑发射WiFi热点,让盒子连接,而电脑连接的是移动宽带,这样盒子就“透明地”连着移动宽带,而所有进出盒子的信息都由电脑监控着。

这里使用Wireshark来抓包,打开Wireshark选择监听无线网卡,然后就能看到Wireshark开始记录所有经过这个无线网卡的包了。

抓取CCTV-1

接下来操作盒子,进入盒子的直播页面,播放CCTV-1,等待播放一段时间后停止,退出直播。

接下来在Wireshark界面点击“停止捕获分组”即停止抓包,这样就形成了一段抓包记录,如下图所示。

Wireshark

下面来分析这些包,首先假设一点,APP从服务器获取节目信息应该是走的HTTP协议,并且服务器返回的内容应该是如text/htmltext/plainapplication/jsonapplication/xml等格式的,而对于直播的url,应该有明显的如CCTV-1这样的关键字。所以我们过滤这些包,只看HTTP协议的,然后从下往上(从后往前)看找刚才说的那些内容。

一路找很快就找到了一个关键的包,如下图所示。

Wireshark CCTV-1

这个包的请求URL是http://183.207.248.71:80/cntv/live1/cctv-1/cctv-1?OTTUserToken=18888888888-54:c5:7a:ff:ff:bd&UserName=18888888888&MAC=54:c5:7a:12:ff:ff&accountinfo=OQCfiws8s4rpK7p%2FpMYP7u3NcGkZ%2BPvcu0HL1FYZ2CMkD5P1V1CLuL3rJBGte5HT4tqh%2FKCzyh9D34F2p7CKG%2BDzScjwfag6dmWbgyaPG6zOUhiYz7Ph%FVNlh5c0pAoQfNLvTXl3D%3A20180422215140%2C18888888888%2C183.208.37.166%2C20180422215140%2Ccctv-1%2CCE5E68A939177D834D31D83150D%2C%2C0%2C1%2C-1%2C%2C2%2C2413000012%C-3%2C2%2CEND&GuardEncType=2,直接复制粘贴到浏览器中发现直接就是下载了一个文件index.m3u.m3u文件是常用的直播文件了,把这个URL用播放器打开看看,果然开始直播CCTV-1了,如下图所示。

CCTV-1

然后来分析刚才这个URL,我们直接把URL中附带的参数全删掉,就留http://183.207.248.71:80/cntv/live1/cctv-1/cctv-1,用播放器打开试试,竟然还是能开始看CCTV-1直播~看来移动并没有对这个URL的访问鉴权,应该至少是所有开通了IPTV的苏州移动用户都能打开这个URL看CCTV-1直播。

这样就抓出了CCTV-1的直播源,并且成功在电脑上看IPTV直播了,是不是很简单?

抓取所有频道

接下来想想如何抓取其他频道,首先试试直接把上面的URL改成CCTV-2,就是http://183.207.248.71:80/cntv/live1/cctv-2/cctv-2,播放器打开,能看CCTV-2直播了!如下图所示。

CCTV-2

但这样一个一个试显然不是办法,我们得把频道列表找出来。继续到Wireshark里面找,很快就找到了,如下图所示。

Wireshark Channel List

直接在浏览器中访问这个URL,发现返回的是JSON格式的内容,一共包含102个频道信息,每个频道信息包括其图标(channelIcon)、名字(channelName)和ID(uuid),如下图所示。

Preview Channel List

对比这里的信息,猜测之前那个CCTV-1的直播URL是http://183.207.248.71:80/cntv/live1/channelName/uuid,为了验证这一猜测,我们拿CCTV-5+作为例子,构造URLhttp://183.207.248.71:80/cntv/live1/CCTV5+/hdcctv05plus,在播放器中打开,开始直播CCTV-5+了!如下图所示。

CCTV-5+

那么这所有的102个频道都可以用http://183.207.248.71:80/cntv/live1/channelName/uuid这样的URL结构得到直播地址了。

设置在其他设备上播放IPTV

待续