【零基础教学】红米AX6000官方固件双网线实现IPTV融合

2023-12-18 07:52:07 17点赞 127收藏 17评论

引言


家中父母喜欢看传统的电视节目,对于点播类的互联网电视并不感冒。且随着政策的变化,曾经以电视家为首的可观看电视直播的APP纷纷关停,家中的电视逐渐成为了摆设,因而便有了本篇文章。作者本人对于硬件基本一窍不通,所以本文主要是以一个普通人或者说零基础的角度来讲述如何实现将IPTV融合进宽带,实现在电视上通过KODI来观看自己喜欢的电视节目。

为什么不直接使用电信公司的电视盒子来观看?

1. 电视盒子内置了大量的电视购物节目,这种几乎诈骗式的节目对于当代年轻人几乎没有吸引力,但老人因为接收信息的渠道太匮乏,很容易被夸大宣传的东西洗脑,通过自己定制的节目清单,更容易屏蔽掉垃圾广告

2. 电视盒子需要通过有线连接电视,光猫的IPTV口到电视盒子一根线,电视盒子HDMI输出口到电视一根线,以及IPTV本身的电源线,走线复杂且家中光猫距离电视较远。因而pass

3. 电视盒子有单独的遥控器,和小米电视的遥控器需同时配合使用,操作复杂

为了实现这个目标,作者本人翻阅了大量的资料,耗时3-4天。并不是这个问题有多难,我相信对于专业人士,或许半个小时就可以搞好,但是对于零基础且无人指导的我而言,唯一解决问题的途径就是通过翻阅大量的资料,形成一个自己的认知,再推敲反复验证,看完本篇文章或许并不能帮助你成功实现IPTV融合,但是我相信你一定会收获面对这种未知领域的问题,该如何入手以及解决问题的思路


正文

对于网上可以检索到的信息,我这里不过多赘述,主要讲目前互联网上没有的。由于我观看的相关文章实在太多,并且没有想到会研究出来要写文章发表,于是没有记录相关的参考资料,但是对于每个知识点,我都会给出我使用的搜索关键词,按关键词检索即可看到相关的资料(搜索引擎为Google)


1. 第一步解锁红米AX6000的SSH!该路由器官方固件是 openwrt (一个开源的路由器系统) 的定制版,网上有大量的教程,此处不再赘述,可以参考这个链接

关键词:红米AX6000 解锁 SSH

解锁 ssh 参考链接 : https://github.com/lemoeo/AX6S


2. 第二步需要抓取 IPoE 的认证信息!我家河南联通的IPTV主要是通过 IPoE 实现的认证,简单点说就是在 DHCP 请求发起时,通过携带一些关键信息来获取到运营商分配的IP,这一步难点不在于抓包,而是需要一个桥接设备来中继,以便在桥接设备中通过 tcpdump 来实现数据抓包,然后通过 wireshark 查看抓取的数据。我是先把路由器刷成了openwrt,完成了数据抓取。由于红米AX6000也是openwrt,理论上也可以直接在官方固件中通过改变LAN口的属性来完成桥接,但是由于我不懂这些,所以才用了最笨的方法。这一步也不会很难。继续上参考链接

关键词:IPTV 认证信息抓取 或者 IPTV openwrt option60

抓包数据截图抓包数据截图

抓取认证数据参考链接:https://www.v2ex.com/t/896669

这里需要重点记录你抓取的数据

1. Client MAC address

2. Option60 Vendor class identifier

3. Host Name


3. 第三步开始可以参考的信息就很少了,也是最难的部分。由于我并不专业,所以一些术语或者概念的表达难免会有错误,内行一笑而过就好了,并不是很专业的科普文,我也没时间去研究路由器的架构以及相关术语概念,更多的是我看了文章以后形成的一个自己的认知

首先ssh登录进入路由器

一般登录路由器使用 ssh root@192.168.31.1 即可

我的mac电脑存在兼容性问题,于是我使用的是

ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa root@192.168.31.1

需要明确,红米AX6000有四个LAN口,这些LAN口并没有明确的功能划分,甚至任意一个都可以是用作WAN口,WAN口是连接外部网络的作用,LAN口是局域网,此处说这些主要是为了明确每个LAN口的物理编号。然后运行 swconfig dev switch0 port 编号 get link ( 编号 1-4 ,5,6好像是CPU接口,有兴趣的自行查询资料 ), 结合下图观看

【零基础教学】红米AX6000官方固件双网线实现IPTV融合

