联通和移动的电视直播IPTV组播数据抓包过程 - 播放组播IPTV数据源

技术参考,理解IPTV组播原理

有什么用

技术参考,理解IPTV组播原理;经历2天时间的实践,曲折过程,成功把组播转单播播放

实测某地联通和移动的IPTV组播数据实时播放电视直播

具体描述如何接线及检查光猫IPTV口是否有组播数据

怎么用

在光猫IPTV口 和 机顶盒 的网线连接中间加进去一个Openwrt之类的路由,用于抓包

这个方法不是一个完美方法,直接在IPTV口插上一台PC机(可以用来扫描ISP组播网络信息),用于抓包又抓包到机顶盒获取IPTV直播源的过程数据包

可以参考这个流程,从中得到启发,应用在你独特的网络环境和特定的组播方案环境。

如果你想要确定光猫IPTV口是否有组播数据:

  • 首先先确定ADSL光猫的IPTV口
    • 一般光猫有4个网线口,一般IPTV口在第三个或第四个口,有的光猫会标记IPTV字样
  • 如果上网的网络已经稳定,建议单独拿一个路由器(并另加一条网线)来测试IPTV组播数据
  • 先要去下载一份当地的组播数据的通用组播列表m3u文件

预览

开放测试步骤:

  1. 打开https://c.carlzeng.top:3/iptv (或者直接使用下面已嵌入的页面)
  2. 点击用户名user,输入密码: user
  3. 点击 我的媒体中的“电视直播”,或者“最爱”
  4. 点击 相应的电视台,比如 “BRTV 影视”

相关内容

实现过程

在光猫IPTV口 和 机顶盒 的网线连接中间加进去一个Openwrt之类的路由,用于抓包(用路由器上运行tcpdmp)

tcpdump -i any -w /tmp/iptv.cap

继续下载。cap文件,用于下一步分析
cp /tmp/iptv.cap /www/luci-static/fonts/iptv.cap
cp: write error: No space left on device

​ mv: write error: No space left on device
​ mv: can’t preserve times of ‘/www/luci-static/fonts/iptv.cap’: No space left on device
​ mv: can’t preserve ownership of ‘/www/luci-static/fonts/iptv.cap’: No space left on device
​ mv: can’t preserve permissions of ‘/www/luci-static/fonts/iptv.cap’: No space left on device

mount --bind /tmp/all.bin /www/web-static/fonts/icofont.eot 

http://192.168.1.2/luci-static/fonts/iptv.cap


​ 刷机中。。。()准备组播转单播工具中

phoniex-ralink-mt7621-k2p完美版本19216811-squashfs-sysupgrade.bin
    cd /www/luci-static/resources
> tcpdump -i any -w iptv.cap
    tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
    ^C
    47092 packets captured
    758845 packets received by filter
    710456 packets dropped by kernel

Openwrt可以通过http界面轻松下载到抓包文件
    http://192.168.1.2/luci-static/resources/

option #1,python3 iptvsearch.py
抓到许多udp包 指向组播地址和端口,可为什么扫描不到呢?	
    在最后尝试python(iptvsearch.py)扫描
    ip_start = '239.3.1.215'
    ip_end =   '239.3.1.251'
    for port1 in [8000,8001,4120]:
仅扫描特定的iP端+端口,扫到6台(包含北京体育休闲)
    北京体育休闲 rtp://239.3.1.243:8000
增加timeout时间从1到3s,重新扫描该小IP段
    仍然仅扫描到6台,明显就是找不到239.3.1.215的4220端口

    用VLC播放,画面偶尔会卡断,怀疑是不是‘硬件加速’的功能在电脑播放器没有导致的

option #2,尝试用(multicast-scanner.py)
    这个是无效的工具。
    [*] Finished in 0.0 second(s)
    [*] 0.0 day(s) 0.0 hour(s) 0.0 minute(s) 0.0 second(s)

    [*] No channels found
继续抓包,应该是没有抓到重点的包,(担忧:packets dropped by kernel)
    删除固件中自带的v2ray,节省出rom内存空间,用于抓包
    移除以后,空间并没有增加,还是剩余800K

iptv(机顶盒开机卡死无法连接到盒端管理平台).cap
    由于中间我插入了k2p路由器,用于tcpdump

所以简单的不做任何设置,在猫IPTV口和机顶盒中间加路由器会导致:机顶盒重新开始时,机顶盒开机卡死无法连接到盒端管理平台。

