河北电信IPTV融合局域网实操记录
maxdarksol
编辑于 2022年11月20日 17:32

有这篇记录的主要原因是河北电信IPTV对CCTV5高清和风云足球高清30分钟试看的限制,看不了整场比赛,而其他第三方app直播源又可能存在卡顿或者版权问题不播放比赛直播。

首先介绍我家的设备状况:

  1. 光猫中兴F612,一个千兆LAN口一个百兆LAN口,不带WiFi,用很久了,之前有换智能网关的活动,我认为没必要就没参与。

  2. 无线路由器新路由D1,两个千兆LAN,已经刷了OpenWrt22.03,也已经用了好几年了,当年性价比还蛮高的,现在连厂商谛听科技都跑路好几年了。

  3. 电信ITV机顶盒华为悦盒EC6108V8U,已root并开启了双线双网,可以同时连接WIFI和IPTV内网,第三方app走WiFi,IPTV客户端走内网互不影响。

最初的想法是通过给机顶盒安装第三方app,不限时收看IPTV内网组播或单播节目的,因为付费直播是通过IPTV客户端限制的,组播单播数据流是没有加限制的。

所以,首先进行第一步,抓包,查频道列表地址,当然也可以搜索现成的别人抓好的你本地的组播地址,恩山论坛上就有不少人分享,但是不一定是最新的,我最后也会附链接分享我抓取的河北电信的频道链接列表。

网上流传的方法很多,有买镜像交换机的,有用电脑建立桥接的,具体可以搜索一下,看看他们的方法。我呢,我发现我这个机顶盒EC6108V9U是自带抓包功能的。只需要机顶盒插上U盘,进 设置-高级设置-操作码1301(各机顶盒不同)-本地运维-开机时自动收集调试信息,然后重启机顶盒就可以开始抓包。电视屏幕右下角显示DEBUG,然后进官方IPTV客户端,随便收看一个直播频道,然后关闭机顶盒就可以了。

然后拔下U盘,插到电脑上,用Wireshark分析一下抓到的数据包

打开Wireshark,菜单栏 文件-打开-导航到U盘里我们抓取的CAP数据包;

然后再应用显示过滤器输入HTTP,筛选http数据,然后点击菜单栏 编辑-查找分组,搜索字符串 Channel,拉动滚动条,找到一个如下的infoHTTP/1.1 200 OK (text/html)的条目,挑个Length长度大的,菜单栏 文件-导出对象-HTTP,

打开数据包并查找需要的数据

在弹出的导出对象端口中,可以找到我们需要的频道列表,他的内容类型为text/html,名字为getchannellistHWCTC.jsp,选中他,然后点击save保存。省份不同,名称可能不同,耐心寻找,一定能找到频道列表。

包含频道列表的文件

然后用notepad++打开这个导出的文件,我们可以看到许多如下样式的链接

频道链接

我们使用正则表达式标记并提取出频道名称和组播单播地址,

快捷键 ctrl+F 将查找替换功能调出,选择“标记”选项卡,在查找目标栏填入:ChannelName="(.*?)&#​34;.*?(igmp://.*?)\|rtsp 勾选选项卡上的“正则表达式”,然后点击“全部标记”,标记出来之后,点击复制标记文本,不关闭查找和替换小窗口,菜单栏 文件-新建 新建一个空白标签,将复制的文本粘贴进去,然后再回到查找替换小窗口,选中替换选项卡,在替换为一行填入 $1,$2 然后全部替换,这样得到的结果就是我们需要的节目igmp组播链接信息,菜单栏 文件-保存 给他起个名字备用。

接下来是提取单播链接,回到notepad++第一个标签页,回到查找和替换小窗口,标记选项卡,清除,清除掉上次的标记,然后查找目标栏填入新的正则表达式ChannelName="(.*?)&#​34;.*?(rtsp://.*?smil)复制标记文本,再新建一个空白标签,粘贴,然后回到查找和替换小窗口替换选项卡,还是$1,$2全部替换,这样就获取了单播的链接,菜单栏 编码-转为ANSI编码 文件-保存,给他起个名字备用,改编码主要是因为我机顶盒使用的友窝YWP播放器不支持UTF-8编码,显示频道名称会乱码,使用其他APP也可以不改。

提取出的链接