根据命令行查询结果,1 3 4 为 连接状态,2位未连接状态,因此可以明确左边第一个是1,依次为2、3、4,这里记住每个物理端口的编号

然后通过 less /etc/config/network 查看文件

这个配置是我修改后的,你们的 vlan3 会跟我的不同这个配置是我修改后的,你们的 vlan3 会跟我的不同

这个配置是我修改后的,你们的 vlan3 会跟我的不同,通过查看配置我们可以发现,vlan5 对应我的4号物理端口,他的配置为 '4 5t', 其他的 1 2 3 端口, 对应的options ports配置为 ' 物理端口号 6t ', 因此我们可以断定,如果需要把其中一个端口配置为WAN口,就需要将 option ports 修改为 ' 物理端口号 5t ',为了最大程度的降低失误,我新建了 vlan6 ,对应的配置如下,这里我也不清楚 swtich_vlan, device ,interface的实际含义,但是不影响我们照猫画虎

【零基础教学】红米AX6000官方固件双网线实现IPTV融合

如果你跟我一样采用把3号物理端口用作连接IPTV的WAN口,需要在vlan3中把 option ports删除,如果使用其他物理端口,也需要做对应的修改。到这里我们已经完成了基本的配置,还需要新增一个interface,用于DHCP的认证

关键信息,已做打码关键信息,已做打码

上图的配置可以照抄,唯独需要修改的是 option hostname , option sendopts , option macaddr ,这三个信息就是上面抓包获取到的,务必改成你自己的配置,照抄我的可能获取不到ip ,还有需要注意的,如果你新增的不是vlan6,而是其他的比如 vlan7,那eth1_6, 就需要改成 eth1_7 ,下面的也改eth1.7 ,包括iptv那里,此处的eth0 ,eth1 代表不同的cpu接口,具体的我也不懂,自行查阅

到这里,我们已经完成了对 /etc/config/network 的修改,需要注意的点就是假如你使用2号物理端口作为iptv的口,你需要在vlan2中删除 option ports, 并且 像我一样新增vlan6,options ports 改成 ' 2 5t ',iptv配置处填写好你对应的抓包数据。

仅仅是这样还不行,由于openwrt的问题,我们的vendor class identifier 数据无法正确的发送,所以我们需要修改 /lib/netifd/proto/dhcp.sh 文件,但是在红米AX6000的系统中,该文件是只读状态,我们无法直接修改,在翻阅了大量材料后,使用如下命令可为当前挂载点绑定一个新的挂载点

mkdir -p /data/uci

cp /lib/netifd/proto/dhcp.sh /data/uci/dhcp.sh

在 /data/uci/dhcp.sh 找到此行:

  • ${vendorid:+-V "$vendorid"}

修改为:

  • -V ''

mount --bind /data/uci/dhcp.sh /lib/netifd/proto/dhcp.sh

然后 执行命令 /etc/init.d/network reload ,路由器会重载配置,你会短暂的丢失Wi-Fi连接,等待重新连上后,进入ssh,执行 ifconfig ,可以看到,我们新增的eth1.6 inet addr 已经成功获取到了ip,如果你的没有成功,请仔细检查上述配置

【零基础教学】红米AX6000官方固件双网线实现IPTV融合

到这里,我们已经成功完成了使用路由器取代光猫盒子的操作!


4. iptv电视直播数据为组播,我们需要使用udpxy来进行将组播的数据流变成TCP协议的单播流, 附上udpxy的下载链接,我还放了一份局域网文件共享的软件,可以放到路由器里面用来从路由器中提取文件。

链接: https://pan.baidu.com/s/1C5XjDLz3jmQJV5aB8W_Qtw?pwd=yyzs 提取码: yyzs 复制这段内容后打开百度网盘手机App,操作更方便哦

使用方法为:

将udpxy 下载后传到路由器中,放置在/data目录下,其他位置可能会重启后被删除

然后赋予执行权限 chmod +x /data/udpxy

接着执行 /data/udpxy -p 4022 -m eth1.6

执行后 udpxy 会以守护模式运行

然后我们自行抓取电视节目列表,或者去恩山无线论坛搜索你同地区别人共享出来的节目清单 一般形如这种:

#EXTINF:1,CCTV-1高清

igmp://225.1.4.73:1102

我们手动拼接 http://路由器ip:4022/udp/组播

比如我的就是 http://192.168.31.1:4022/udp/225.1.4.73:1102

获取到该地址后,可以使用vlc或者iina进行播放测试,有时可能不是你的配置错误,是节目清单的问题,建议多找几份清单,多测试几个频道


