由于运营商提供的 IPTV 网络不能够访问外网,而连通外网后看 IPTV 则需要占用公网带宽,在此背景下。通过一晚上的努力下,实现了通过 OpenWRT 替代机顶盒,直接通过 IPoE 认证,从而直接获得机顶盒私有网络 IP ,能够在路由上进行分流。
方法包括但不限于带有端口镜像功能的交换机、tcpdump 等等,此处各显神通,不再赘述。
此处以 wireshark 举例
ssh 到 openwrt ,修改文件/etc/config/network
,找到上一步创建接口的相关配置项,内容如下
interface 'IPTV'
option proto 'dhcp'
option macaddr 'aa:bb:cc:dd:ee:ff'
option delegate '0'
option metric '20'
option hostname 'HOSTNAME'
option device 'lan1'
option sendopts '0x37:01792103060c0f1a1c2a33363a3b77'
option vendorid 'VENDORID'
如果 option 60 ,即 Vendor Class 填入的是 ASCII 字符,则不需要进行此部分操作。
/lib/netifd/proto/dhcp.sh
${vendorid:+-V "$vendorid"} \
${vendorid:+-V "" "-x 0x3c:$vendorid"}
保存文件,重启端口即可。
如果在操作过程中,使用无法正常获取到 IP ,可以在 openwrt 中执行tcpdump -i lan1 port 67 or port 68 -vvv
(其中 lan1 为实际网口名)用于辅助对比 wireshark 中的数据,查看是否缺少了某些 option
1
julyclyde 2022-11-21 08:56:44 +08:00
就是,也不研究这些 options 是怎么产生的,直接抄?
|
![]() |
2
gam2046 OP @julyclyde #1 作为研究,当然可以深入进去,了解其具体的算法。我只是作为使用目的,因此并未研究,并且实际抓包中发现,option 60 每次并不相同,可能与其采用的 DES 算法有关,也可能其中包含时间戳。实际测试中发现,重放并没有问题,所以就没有深入研究。IPoE 阶段并未实质验证用户账号,仅仅验证了接入设备是否可信,根据现有实验,这一步应该是纯算法认证,尝试过把 A 家里的机顶盒拿到 B 家庭中(同地区同运营商,不同区县),一样可以通过认证,即设备号与宽带账号并无绑定关系。IPTV 的业务层认证是通过 HTTP 协议承载的。
|
![]() |
4
gam2046 OP ![]() @julyclyde #3 一个是可能没法防止,另一个可能是没必要。因为 IPoE 阶段,设备并不能联网,进而无法授时,所以机顶盒是没有可靠时间戳的,如果需要防止重放,不依赖时间戳,那可能只能生成的随机值,但对端很难判断这个请求是否被重复使用,同时 DHCP Server 一般性能并不好。
另一方,通过了 IPoE ,也仅仅只是通过了设备认证,并不能访问任何资源。业务侧上还有二次认证,会再次检查设备与用户账号、宽带账号的绑定情况,如果验证不通过并不会下发视频信息。所以即使接入了网络层,影响也有限。 当然,原则上现在运营商大多采用组播下发视频(除部分由于资源限制的用户,多数为机顶盒公网用户,仍然采用点播),所以如果 A 用户成功通过授权拿到组播地址,B 用户可以在仅接入网络,但不通过业务层认证的情况下,访问组播资源。 |
8
jelly0925 300 天前
深圳电信 IPTV 抓包后设置到 OPENWRT 协议 DHCP 失败,有大佬试成功?分享一下谢谢
|
10
zvcs 184 天前
非常不错👍 可惜现在注销 iptv 了
|