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

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

  •  1
     
  •   gam2046 · 70 天前 · 1194 次点击
    这是一个创建于 70 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    由于运营商提供的 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

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

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

    当然,原则上现在运营商大多采用组播下发视频(除部分由于资源限制的用户,多数为机顶盒公网用户,仍然采用点播),所以如果 A 用户成功通过授权拿到组播地址,B 用户可以在仅接入网络,但不通过业务层认证的情况下,访问组播资源。
    bigtan
        5
    bigtan  
       62 天前
    深圳电信可以用 IPOE 也可以用 iptv.gd 的账号 PPPOE ,我就没抓包 ,直接 PPPOE 拨号就行了
    ios
        6
    ios  
       37 天前
    @bigtan 如何整?我现在折腾出 软路由只有一个口 可以用机顶盒看,想在其他网线口用这个机顶盒,或者不用机顶盒,多设备看
    bigtan
        7
    bigtan  
       22 天前 via iPhone
    @ios 周末抓了一下 ipoe 的认证信息,挺好折腾的,楼主的教程很准确
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   2127 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 10:32 · PVG 18:32 · LAX 02:32 · JFK 05:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.