弹霄博科

小谈谈一亩三分地



硬刚 IPTV(1) - ROS 实现 IPoE 认证


发布日期: 2023/02/08
更新日期: 2023/02/08
作者: 小谈谈
分类: HomeLab
标签: iptv, ipoe, ros
阅读时间: 5 分钟
字数: 1139 字


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

内容比较多,计划分几个部分来搞,一实现 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/pk
watermark

然后配个假的 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/pk
watermark

在 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