现在我们可以使用telelist软件,把这两个txt文件转换成播放器使用的m3u播放列表文件。igmp://不能直接播放,可以用notepad++把igmp替换成rtp://。我在我的机顶盒上安装的是友窝YWP,它是直接使用txt列表的。经过我测试,我这个机顶盒,设置友窝走IPTV内网,单播rtsp链接是可以直接播放的,组播链接igmp则不行。至此,最低限度的,不限时收看CCTV5高清、CCTV风云足球高清、FTV足球频道等直播信号的目的已经达到了。接下来我们搞点花活,也就是这篇记录的重点内容:

IPTV融合局域网,让所有设备都可以观看IPTV直播

因为不想失去官方IPTV客户端回看的能力,所以我决定保留光猫LAN2口到机顶盒的有线连接,通过给光猫LAN1千兆口到路由器WAN口的连接添加VLAN,单线复用的方式使无线路由器加入IPTV内网。首先说,河北电信的IPTV是IPoE鉴权的,HDCP服务器需要核对一些关键信息,才会给终端下发IPTV内网IP地址,根据网上前辈们总结的经验,河北电信只需要验证option12 host name、option60 Vendor ClassClient MAC,就会下发IP,我们可以使用Wireshark,分析机顶盒与DHCP服务器的握手包,查看并获得这些验证信息的内容,由于前辈们的功劳,河北电信用户甚至不需要分析数据包,其他地区用户可能需要抓包看一下服务器都验证哪些option。

回到Wireshark,还是打开我们从机顶盒抓到的数据包,这次不用过滤,因为DHCP握手在开机最早那段时间,所以我们在最开头就能找到HDCP数据包,双击打开一个info为DHCP Request的链接,

展开描述为Dynamic Host Configuration Protocol (Request)的分组,

DHCP请求

向下滚动到底,我们可以看到这些信息

鉴权所需option

这些option是机顶盒向DHCP服务器申请IP时上传的信息,通过比对发现option12 host name为我们机顶盒的STBID,option60 Vendor Class是字段HEITV。STBID在我们机顶盒底下的标签上和开机 设置-设备信息里都有,或者照着抓包里的填都行,MAC地址也一样,机顶盒标签和设备信息里都有。

拿到这些信息我们就可以开始具体设置了:

因为光猫和路由器不在一个网段,所以我们不能透过路由器访问光猫的配置页,我们先打开openwrt路由器的配置页,网络-接口,页面底部添加新接口,名字随便,我填的modem,协议选择静态地址,设备选择交换机端口wan,创建接口,IPv4地址填光猫管理页面同网段的IP,我填的是192.168.1.17,网关填光猫管理页面的IP,我的是192.168.1.1,然后高级设置标签,使用网关跃点填上,我填的20,防火墙设置,域选WAN,保存。

添加接口

现在就可以透过路由器直接访问光猫的配置页面了。

打开光猫的配置页面,输入账号密码进入设置,这里插一嘴,如果你的光猫是比较新的智能网关,那么很可能是动态密码的,密码一段时间就会自动从局端下发,而且不能删除TR069连接,不能阻止局端修改你的密码,因此需要你联系宽带运营商的运维,让他给你查下密码。因为我的是老设备,而且很早以前改桥接、开IPv6的时候就删除了TR069连接,所以我的账号还是telecomadmin,密码还是nE7jA%5m,所以我能很轻易的修改配置。

先不着急改,先记录下目前的一些信息

网络-远程管理-LOID这里可以获取你的逻辑ID,凭这个可以在配置页面首页设备注册那里要局端重新给你的猫下发业务配置,记录备用,免得你搞坏配置不知所措,我这里不需要密码就能注册下发业务配置。

逻辑ID

设备注册

然后就是网络-宽带设置里的一些业务信息,点选IP协议版本和连接名称,可以看到你旧的业务配置信息,名为INTERNET的上网业务应该都在v4v6下了吧,名为other的IPTV业务和远程配置的TR069应该在ipv4下吧,这时可以尝试删除TR069业务,我是删了的。

