V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OpenWrt 是一个专门面向嵌入式设备的 Linux 发行版。你可以将 OpenWrt 支持的型号的嵌入式设备,比如各种路由器上的系统,换成一个有更多可能性可以折腾的 Linux 系统。
OpenWrt 官方网站
gam2046
V2EX  ›  OpenWrt

国内使用 openwrt 通过 IPoE 获取运营商 IPTV 机顶盒 IP 指北

  •  4
     
  •   gam2046 · 2022-11-20 23:38:33 +08:00 · 6288 次点击
    这是一个创建于 673 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    由于运营商提供的 IPTV 网络不能够访问外网,而连通外网后看 IPTV 则需要占用公网带宽,在此背景下。通过一晚上的努力下,实现了通过 OpenWRT 替代机顶盒,直接通过 IPoE 认证,从而直接获得机顶盒私有网络 IP ,能够在路由上进行分流。

    本文不包含什么

    • 本文不包含手把手的教学,纯新手向读者可能无法通过本文获得足够的指引
    • 本文不包含机顶盒内容的破解
    • 本文不包含具体策略路由的指引
    • 本文不包含 openwrt 、Linux 的使用指引

    本文包含什么

    • 本文仅包含,如何让 OpenWRT 通过运营商的 IPoE 认证的关键步骤和注意事项

    建议了解的前置知识

    • 了解简单的 Linux 命令行,能够通过命令行编辑文件
    • 具有抓包的能力
    • 使用过 wireshark 或 tcpdump

    正文

    获取机顶盒正常登录的抓包信息

    方法包括但不限于带有端口镜像功能的交换机、tcpdump 等等,此处各显神通,不再赘述。

    获取 IPoE 的关键信息

    此处以 wireshark 举例

    • Wireshark 过滤条件可设置为 dhcp
    • 找到 DHCP Discovery 的请求
    • 打开抓包信息后,一般可获得下列信息
    • image.png
    • 主要需要设置划线的几项

    Openwrt 配置

    创建接口

    • 创建一个新的接口
    • 在接口使用的设备中选择你实际接入的网口
    • 输入一个接口标识,如 IPTV
    • 保存
      • 此处不设置过多参数
      • 所有参数均通过修改配置文件实现
      • 因部分参数无法通过 GUI 修改,故无论如何最终都要修改配置文件

    配置接口

    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'
    
    • aa:bb:cc:dd:ee:ff 修改为你机顶盒的 MAC 地址 也就是上图抓包中显示的 Client MAC address
    • HOSTNAME 修改为上图抓包中显示的 option 12 内容,形如这样 00123456789AABBCCDDEEFF
    • VENDORID 为上图中 option 60 的内容,如果此内容包含非 ASCII 字符,需要在 Wireshark 中以原始数据查看,并粘贴在此处。
      • image.png
      • 如果显示为这样,则需要将显示为设置成原始数据
      • image.png
      • 并将这个值填入配置文件中
      • 如果写入的是原始数据格式,则需要额外进行后面提到的额外操作
    • 0x37:01792103060c0f1a1c2a33363a3b77 这一行对应抓包图中 option 55 ,其中 0x37 即为 55 的 16 进制表述
      • 一般来说填入这几项数据就可以正常获取到 IP ,如果不能正常获取,请对比抓包数据中的 option 数据,在配置文件中参考这一行数据的格式,分别填入其他 option 数据
    • 上述所有配置项,如果不存在则手动直接输入,如果已存在则修改即可
    • 修改完毕后,保存文件,重启接口,即可获取到 IP

    关于 Option 60 填写原始数据( hex string )的额外操作

    如果 option 60 ,即 Vendor Class 填入的是 ASCII 字符,则不需要进行此部分操作。

    • 修改文件:
    • 找到此行:
      • ${vendorid:+-V "$vendorid"} \
    • 修改为:
      • ${vendorid:+-V "" "-x 0x3c:$vendorid"}

    保存文件,重启端口即可。


    其他一些建议

    如果在操作过程中,使用无法正常获取到 IP ,可以在 openwrt 中执行tcpdump -i lan1 port 67 or port 68 -vvv(其中 lan1 为实际网口名)用于辅助对比 wireshark 中的数据,查看是否缺少了某些 option

    18 条回复    2024-08-23 17:16:56 +08:00
    julyclyde
        1
    julyclyde  
       2022-11-21 08:56:44 +08:00
    就是,也不研究这些 options 是怎么产生的,直接抄?
    gam2046
        2
    gam2046  
    OP
       2022-11-21 09:15:49 +08:00
    @julyclyde #1 作为研究,当然可以深入进去,了解其具体的算法。我只是作为使用目的,因此并未研究,并且实际抓包中发现,option 60 每次并不相同,可能与其采用的 DES 算法有关,也可能其中包含时间戳。实际测试中发现,重放并没有问题,所以就没有深入研究。IPoE 阶段并未实质验证用户账号,仅仅验证了接入设备是否可信,根据现有实验,这一步应该是纯算法认证,尝试过把 A 家里的机顶盒拿到 B 家庭中(同地区同运营商,不同区县),一样可以通过认证,即设备号与宽带账号并无绑定关系。IPTV 的业务层认证是通过 HTTP 协议承载的。
    julyclyde
        3
    julyclyde  
       2022-11-21 10:38:33 +08:00
    @gam2046 他们居然不禁止你重放……
    gam2046
        4
    gam2046  
    OP
       2022-11-21 11:29:48 +08:00   ❤️ 1
    @julyclyde #3 一个是可能没法防止,另一个可能是没必要。因为 IPoE 阶段,设备并不能联网,进而无法授时,所以机顶盒是没有可靠时间戳的,如果需要防止重放,不依赖时间戳,那可能只能生成的随机值,但对端很难判断这个请求是否被重复使用,同时 DHCP Server 一般性能并不好。

    另一方,通过了 IPoE ,也仅仅只是通过了设备认证,并不能访问任何资源。业务侧上还有二次认证,会再次检查设备与用户账号、宽带账号的绑定情况,如果验证不通过并不会下发视频信息。所以即使接入了网络层,影响也有限。

    当然,原则上现在运营商大多采用组播下发视频(除部分由于资源限制的用户,多数为机顶盒公网用户,仍然采用点播),所以如果 A 用户成功通过授权拿到组播地址,B 用户可以在仅接入网络,但不通过业务层认证的情况下,访问组播资源。
    bigtan
        5
    bigtan  
       2022-11-28 18:51:26 +08:00
    深圳电信可以用 IPOE 也可以用 iptv.gd 的账号 PPPOE ,我就没抓包 ,直接 PPPOE 拨号就行了
    ios
        6
    ios  
       2022-12-24 15:23:20 +08:00
    @bigtan 如何整?我现在折腾出 软路由只有一个口 可以用机顶盒看,想在其他网线口用这个机顶盒,或者不用机顶盒,多设备看
    bigtan
        7
    bigtan  
       2023-01-07 18:52:13 +08:00 via iPhone
    @ios 周末抓了一下 ipoe 的认证信息,挺好折腾的,楼主的教程很准确
    jelly0925
        8
    jelly0925  
       2023-02-08 18:25:57 +08:00
    深圳电信 IPTV 抓包后设置到 OPENWRT 协议 DHCP 失败,有大佬试成功?分享一下谢谢
    bigtan
        9
    bigtan  
       2023-02-13 18:36:20 +08:00 via iPhone
    @jelly0925 我测试成功了 你可以加我微信好友 一起探讨一下
    zvcs
        10
    zvcs  
       2023-06-04 16:48:16 +08:00
    非常不错👍 可惜现在注销 iptv 了
    A1exL
        11
    A1exL  
       168 天前
    这样子能代替 IPTV 盒子伪装设备在线么🤔现在好多地方貌似都开始加盒子的在线认证了
    gam2046
        12
    gam2046  
    OP
       168 天前
    @A1exL #11 不知道你指的“盒子伪装设备在线”是什么。如果是指的业务层的认证。

    但是我猜想应该是否定答案,业务侧认证是另一套东西了,现在多数地区都采用的华为当年的标准,部分地区有自己魔改一些具体的加密细节。但大差不差。

    如果您自身有一些开发能力的话,希望实现在 PC 上播放电视,倒也不是很困难,网上对于这一套流程的资料还是有一些的,虽然不多,而且大多有些缺失,但是加上自己的分析,难度不大。

    很遗憾由于种种原因,我无法将具体业务认证的业务逻辑公开出来。

    仅通过网络层认证后,在部分地区/运营商,对于一些组播资源是可以不需要通过业务层认证,直接访问的。
    A1exL
        13
    A1exL  
       162 天前
    @gam2046 #12 我现在是这样,0755 地区,采用 PPPoE 拨到 IPTV 专网,然后使用公开的那份组播地址套一层 msd_lite 来实现在局域网内观看直播,这套方案大概稳定跑了一年,但是从上个月开始就间断性失效,在不知道做了什么谜之操作之后又能恢复(第一次是拔掉光棒直接换回光猫插机顶盒拨 IPoE ,然后换回来活了,这也是我上面问是不是跟机顶盒在线有关系;但是第二次我按照您的方式改了一下用 OpenWRT 拨 IPoE ,能拨入,也能获取到 IP ,但是访问专网段无法使用,切换回 PPPoE 自己又好了)。我研究了半天抓出来的包也没看明白在哪一部分出了差错,不知道您是否能提供一些排错的思路
    lingku
        14
    lingku  
       140 天前
    现在浙江电信不同城市的 IPTV 地址能互通吗?想通过 WG 组网,目前实测 TR069 已经无法互联了。
    gam2046
        15
    gam2046  
    OP
       139 天前
    @lingku #14 一般情况下,不互通,不同地市会有自己的部署。会有极个别的省份只有省一级的分发网络。

    同时现存的,仍然有一小部分的 IPTV 公网用户,这部分公网用户,一般情况下,省内是通用的。大体的路由出口都在省级部署。

    判断自己是否为 IPTV 公网用户,只需要将机顶盒接入家用宽带网络下(而非 IPTV 专用的口),如果依旧可以正常观看内容,大概率是公网用户。
    app13
        16
    app13  
       33 天前
    抓包看了下,我这边加了 sendopts 0x37 之后,openwrt 会在一个包里发送两个 option 55 出去,有一个是我自己加的,另外一个应该是 openwrt 自动生成的,不知道是不是还要改 dhcp.sh 文件的逻辑...

    gam2046
        17
    gam2046  
    OP
       31 天前
    @app13 #16 一般是不需要,因为正常情况下也不会发出去两段。不过我已经不用 openwrt 了,暂时帮不了你更多。
    app13
        18
    app13  
       31 天前
    @gam2046
    感谢回复,昨天试了下,我这边同时存在两个 option 55 似乎并不影响 DHCP 工作,配置完成之后能正常获取 IP
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1721 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:33 · PVG 00:33 · LAX 09:33 · JFK 12:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.