硬刚 IPTV(1) - ROS 实现 IPoE 认证
主要就是解决如何在任意地方优雅看电视的问题。
内容比较多,计划分几个部分来搞,一实现 IPoE 认证,二实现 ACS 认证,三阶段能自动拿节目单,四阶段能看直播和回看。
案例:河北电信 IPTV(非 OTT 业务)
IPoE
河北电信的 IPTV 采用的是 IPoE 方式进行设备认证的。IPoE 与 PPPoE 一样,都是接入认证技术,与 PPPoE 不同的是,IPoE 可以将用户的 IP 报文封装在以太网上,组织成 IPoE 报文,在该报文中携带用于认证的信息,配合其他认证协议,就可以实现高效的接入认证。因为 IPoE 无需像 PPPoE 一样建立 PPP 会话和封装 PPP 报文,减小了一定的网络开销,传输效率要更高,特别适合承载一对多的视频业务,所以越来越多的 IPTV 业务改造成了 IPoE 认证。
IPoE 认证过程
需要先对 IPoE 认证的过程有一些初步了解,方便我们进一步分析数据包。[图片: 20230207233528]
https://static.txisfine.cn/upload/20230207233528.png/pkwatermark
这个图涉及到了很多设备,用户终端就是我们的盒子,和盒子有直接交互的就是 BRAS 设备,盒子和 BRAS 通过 DHCP 协议进行交互。那我们就要额外关注一下数据包中的 DHCP 报文。
抓包
无论如何想个法子把盒子认证的报文抓出来,你可以用 Hub,端口镜像,甚至用 ROS 的 Packet Sniffer,我比较喜欢 Packet Sniffer,关于它的用法,可以参考 MikroTik 设备如何做抓包和流量记录。
准备好抓包环境,然后对盒子进行上电,等待他一个完整的认证过程,进入到“桌面”,停止抓包。
IPTV DHCP 认证阶段分析
本质这个过程就是一个拿地址的过程,我们直接看 DHCP 吧。
[图片: 20230207234832]
https://static.txisfine.cn/upload/20230207234832.png/pkwatermark
从 pcap 包中我们看到了 DHCP 的过程,如果翻了一遍没有找到,可能是您的 IPTV 没有使用 IPoE 方式进行认证,或者是没抓到,一个技巧是最好先开始抓包,再给盒子上电。
关于设备入网的认证方式,可以看一下盒子的网络设置,一般写 IPoE 或者 DHCP 的就是了。
非常标准的一个 DHCP 过程,经过 Discover,DHCP 服务器就给了 Offer,盒子 Request,DHCP 服务器回复 ACK。
[图片: 20230207235314]
https://static.txisfine.cn/upload/20230207235314.png/pkwatermark
我们发现盒子在 Discover 时候携带了其它的 Option,这些参数我们要记录一下,一会我们拿 ROS 捏 DHCPClient 的时候用得到。
其它几个过程,没有什么奇怪的特征,我们直接忽略掉。
这里说明一下,我实测重要的 Option 是 60、12,同时会校验 Client MAC。
[图片: 20230207235753]
https://static.txisfine.cn/upload/20230207235753.png/pkwatermark
对于河北电信 IPTV 而言,Option 60 是固定值:HEITV,Option 12 是盒子背面最长的那个条码,也叫 STBID。
捏 ROS DHCPClient
我这边的网络环境说明如下,比较杂,仅供参考。
我是把光猫做了单线复用,把 Internet 业务和 IPTV 业务的 VLAN 通过一个接口甩给 ROS,然后把这个 IPTV 的 VLAN 接到一个 Bridge 里。
[图片: 20230208000233]
https://static.txisfine.cn/upload/20230208000233.png/pkwatermark
因为 DHCPClient 不能起在 Slave 接口上,所以我就把它起在了 brchinanetiptvvlan99 这个桥上。
选择菜单 IP -> DHCP Client,DHCP Client Option 添加 Option。
[图片: 20230208000715]
https://static.txisfine.cn/upload/20230208000715.png/pkwatermark
Option 名字随意,Code 就是刚才抓的那俩,60 和 12。值是 Hex 的,所以用 0x 打头,然后去刚才抓的数据包里找,如下图,填进去就 OK 了。。
[图片: 20230208000847]
https://static.txisfine.cn/upload/20230208000847.png/pkwatermark
然后就是伪造一个 ClientMAC。
Winbox 不能直接改,先打开 ROS 的 Terminal interface bridge print 查看一下 brchinanetiptvvlan99 这个桥的 ID,我这 ID 是 0。
[图片: 20230208001204]
https://static.txisfine.cn/upload/20230208001204.png/pkwatermark
然后配个假的 MAC。
interface bridge set 桥ID admin-mac=盒子的MAC冒号分隔 auto-mac=no
重新 print 一下 bridge,发现 MAC 已经被修改,OK,准备工作就绪了。
选择菜单 IP -> DHCP Client,选择 DHCP Client,添加一个。选择接口,不使用 DNS 和 NTP。
[图片: 20230208001449]
https://static.txisfine.cn/upload/20230208001449.png/pkwatermark
在 Advanced 中选择 Option,就是刚才加的那几个。
[图片: 20230208001627]
https://static.txisfine.cn/upload/20230208001627.png/pkwatermark
保存,看状态从 Search 变成了 Bond,我们就拿到了 IPTV 的业务 IP。
[图片: 20230208001726]
https://static.txisfine.cn/upload/20230208001726.png/pkwatermark
文章封面 BY Possessed Photography on Unsplash