5. 最后一步!至关重要

我们针对路由器的所有操作都会因为路由器的重启而丢失(不要说不重启路由器,断电情况也会有),因为我们需要魔改一下,来达成我们的目的,这一步我也花了很多时间,主要是没有接触过这个snapshot系统。讲一下我的操作方法,可能不是最好的,但是我目前稳定在用

回顾一下我们的操作,这些都是需要在开机脚本中实现


- 修改了 /etc/config/netwok

- 修改了 /lib/netifd/proto/dhcp.sh ( 通过mount bind的方式

- 启动 udpxy 将组播的数据流变成TCP协议的单播流


首先我观察到他人给红米AX6000添加SSH的方法,是在 /etc/config/firewall 中添加开机自启动脚本实现的,因而我模仿作者在这个文件中新增了一个脚本

【零基础教学】红米AX6000官方固件双网线实现IPTV融合

该脚本经历了多次尝试,由于我不清楚openwrt的启动顺序,所以为了方便调试就将日志统一打印到了 /data/uci/init.log ,那auto_iptv.sh 的内容如下

【零基础教学】红米AX6000官方固件双网线实现IPTV融合

在开机阶段直接修改上述需要的配置并不行,我多次尝试后 通过将实际的运行任务延迟1分钟再执行可以获得想要的结果,/data/uci/run.sh 的内容如下

【零基础教学】红米AX6000官方固件双网线实现IPTV融合
  • 在 /data/uci/ 目录下事先存放好两份你修改好的文件。分别是 /lib/netifd/proto/dhcp.sh 和 /etc/config/network

  • 首先通过mount --bind /data/uci/dhcp.sh /lib/netifd/proto/dhcp.sh 来挂载你的脚本

  • 然后通过 cat /data/uci/network > /etc/config/network 来覆盖内容

  • /etc/init.d/network reload 接着重载配置

  • 最后 启动udpxy ,这里不用担心 重载配置耗时较多而udpxy启动失败,经我观察发现 network reload 会阻塞脚本运行。只有在完成后才会去运行下一步


总结

分享一下我都遇到了哪些坑,以及如何接触一个未知领域并尝试解决问题的经验,极力推荐使用Google检索问题,国内的大环境导致这种细分领域的问题几乎没有有效答案,国外相对宽松的生活节奏,技术们更喜欢在论坛上去回答问题

在官方固件的基础上去完成IPTV的融合属于是非常傻的事情了。在openwrt如日中天的现在,稍微学一点路由器的相关知识,配合openwrt高度图形化的操作界面,应该可以很容易完成想要的效果。但是我在使用过openwrt后,或许是心理作用。还是感觉官方固件的无线效果更好,更稳定。于是乎一个大胆的想法在我脑海里诞生了。我搜遍了全网,要么是完成了这个操作的人,寥寥几笔带过,讲了一个大致思路,但是操作起来困难不断。要么索性没有这种想法的人。浪费了好几天的时间,不断的查资料做验证。终于是将这个问题粗糙的解决了。

在看到 /etc/config/network 后先仔细观察了一下配置。对比发现规律后,首先是如何确定每个物理端口的编号,我想到的是通过插入两根相邻的网线来判断接口的连接情况,因此我在Google检索 “openwrt check port status”看到了这个答案,通过第五条可以显示物理端口的连接情况,因而可以确定我要用来连接IPTV的端口对应的编号

【零基础教学】红米AX6000官方固件双网线实现IPTV融合

在尝试修改 /lib/netifd/proto/dhcp.sh 时,返回了系统只读的错误提示,这个问题我试了很多关键词,以及查看了大量的回答,最终发现 通过 mount --bind 可以解决,由于尝试的关键词太多记不清了,所以这里不再列举

在将所有流程走通以后,我直接将所有的步骤编写成shell脚本,模仿ssh的方法添加到自启脚本中,不出意外的话还是出意外了,重启后network中没有如期出现我新增的配置,我重试了多次以后仍然不行,我第一反应是想看Linux的系统日志,但是openwrt的日志存放在哪里我也没找到,后来想到可以将脚本的执行结果重定向到自定义日志文件中,所以添加了 > /data/uci/init.log 2 >&1 ,这也是Google学来的,然后重启后果然在日志中发现了错误,好像是说某某设备没有被发现,于是我在将覆盖/etc/config/network前后的内容都打印出来,发现覆盖成功了,但是到真的开机以后好像被二次覆盖了,猜测我的脚本执行时机应该是在他的系统刷新之前,所以我又查找"linux shell delay run" ,看到了stackoverflow的回答,尝试将执行时机滞后60秒,来让路由器完成启动再运行我的脚本,果然恢复正常了!

第一版信心满满的脚本,失败告终第一版信心满满的脚本,失败告终通过 linux shell delay run 检索到的答案通过 linux shell delay run 检索到的答案

面对不曾涉足的领域,解决问题,我觉得首先明确这个问题的合理性。其次通过更换提示词来翻看大量的答案,可能一个问题会有多种解。遇到这种情况先不要急着操作,多看一些回答,凭感觉去尝试,多次尝试才可能有正解。

洋洋洒洒写了千余字,其中的困难可能只有亲历过才会感同身后。第一篇文章试试水,效果好的话下次分享《如何零基础通过Firda逆向Twitter视频下载接口》

最后感谢🙏恩山无线论坛,以及stackoverflow上大量的参考专业知识分享

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起

盒子5S 智能网络电视机顶盒 8K解码 WiFi6双频 DTS杜比音效 2+32G存储

盒子5S 智能网络电视机顶盒 8K解码 WiFi6双频 DTS杜比音效 2+32G存储

349元起

Tencent 腾讯 极光电视盒子5SE 1GB+32GB 黑色

Tencent 腾讯 极光电视盒子5SE 1GB+32GB 黑色

97元起

H3 智能网络电视机顶盒 2GB+32GB

H3 智能网络电视机顶盒 2GB+32GB

303.05元起

MI)小米电视盒子4S MAX