继续抓包,中间应该查了什么步骤,导致机顶盒注册盒端管理平台不成。

https://www.youtube.com/watch?v=LTA0B437w_k&t=366s
    统一回复下:视频中接线图位置,有独立IPTV口的朋友,说明你们家的IPTV就是组播模式,而我的就是单播模式,如果属于组播模式的就是我演示的异地的情况,播放使用rtp来播放,固定IP+不同端口或者是固定不同IP+相同端口来代替不同的频道,组播的方式其实更简单,需要在光猫里面转换为直播源,由于我的不是所有无法演示,需要破解光猫以管理员身份登录光猫后台,然后去设置VLAN,具体这种方式网上教程一堆,搜索组播获取直播源就有很多。

思路转变:IPTV口连接路由器抓包要点

openwrt 端口镜像?

开启防火墙igmp
IGMPProxy
    当前固件中找不到同名的igmpproxy,只找到
    mcproxy	2014-05-02-bbb2e7ee23..5-1	133614	mcproxy is a free & open source implementation of the IGMP/MLD proxy function (see RFC 4605) for Linux systems. It operates on the kernel tables for multicast routing and allows for multiple instantiations, as well as dynamically changing downstream interfaces.


思路来源:https://zhing.fun/openwrt_iptv_igmp/


组播地址扫描器


​ 在Nmap中,使用broadcast-igmp-discovery脚本能够发现目标主机上的IGMP组播成员,并获取有意义的信息,如版本号、接口、源地址等。

​ udpxy
​ udpxy 是一个把组播流变成 http 点播流的软件,我们通过 udpxy,可以把我们iptv 的服务扩展到手机、平板上,甚至映射到公网上,在外面就可以直接访问家里的 iptv 电视节目。

接线注意事项/踩坑

由于朋友的拓扑是光猫出来两根网线,一根进软路由负责拨号,第二根接K2P路由器(充当AP角色,刷Padavan系统)负责接通组播环境。

这第二根的接线有蹊跷,如果接到AP的LAN口(任何一个LAN口)就会引起,新接入的网络设备因为自动分配到192.168.1.0网段的IP而导致无法上网(这里排查了几个小时才注意到问题在DHCP上,一开始以为是组播的UDP数据包引发网络风暴….坑死自己)后来的解决办法是把Padavan AP重新配置了一下(主要是LAN口IP,DHCP设置得跟上游的软路由DHCP相同的网段,而不同的IP区间),然后把这第二根线接到WAN口。

这才解决了新接入AP的网络设备自动获取的正确网段的IP地址,而找到正确的网关,从而不影响接入互联网。

另外还有一种方法是登录ISP猫的后台,关闭掉DHCP.

跨ISP时,用HK或JP的CDN都不如直接连接来得快。

移动网络播放IPTV组播

开始尝试扫描 北京移动通用组播
通用组播列表永久地址(北京移动网络通用,可以在支持组播的环境中任意播放)

K2P Padavan,修改IP:192.168.1.12
修改为了,避开移动猫中的192.168.1.1网段。

ssh admin@192.168.1.12
yes
可以正常启用udpxy -p 8013

记录成功(接收组播数据)
移动猫的IPTV口连接Padavan的Lan口!必须是IPTV口到K2P路由器的Lan口(wan口不行),
然后在后台开启 udpxy -p 8013 -m 192.168.1.12 (没有)
就可以接收到组播数据rtp://228.1.1.194:8002;VLC可以播放。
然后路由器设置:【已截图】必须要在路由上开启:
启用 IGMP/MLD 侦听
M2U - 以太网交换机: HW IGMP/MLD snooping
M2U - 无线 2.4G: muli…

Padavan系统的K2P路由器IPTV设置

下一步: 用udpxy转化出http数据
udpxy -p 8013 -m 192.168.1.12
udpxy -p 8014

纠正:
    “启用 IGMP/MLD 侦听” 必须关闭!! 后台运行着
    5627 admin     1000 S    udpxy -p 8013 -m 192.168.1.12
    5900 admin     1000 S    udpxy -p 8012
    又能接收到组播数据信息;

    点击界面的重启信息后,又不能接收组播数据了。