看到我已经把上网业务的IP协议版本改成了IPv4/v6,模式也已经改了桥接,你的可能是PPP拨号。记录INTERNET业务的VLAN模式tag改写VLAN ID,我的是1311,802.1p值,我的是0。如果你也想把连接改成桥接模式,由路由器拨号,减少一层NAT,你将用到这个信息,删除旧的业务,自己新建上网业务,然后填上这写信息就可以了。端口绑定就是你光猫哪个网口用于上网业务,新光猫应该有四个LAN口还有WLAN,也就是WiFi,听说新的光猫都带wifi5了,它们除了ITV接口外应该都绑定在INTERNET业务上,这里说明一下改桥接的话光猫的WiFi就不能用了。如果不想改变目前上网拨号的状况,这个业务可以保持原样不动。

上网业务配置

记录下应用-日常应用里IPTV的公共组播VLAN的值,备用。可以看到我的IPTV组播在other业务里,VLAN ID 43。

IPTV组播VLAN

接着是other业务的参数,也记下来。

IPTV业务配置

原本的端口绑定是LAN2百兆口,我们需要把两个网口都绑上这个业务,这个如果不能直接修改,需要删除旧的业务,然后新建业务,然后照着记下来的参数填。

然后回到日常应用里IPTV的VLAN设置,因为我们删除过other业务,这个参数可能掉了,我们填回去,我这里是43。河北电信的IPTV是IPv4的,同时要注意igmp snooping和igmp proxy有没有勾选开启,如果是IPv6则要注意MLD协议。

然后到网络-绑定设置里给端口LAN1添加VLAN,不然LAN1的上网业务和ITV业务是要冲突的。

网口1VLAN绑定

修改LAN1的绑定模式,将端口绑定改为VLAN绑定,然后填写VLAN值,

前面是你要添加的VLAN,后面是目前两个业务的VLAN。VLAN1是默认标记,相当于没有标记,VLAN1绑定1311,相当于没变化,不影响路由器到光猫之间的上网连接。然后给ITV的业务99绑定个VLAN,我填的是2,你也可以填其他,记住这个数,之后要填到路由器的设置里。

我在这里解释一下VLAN标记的作用,假如你要传递一段信息给局域网,你需要给这段信息加上一个标记,告诉这段信息是给谁的、用于那种业务,比如我两个网口默认VLAN标记都是1,我的光猫会帮我的数据包tag改写VLAN标记,也就是业务设置那里的改写、透传、不启用,把从千兆口传的数据的默认标记1改写为1311,从百兆口传的数据从默认标记1改写为99,然后发给服务器,然后服务器就知道每个数据包是传给哪项业务的。透传transparent,就是原来是多少依原样上传,untag就是丢弃你的VLAN标记改写成默认的1。说回我目前的设置,现在千兆LAN口有两个VLAN,光猫会帮我区分从千兆口传来的数据包,把带1标记的改成1311用于上网业务,把带2标记的改成99,用于IPTV业务。这样一个LAN口两个业务就不会发生冲突。

光猫设置完成,我们再打开路由器的配置,给路由器添加IPTV业务

添加VLAN设备

首先是给路由器WAN口添加VLAN

网络-接口-设备-添加设备配置

设备类型选 VLAN(802.1q),802.1ad不行;基设备选 交换机端口WAN,也就是路由器的WAN口;VLAN ID填光猫里other99业务你绑定的VLAN号,我绑定的是2;设备名随意,你能认出来就行;MAC地址填机顶盒的MAC地址。保存,给IPTV准备的VLAN就有了。

VLAN设备

然后给路由器添加IPTV业务接口,网络-接口-添加新接口,名称随意,我填的IPTV;协议选 DHCP客户端;设备填上一步添加的软件VLAN设备,创建接口。

然后编辑这个接口,常规设置里 在请求DHCP 时发送的主机名 填上你机顶盒的STBID,这也就是之前HDCP握手包里的option12;

接着是高级设置选项卡,请求DHCP 时发送的 Vendor Class选项填上你抓DHCP数据包option60里获得的字段,河北电信是HEITV;然后使用网关跃点也填上,我填的40;然后防火墙设置,给这个接口分配个域,我选的WAN,保存。其他省份可能需要验证其他option信息,可以用putty或者WinSCP修改路由器/etc/config/network里接口IPTV interface的配置,添加option sendopts来发送抓DHCP包时获得的额外的一些option信息,比如,我抓包拿到一个加密的option61,怎么办? option sendopts '0x3d:XXXXXXX…..&#​39; 十六进制3d表示61,XXXX是抓包拿到的十六进制加密信息 option125怎么办? option sendopts 'x7d:XXXXXXX…..&#​39; 十六进制7d表示125 当然了,这是发送十六进制的加密数据,那要是发送我上面说的明文option12呢? option sendopts '12:XXXXXXX…..&#​39; 是不是很简单?