MI)小米电视盒子4S MAX

479元起

Dangbei 当贝 电视盒子H3 智能网络电视机顶盒 2G+32G内存 RK3566芯片 8K强悍解码

Dangbei 当贝 电视盒子H3 智能网络电视机顶盒 2G+32G内存 RK3566芯片 8K强悍解码

319元起

Dangbei 当贝 H3S 4K电视盒子 3GB+32GB 黑色

Dangbei 当贝 H3S 4K电视盒子 3GB+32GB 黑色

419元起

3C电视盒子移动4k高清机顶盒支持小米华为手机投屏全网通

3C电视盒子移动4k高清机顶盒支持小米华为手机投屏全网通

87.11元起

盒子4S 智能网络电视机顶盒 2GB+8GB

盒子4S 智能网络电视机顶盒 2GB+8GB

259元起

极光盒子5 电视机顶盒 2GB+64GB

极光盒子5 电视机顶盒 2GB+64GB

269元起

Dangbei 当贝 超级盒子B3 Pro 4K 超高清智能网络电视盒子机顶盒(S922X芯片千兆网口双频WiFi) B3 Pro

Dangbei 当贝 超级盒子B3 Pro 4K 超高清智能网络电视盒子机顶盒(S922X芯片千兆网口双频WiFi) B3 Pro

578.55元起

电视果 6 电视盒子

电视果 6 电视盒子

278元起

Dangbei 当贝 超级电视盒子MAX1 8K超清智能网络机顶盒 WiFi6 千兆网口 6+64G超大运存 点阵屏 MAX1

Dangbei 当贝 超级电视盒子MAX1 8K超清智能网络机顶盒 WiFi6 千兆网口 6+64G超大运存 点阵屏 MAX1

618元起

Tencent 腾讯 极光盒子5X 8K电视盒子 4GB+64GB 黑色

Tencent 腾讯 极光盒子5X 8K电视盒子 4GB+64GB 黑色

789元起

极光盒子6SE 电视盒子网络机顶盒 全志H618芯片 4K高清 1+32G存储 HDR10 极光5Se (1G+32G)

极光盒子6SE 电视盒子网络机顶盒 全志H618芯片 4K高清 1+32G存储 HDR10 极光5Se (1G+32G)

98元起

TVguo 电视果 爱奇艺盒子 电视果5S PLUS奇异果特别版

TVguo 电视果 爱奇艺盒子 电视果5S PLUS奇异果特别版

198元起

Dangbei 当贝 智慧电视盒子 Z1 Pro 智能网络机顶盒(8K解码 视频通话

Dangbei 当贝 智慧电视盒子 Z1 Pro 智能网络机顶盒(8K解码 视频通话

899元起
17评论

  • 精彩
  • 最新
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章

虚构清风

热爱技术、更爱自由

关注 打赏
相关话题
话题文章推荐
最新文章 热门文章
127
扫一下,分享更方便,购买更轻松