迫于看电视,折腾一下IPTV,网上各种帖子讲的很复杂,如果是用的江苏电信且没有特殊的需求,实现多设备看IPTV还是比较容易的,稍微整理一下。

目标

实现局域网内各个终端包括其他电视、电脑、手机都能稳定观看直播(实际上外网也能连回家里看);保留电信IPTV盒子的功能。

网络环境

运营商:江苏(苏州)电信
光猫:友华PT926E(天翼网关3.0)

IPTV抓包和测试

抓包

这一步的目的主要是为了抓取直播源和进行测试,不过现在网上可以找到很多江苏电信的直播源,经过测试,只要连接iptv口,不用什么特殊操作就能播放。

想看的可以展开

抓取可以买个usb网口,一个网口接光猫IPTV口,一个接IPTV盒子,然后进行桥接。在Windows下可以用wireshark进行抓包(记得安装npcap),后续操作大体可以参考这个视频

这里其实涉及到江苏电信(浙江电信好像也是)是用的带鉴权的DHCP。就是说如果要在路由器上获取IP,需要option12(盒子序列号)、option60(加密的认证数据),再拷贝盒子MAC地址进行模拟,但**实际上不用获取IP也能通过组播地址播放**。对认证感兴趣的可以看这几个贴子: 浙江电信IPTV DHCP鉴权option12与option60获取方法分享江苏泰州IPTV破解IP认证,实现DHCP获取IP


经过测试,使用wireshark进行关键词rstp、igmp抓包,也并不能找到明文的组播地址,所以老老实实用网上的源就好,基本不会变动,可以长期使用。如:抓的江苏电信IPTV组播地址(2021-12-15)IPTV(github)

测试

可以用电脑直接连接光猫的IPTV口,使用PotPlayer等软件播放组播地址,如rtp://239.49.8.19:9614

网络调整

光猫设置

因为路由器和光猫都在弱电箱里,不需要使用网上提的的较多的单线复用(路由器和光猫只有一根线连接的情况),只要再接条线到路由器再设置即可。由于默认只有一个IPTV口,且这个口已经连到了房间的IPTV盒子上,首先需要登陆光猫把IPTV绑定到一个闲置的百兆口上,也就是光猫上有两个IPTV口。

这时候就需要先获取光猫的超密了,我的光猫是天翼网关3.0,参照【教程】使用BurpStuite抓包获取天翼网关超级密码并更改天翼网关为桥接模式 ,就能获取明文密码了。主要是利用了一个漏洞,浏览存储目录的时候,拦截请求修改请求目录参数,访问根目录对密码文件进行拷贝,拦截修改情况这步用fiddler也是可以的。(部分光猫似乎不是明文,可以尝试文章评论区的方方法)

拿到超密后,登陆修改业务绑定信息,INTERNET_B_VID是宽带业务,Other_B_VID是IPTV业务,把宽带业务的绑定端口减少一个,我这边是把端口4取消绑定了,端口2是原有的IPTV端口。再把IPTV业务绑到空出来的端口4上,这样就保证IPTV盒子和路由器都能接入IPTV

路由器设置

OpenWRT设置参考评论

首先要将路由器的eth4端口(将要和新增的iptv口连接的端口)从Lan桥接中删除,也就是将它独立出来,这一步的目的是阻止IPTV的组播流量进入局域网(据说会引起风暴,降低网络性能,网上的很多帖子似乎是通过vlan、防火墙流量配置等方法解决的)在我的路由器上如图设置即可,如果是OpenWRT应该是点接口-LAN,从设置里取消勾选。

用网线把光猫上新增的IPTV口(端口4)连到路由器的eth4,完成物理连接,此时再登陆路由器管理页面可以看到已经连接上了。

UDPXY转HTTP

UDPXY是把组播流量代理转换为HTTP,一是防止组播流量进入局域网,二是HTTP更加稳定,各终端通用性好。如果是OpenWRT可以安装相应luci插件进行设置,ER-X的EdgeOS基于Debian,自己下载二进制文件,再新建个服务用于启动即可。

拷贝或下载到路由器用户目录后,SSH登陆,chmod +x udpxy添加执行权限,udpxy -S -a 192.168.2.1 -p 4022 -m eth4 -c 10 -B 1MB -M 30先测试一下能不能用。

打开http://192.168.2.1:4022/status正常显示,播放器打开http://192.168.2.1:4022/udp/239.49.8.19:9614可以播放,测试成功。

接着创建servicesudo vi /etc/systemd/system/udpxy.service(User要设置成ubnt,试了root不行),这里设置了ExecStartPre等待30秒执行,防止重启后启动失败

[Unit]
Description=Udpxy
After=network.target

[Service]
ExecStartPre=/bin/sleep 30
ExecStart=/home/ubnt/udpxy -S -a 192.168.2.1 -p 4022 -m eth4 -c 10 -B 1MB -M 30
User=ubnt

[Install]
WantedBy=multi-user.target

保存后sudo systemctl daemon-reload、``sudo systemctl start udpxysudo systemctl enable udpxy`启动服务、设置为开机自起,此时就基本完成配置了。

多设备播放

PC

WIndows上使用Potplayer,Mac上使用IINA,可以做一个m3u8列表方便选取观看,网上的iptv源列表,替换成下列格式,命名为xxx.m3u8,播放器打开即可播放,完整见直播(江苏电信21-01-04).m3u8

#EXTM3U
#EXTINF:-1,CCTV1HD
http://192.168.2.1:4022/udp/239.49.8.19:9614
#EXTINF:-1,CCTV2HD
http://192.168.2.1:4022/udp/239.49.8.50:9802
#EXTINF:-1,CCTV3HD
http://192.168.2.1:4022/udp/239.49.9.31:6000
#EXTINF:-1,CCTV4HD
http://192.168.2.1:4022/udp/239.49.8.51:9806
#EXTINF:-1,CCTV5HD
http://192.168.2.1:4022/udp/239.49.8.75:8000
#EXTINF:-1,CCTV5+HD
http://192.168.2.1:4022/udp/239.49.8.18:9610

电视

Android电视和盒子可以安装DIYP影音,然后在设置内自定义播放列表,打开对应URL就可以进行设置,格式为频道名称,http地址,完整见直播列表(DIYP影音).txt

移动端

可以播放m3u8的播放器即可,或者手动复制http链接使用。

其他

外网播放

操作是可行的,不建议使用,占用大量上传,还存在一定风险。

参考

https://github.com/itiddler/udpxy_erx
https://blog.friskit.me/2020/05/31/bjunicom-network.html
https://www.bilibili.com/read/cv9858309
https://www.right.com.cn/forum/thread-7722652-1-1.html
https://www.right.com.cn/forum/thread-794304-1-1.html