收起左侧

运营商IPTV组播转单播,生成M3U,用于飞牛看直播

0
回复
110
查看
[ 复制链接 ]

11

主题

13

回帖

0

牛值

江湖小虾

本方案只是提供思路与方向,编辑时出于自身隐私考虑复用了当时教程上的图片,就当是技术的搬运工了,也并非自己原创。

另外环境是浙江电信IPTV

好现在开始方案内容:

1.方案思路,是将电信套餐带的IPTV,从组播转换至单播在内网或特定服务提供到外网服务

2.大致过程,抓包-分析账号密码,分析直播源,通过udxy转换到内网播放

3.我实现的平台,openwrt,当然如果会操作带iptv功能的路由器基本都能这么干

现在开始实际操作

此文主要记录使用旁路op做iptv服务器提供组播服务

一、 环境条件:

  1. all in one ,PVE虚拟化底层,爱快做主路由op作为旁路由科学上网,额外再虚拟了一个OP做iptv服务器使用,fnos做nas跑docker版jellyfin。当然想要科学上网和iptv一起也是可以的,就是设置起来比较麻烦,还要弄个负载平衡。

2.加了一张USB网卡做IPTV接口(当然想用VLAN的小伙伴增加一个VLAN设置就行)vmbr4就是增加的USB网卡

image.png

二、 数据获取
此次主要需要获取的数据有以下几个,iptv的机顶盒mac ,组播地址,dhcp+协议的账号明文和加密的密码。

  1. 抓包及获取组播表
    使用的设备:Wireshark软件、笔记本或者台式机、IPTV盒子、Hub交换机(某宝搜5口镜像交换机)如下图所示。也可以用两块有线网卡做桥接抓包。
    image.png
  2. 设备的连接
  1. 首先IPTV盒子通电,用HDMI连接到电视上,然后网口接Hub交换机的3、4、5这三个口的任意一个口。
  2. 笔记本通电开机,笔记本电脑的网口接Hub镜像交换机的2号口,笔记本电脑的IP地址为自动获取。
  3. Hub镜像交换机通电,光猫的iTV端口接Hub镜像交换机的1号口。
    如下图所示
    image.png
  1. 抓包流程
  1. 电脑打开Wireshark 软件,选择抓包的网络连接,这里我们选择本地网卡,因为我们本地网卡连接了Hub的2号接口,所以我们选本地连接。

  2. Wireshark开始抓包,同时打开IPTV盒子并等待IPTV盒子进入系统,随便选择几个频道观看一下,然后在Wireshark中停止抓包。

  3. 停止抓包后,把抓取到的数据保存到本地。在Wireshark 上面的菜单栏中选择『文件』→『保存』,就保存为一个后缀为“pcapng”格式的本地文件了。
    image.png

    image.png

    image.png

  1. 抓包数据分析
  1. 用Wireshark打开刚才的“pcapng ”文件,然后在软件工具栏下面有个“过滤器工具栏”,在文本框中输入“http”,软件会过滤出http的协议内容。
    image.png
  2. 出来“http”协议的内容后别急,电脑上按下CTRL+F键,会在第一步中的“过滤器工具栏”下方出现一个查找框,在下图的左数第二个红框中下拉选择“字符串”,在左数第三个红框用输入我们要查找的关键字“channel”。
    image.png
  3. 进行关键字“channel”查找后,软件就自动搜索出“channel”相关的数据流了。
  4. 在软件右侧的“info”这一列,找到有关“HTTP/1.1 200 OK (text/html)”字样的数据行,随便哪一条都行,用鼠标选中它这一行数据,在菜单栏中选择『文件』→『导出对象』→『HTTP』。
    image.png
  5. 这时候会弹出一个对话框,里面有很多文件,往下拉,在“文件名”一列中找到有“fgetchannellistHWCTC.jsp”这样字样的文件,此处盗用他人图片仅作参考
    image.png
  6. 把这个“getchannellistHWCTC.jsp”文件保存到本地并用记事本打开,往下拉再往下拉,就会看到频道列表了。
    image.png
  1. 从抓包信息获取鉴权信息欺骗iptv组播服务器
    image.png

包抓到了,我们来看下dhcp discover请求里,包含了option12跟60两个关键的信息,也就是说浙江电信iptv只认证盒子序列号跟**密码,当然了,mac是也是必须的,我们先把盒子的mac保存下来备用。
image.png

option12这个数据,明文,盒子的序列号,复制出来备用
image.png

再来看一下option60,也就是包含了iptv**密码的数据,想都不用想了,肯定是加密的
image.png