IPTV业务接口配置

这是回到网络-接口页面,重启刚刚编辑完的接口,看看是不是已经获得了和机顶盒类似的IPTV内网地址了。这时我们的局域网设备应该已经可以播放组播视频流了。但是由于组播协议本身的限制,它可能会拖慢我们的路由器性能,尤其是无线WiFi性能,WiFi下几乎无法播放。这时我们需要在路由器安装udpxy插件把组播流转换为单播流:

来到路由器的系统-软件包-更新列表,筛选器填 luci-i18n-udpxy-zh-cn 安装,会安装udpxy、luci-app-udpxy、luci-i18n-udpxy-zh-cn三个软件包。

安装好后,服务栏目下会增加udpxy,我们稍微修改下它配置

启用 勾选;绑定 IP/接口填br-lan,也就是LAN桥,里面包括路由器LAN口和无线网络WLAN;端口可以自定义,我使用默认的4022;源 IP/接口填你在接口里新建的获得内网地址那个接口

udpxy配置

可以到接口那里看看他们的uci标识符叫啥,然后填上

查看uci标识符

然后到网络-防火墙-通信规则,添加规则

名字填 Allow-proxy-udp;协议选 UPD;源区域选 WAN;目标区域选 设备。保存。

防火墙规则

这时在浏览器打开http://你的路由器地址:4022/status 就可以看到updxy的运行状态了。

udpxy状态

按照提示,此时我们把最早获得的imgp组播频道列表中的地址用notepad++替换一下,把igmp://替换成http://你的路由器IP:udpxy端口/udp/,就可以在局域网设备观看单播视频了。比如我的将igmp://239.254.200.45:8008替换成http://192.168.17.1:4022/udp/239.254.200.45:8008。电脑端的potplayer,手机端的kodi都可以很好的播放。

由于路由器和机顶盒使用了相同的stb和mac,可能导致局域网内观看组播时,机顶盒官方iptv客户端不能播放。

此时如果你有DDNS动态域名解析,你甚至可以将内网的4022端口映射到广域网(openwrt防火墙的端口转发就可以轻易做到),然后用你的域名,播放这些单播流,这样你就可以把链接分享给你的好兄弟,一起看你家的IPTV直播流了。

由于我家宽带的上传带宽有限,我在这就不分享带有我域名的播放链接了。

如果你家里的设备太多,手机、平板、PC、电视、机顶盒,你又嫌每个设备都要布置播放列表太麻烦,你可以使用xupnpd插件上传一份播放列表到路由器,在局域网中创建一个简单的DLNA服务器,让所有局域网设备能够轻易的获得播放列表。而且每次频道表有变动,只需要再抓包,将新的频道表上传到xupnpd一次即可。

openwrt 系统-软件包 搜索并安装xupnpd插件;

打开xupnpd的配置页面http://你的路由器IP:4044/

Playlists上传你的播放列表m3u文件。

上传m3u

这时你的局域网内就会多一个DLNA服务器,Windows直接在此电脑里多了个网络设备,打开后可以看到播放列表,遗憾的是Potplayer不支持这样播放,不过Windows自带的电影和电视和新的媒体播放器都可以正常播放;电视和机顶盒如果支持DLNA,也可以发现设备并播放;手机上也有很多app支持DLNA,我个人使用的是bubbleupnp,投屏和接受投屏都很方便。

至此,此次记录教程也就顺利完成了。

最后附上一个下载链接,里面包含我抓取到的河北电信频道表,和一些工具、软件,比较遗憾的是这个列表里没有前几个月测试的CCTV16奥运频道,这个频道目前下线了,以后频道重新上线,我会再更新频道列表,BRTV冬奥纪实频道,因为体育节目版权问题,也已经被BRTV纪录科教频道替换了,IPTV应该不会上线BRTV体育休闲了。

https://wwu.lanzouy.com/b00q5tu9a 密码:9dij