主要就是解决如何在任意地方优雅看电视的问题。

内容比较多,计划分几个部分来搞,一实现 IPoE 认证,二实现 ACS 认证,三阶段能自动拿节目单,四阶段能看直播和回看。

案例:河北电信 IPTV(非 OTT 业务)

IPoE

河北电信的 IPTV 采用的是 IPoE 方式进行设备认证的。IPoE 与 PPPoE 一样,都是接入认证技术,与 PPPoE 不同的是,IPoE 可以将用户的 IP 报文封装在以太网上,组织成 IPoE 报文,在该报文中携带用于认证的信息,配合其他认证协议,就可以实现高效的接入认证。

因为 IPoE 无需像 PPPoE 一样建立 PPP 会话和封装 PPP 报文,减小了一定的网络开销,传输效率要更高,特别适合承载一对多的视频业务,所以越来越多的 IPTV 业务改造成了 IPoE 认证。

IPoE 认证过程

需要先对 IPoE 认证的过程有一些初步了解,方便我们进一步分析数据包。

20230207233528

这个图涉及到了很多设备,用户终端就是我们的盒子,和盒子有直接交互的就是 BRAS 设备,盒子和 BRAS 通过 DHCP 协议进行交互。那我们就要额外关注一下数据包中的 DHCP 报文。

抓包

无论如何想个法子把盒子认证的报文抓出来,你可以用 Hub,端口镜像,甚至用 ROS 的 Packet Sniffer,我比较喜欢 Packet Sniffer,关于它的用法,可以参考 MikroTik 设备如何做抓包和流量记录

准备好抓包环境,然后对盒子进行上电,等待他一个完整的认证过程,进入到“桌面”,停止抓包。

IPTV DHCP 认证阶段分析

本质这个过程就是一个拿地址的过程,我们直接看 DHCP 吧。

20230207234832

从 pcap 包中我们看到了 DHCP 的过程,如果翻了一遍没有找到,可能是您的 IPTV 没有使用 IPoE 方式进行认证,或者是没抓到,一个技巧是最好先开始抓包,再给盒子上电。

关于设备入网的认证方式,可以看一下盒子的网络设置,一般写 IPoE 或者 DHCP 的就是了。

非常标准的一个 DHCP 过程,经过 Discover,DHCP 服务器就给了 Offer,盒子 Request,DHCP 服务器回复 ACK。

20230207235314

我们发现盒子在 Discover 时候携带了其它的 Option,这些参数我们要记录一下,一会我们拿 ROS 捏 DHCPClient 的时候用得到。

其它几个过程,没有什么奇怪的特征,我们直接忽略掉。

这里说明一下,我实测重要的 Option 是 60、12,同时会校验 Client MAC。

20230207235753

对于河北电信 IPTV 而言,Option 60 是固定值:HEITV,Option 12 是盒子背面最长的那个条码,也叫 STBID。

捏 ROS DHCPClient

我这边的网络环境说明如下,比较杂,仅供参考。

我是把光猫做了单线复用,把 Internet 业务和 IPTV 业务的 VLAN 通过一个接口甩给 ROS,然后把这个 IPTV 的 VLAN 接到一个 Bridge 里。

20230208000233

因为 DHCPClient 不能起在 Slave 接口上,所以我就把它起在了 br_chinanet_iptv_vlan99 这个桥上。

选择菜单 IP -> DHCP Client,DHCP Client Option 添加 Option。

20230208000715

Option 名字随意,Code 就是刚才抓的那俩,60 和 12。值是 Hex 的,所以用 0x 打头,然后去刚才抓的数据包里找,如下图,填进去就 OK 了。。

20230208000847

然后就是伪造一个 ClientMAC。

Winbox 不能直接改,先打开 ROS 的 Terminal interface bridge print 查看一下 br_chinanet_iptv_vlan99 这个桥的 ID,我这 ID 是 0。

20230208001204

然后配个假的 MAC。

interface bridge set 桥ID admin-mac=盒子的MAC冒号分隔 auto-mac=no

重新 print 一下 bridge,发现 MAC 已经被修改,OK,准备工作就绪了。

选择菜单 IP -> DHCP Client,选择 DHCP Client,添加一个。选择接口,不使用 DNS 和 NTP。

20230208001449

在 Advanced 中选择 Option,就是刚才加的那几个。

20230208001627

保存,看状态从 Search 变成了 Bond,我们就拿到了 IPTV 的业务 IP。

20230208001726


文章封面 BY Possessed Photography on Unsplash