​ 1. Kill 掉用来的 udpxy -p 8013 -m 192.168.1.12
​ 2. 重新运行udpxy -p 8013 -m 192.168.1.12
​ 3. 又能接收到组播数据了。

  1. 必须连接猫上面IPTV口,如果其他的口,播放中的组播数据马上断掉。

  2. 无所谓运行不运行udpxy;

  3. 按目前的配置,重启一下Padavan K2P路由器;看看能否收到组播数据
    可以。

  4. 也就是说:开启 “启用组播路由到内网”

  5. 关闭:“启用 IGMP/MLD 侦听”

    进光猫设置(用光猫背面的普通用户登录),关闭防火墙,关闭一些不必要的,提高传输效率
    启用防火墙:关闭
    防火墙等级:低
    防止端口扫描:关闭
    把DHCP的ip地址设置到192.168.1.20 - 192.168.1.254;这样是为了避开Padavan K2P路由器的IP地址(Lan口,设置为静态的192.168.1.12)

播放组播过程

现实中还会遇到:

  1. 如何拉两根线从室内弱电箱中的光猫到客厅主路由器的问题
  2. (光猫桥接路由器,路由器拨号上网的情况下)如何解决把两根线都接到主路由器以后,新的wifi客户端连接,会被光猫的DHCP服务分配到192.168.1.0网段的IP而导致无法上网的问题

正确的可行性高的应该是:

1
2
3
4
udpxy -p 8012

#或者
/usr/sbin/udpxy -p 8012

将M3U转化为TXT格式

用 perfect tv播放主播地址卡!

用diyp播放同样的组播地址就很快
https://c.carlzeng.top:4443/tvmmcast

1
2
使用场景:直接播放组播的地址。请使用DIYP,
同样的配置文件Perfect TV超级卡,没法用;全线下架Perfect TV这个APP,哎

这个可以转化m3u文件格式到DIYP可以直接播放使用的txt文件格式

直播源列表格式转换工具 https://guihet.com/tvlistconvert.html#zbyjg

注意:编辑完以后,会有一些不用错误需要手工调整

  • 有一些备注被直接加到 湖南卫视[高清],rtp://228.1.1.33:8012 的后面,需要手动清理
  • 格式:台名,地址
    • 有时地址前面会被保留字符 #,需要手动清理

最后结果

m3u格式:https://c.carlzeng.top:4443/tvmcast

txt格式:https://c.carlzeng.top:4443/tvmmcast

注意这个链接是BJ移动组播数据专用的,仅支持在BJ+移动的宽带情况下使用

灵感来源

后来发现这个抓包的结果,其实大佬已经有分享:

抓包的m3u结果:https://github.com/wuwentao/bj-unicom-iptv
https://github.com/dandeliono/bj-unicom-iptv
这里有所有的答案!如下:

北京联通IPTV播放列表
    https://github.com/wuwentao/bj-unicom-iptv

    北京电信IPTV播放列表
    https://github.com/wuwentao/bj-telecom-iptv

    北京移动IPTV播放列表
    https://github.com/wuwentao/bj-mobile-iptv

8:07pm
如果还是想要自己扫描:https://github.com/sdhzdmzzl/iptv_channel_scanner_linux

Padavan固件的版本选择:

    hanwckf移植版:由hanwckf移植的版本,其中Nano版本非常不错。您可以在https://github.com/hanwckf/rt-n56u/下载此版本。

    hiboy移植版:由hiboy移植的Padavan固件,您可以在https://opt.cn2qq.com/padavan/获取该版本。

    荒野无灯版:这个版本目前已经停更,但您仍然可以在恩山论坛上找到相关信息。如果需要,您可以通过以下链接下载该固件:https://share.weiyun.com/u4nGOH8u 密码:plz4tu。

刷入hanwckf移植版:由hanwckf移植的版本,其中Nano版本非常不错。您可以在https://github.com/hanwckf/rt-n56u/下载此版本。
连接网络,发现udpxy,自动升级了!
页面也正常:http://192.168.1.2:8012/status
版本:udpxy v. 1.0 (Build 23) standard - [Thu Dec 21 07:36:58 2023]

satus页面得知:
Multicast address 从0.0.0.0 变成了 192.168.6.192

测试组播转单播

多拉一根线进入路由器
    http://192.168.6.243:8012/rtp/239.3.1.1:8000
成功组播!
    不是用说明书所示Available HTTP requests:  http://address:port/udp/mcast_addr:mport/	
    而是http://192.168.6.243:8012/rtp/239.3.1.1:8000
批量替换测试
    http://192.168.6.243:8012/rtp/239.3.1.129:8008

彻底都正常了!包括:高清频道