其中hex的3c表示的是option60,3d表示的是长度,所以我们只要从00开始,把这个数据保存好备用,格式:0000if39.....两位一个长度,我这里长度是61,所以一共有122个字符串,大家别漏了。保存好
三、 Op安装及设置

  1. PVE下安装op这个详细见其他教程,此处不写了。
  2. 配置op,首先先只设置一张lan的网卡,USB网卡先不设置
  3. 进入op,设置网关为爱快的ip,DNS设置一个(后期这两个都要删除的,但是如果先不设置则插件需要本地上传不能联网安装),进SSH安装几个插件:
  1. opkg update
  2. opkg install igmpproxy udpxy tcpdump luci-app-udpxy
  1. 添加接口,首先关闭op,在PVE下增加一张网卡给op,并设置好mac地址和机顶盒一致(或者进入系统后也可以改mac地址)
    image.png
  2. 重启op后进入op删除WAN和wan6,添加IPTV端口,使用新增的网卡eth1,由于浙江电信是IPOE,也就是DHCP+的鉴权模式,所以IPTV我选择用DHCP客户端,网络设置。也可以在iptv设置里修改mac地址。此处需要删除lan端口的DNS和网关,留为空白。也可以在配置端口里修改这两项
    image.png
  3. 编辑配置端口:
  1. 配置igmpproxy:
    ssh命令vi /etc/config/igmpproxy,接口名称和上面图片里显示的对应
    image.png
  2. UDPXY配置
    Ssh命令vi /etc/config/udpxy
    image.png

其中4000这个端口号根据自己喜好来就行
3) 防火墙配置
SSH命令 vi /etc/config/firewall
添加以下三项,第一项是有的,直接改接口名称,红字部分注意
config rule
option name 'Allow-IGMP'
option src 'eth1'
option proto 'igmp'
option family 'ipv4'
option target 'ACCEPT'

config rule
option name 'Allow-UDP-udpxy'
option src 'eth1'
option proto 'udp'
option dest_ip '224.0.0.0/4'
option target 'ACCEPT'

config rule
option name 'Allow-UDP-igmpproxy'
option src 'eth1'
option proto 'udp'
option dest_ip '224.0.0.0/4'
option dest 'br-lan'
option family 'ipv4'
option target 'ACCEPT'

  1. Lan口igmp_snooping配置
    SSH命令 vi /etc/config/network的lan下面增加
    option igmp_snooping ‘1’

现在就可以通过http://192.168.x.x:4000/status来查看udpxy的运行状态了
image.png

  1. 其它设置
    a) udpxy启动:/etc/init.d/udpxy start
    b) 开机启动:/etc/init.d/udpxy enable
    c) 重启所有接口:/etc/init.d/network restart
    d) 重启某个接口:ifdown lan 或者 ifup lan
  1. 配置网口
  1. 先删除op lan内的DNS和网关,关闭DHCP。可以vi /etc/config/network 找到lan项目删除对应内容即可。IpV6禁用:
    image.png

    image.png

  2. Webui内udpxy配置

此处端口可以自己定义和之前文本修改4000是同一个,重点是bind IP必须要填写 WAN口名称必须对应。
image.png

image.png

  1. 设置iptv明文和加密文获取点播回放等功能
  1. 重设IPTV口的mac地址,直接把机顶盒的mac地址填入,也可以在PVE虚拟化的时候网卡设置里吧mac地址填入。则这边就不用改了。
    image.png
  2. .修改/etc/config/network中的IPTV参数
    image.png

其中option hostname 'XXXXX'填入我们抓包抓到的option12的明文信息,也就是机顶盒的序列号信息
option sendopts '0x3c:00001f39.....'这个需要讲一下,因为option60是加密信息,我们抓包抓到的是16进制的信息,所以我们只能把抓到的信息原模原样发回去,所以用sendopts来发送,具体的用法可以自行查看udhcpc的用法说明。后面的0x3c,0x3c表示的是十六进制,也就是十进制的60,也就是我们发送option60信息。后面的00001f39.....就是上面抓包我让你们保存的option60的信息。
3) 修改dhcp客户端服务的脚本:
我们找到/lib/netifd/proto/dhcp.sh,找到下面这行​{vendorid:+-V "vendorid"}
image.png

改成这样 -V ''
image.png

然后我们重启一下IPTV接口,见证奇迹的时刻来临了,我们成功拿到了电信IPTV的IP。
四、 组播服务器配合jellyfin播放设置

  1. 组播文件m3u提取
  1. 使用notepad++正则替换处理生成m3u文件类似下图
    image.png

其中地址应该为http://192.168.x.x:4000/udp/组播分析地址

原始教程里我用的是jellyfin 思路一样就是在飞牛APP里添加M3U的播放库就可以了,jellyfin的好处是还能录播
2) 打开jellyfin,配置中心-控制台-电视直播-调谐器设备边上+号点开
image.png

  1. 选m3u tuner,然后在文件或网址处打开预先导入jellyfin硬盘的处理过的m3u文件
    image.png
  2. 根据情况添加电视指南数据提供方
    image.png

自此结束,大家可以愉快的随时随地通过jellyfin观看电视直播了

收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则