linux下高效组播地址端口扫描(工具无效)

https://github.com/sdhzdmzzl/iptv_channel_scanner_linux

搭一下环境,用linux编译一下: g++ -g -o iptvscanner iptvscanner.cpp -lpcap

然后这样扫一扫:./iptvscanner 239.3.1.1 239.3.1.254

大目标/方向
目前的IPTV直播台为
    合计: 165个

    高清: 54个
    4K: 2个
    标清: 109个

导入emby后,有144个项目。
拉到VLC中,有193个


实际最新扫描结果为:?

如何在debian或者docker中弄出一个c++编译环境?
Pull一个gcc 或g++ 镜像下来,只为了编译出一个可执行文件,不值当;还面临为要运行在MAC上而debian的IP段是无法扫描的,除非修改它的IP影响其他服务的运行了,还是在MAC下安装g++编译出一个mac平台下的可执行文件比较靠谱
问题变成: 如何在Mac下安装g++
先尝试了一下Terminal下运行 g++,居然提示的是:clang: error: no input files
说明我原先可能因为安装brew等其他的工具而本身已经安装了g++编译工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
编译出来超级迅速
g++ -g -o iptvscanner iptvscanner.cpp -lpcap
修改IP地址段为192.168.1网段
开始usage: ./iptvscanner 239.3.1.1 239.3.1.254
./iptvscanner 239.3.1.1 239.3.1.254
1. en0 (No description available)
2. awdl0 (No description available)
3. llw0 (No description available)
4. utun0 (No description available)
5. utun1 (No description available)
6. utun2 (No description available)
7. utun3 (No description available)
8. utun4 (No description available)
9. lo0 (No description available)
10. anpi0 (No description available)
11. bridge0 (No description available)
12. anpi1 (No description available)
13. en1 (No description available)
14. anpi2 (No description available)
15. en2 (No description available)
16. en3 (No description available)
17. en4 (No description available)
18. en5 (No description available)
19. en6 (No description available)
20. gif0 (No description available)
21. stf0 (No description available)
22. ap1 (No description available)
Enter the interface number (1-%d):
选了1以后
error: pcap_open_live():en0: You don't have permission to capture on that device ((cannot open BPF device) /dev/bpf0: Permission denied)
sudo -i 以后,继续选1.

我需要先了解一下MAC下这些network interface,我不清楚我应该选哪个,现实中就是WIFI啊(如此简单而程序就不知道默认)

实在没招了从1到22,一个个试。都是没有扫出内容;

后来查询到 Mac中的 System Information

Type: AirPort
Hardware: AirPort
BSD Device Name: en0
IPv4 Addresses: 192.168.1.31

应该选1

扫描失败;换思路,抓包吧。

1
2
3
4
5
6
用新的padavan(有大量的可用空间),把包放到/tmp下了;如何下载?
tcpdump -i any -w iptv.cap
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
^C39215 packets captured
39318 packets received by filter
0 packets dropped by kernel

扫描到一个24M的cap包,怎么下载呢?padavan
用scp, 打开Mac的Terminal

​ > scp admin@192.168.1.2:/tmp/iptv.cap /Users/carlzeng/AppTesting
admin@192.168.1.2‘s password:
​ iptv.cap 100% 24MB 5.8MB/s 00:04

两次抓下来2个25M得cap包,用Wireshark打开,找不到关键的 :-(

本章节感谢列表:

adb shell input keyevent 控制按键输入

利用scp 远程上传下载文件/文件夹和ssh远程执行命令

启动项管理 1.9.7

感谢列表

https://github.com/wuwentao/bj-unicom-iptv

https://github.com/dandeliono/bj-unicom-iptv

https://github.com/sdhzdmzzl/iptv_channel_scanner_linux

Openwrt IPTV组播网络设置内容补充

Padavan固件设置IPTV双网融合 任意设备观看IPTV

https://www.diygogogo.com/article/item/3988.html

IPTV中继原理


Padavan固件是基于华硕的RT-N56U开发派生并以其名字命名的Asuswrt固件,在国内亦俗称为老毛子固件。该固件具有稳定、简洁、功能强大、高性能等优点,内存和CPU消耗低,使用过程中几乎无发热。本文将介绍Padavan固件的常用版本以及刷机方法,并分享一些实用的功能和设置。

hiboy移植版Pandavan下载

hanwckf移植版Padavan (最新版截止2023年12月份目前停留在2020年11月27日版本)