找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 3940|回复: 18

[iptv信源 资源分享或寻求] 江苏电信IPTV回看地址探究 (技术分析)

[复制链接]
本帖最后由 op351 于 2023-12-1 08:14 编辑

地区: 苏州
盒子型号:创维E900-S
IPTV原始连接方式:通过光猫的IPTV口进行DHCP分配(IPOE)

步骤1
将iptv盒子插入带有端口镜像和vlan划分功能的网管交换机或其他带有此功能的路由器和特殊设备
这里以网件交换机为例
1.划分vlan,为光猫的iptv口和iptv盒子划分单独的vlan

2.端口镜像


步骤2
电脑下载Wireshark软件,选择电脑网卡


步骤3
打开电视,打开iptv盒子,看30秒直播,然后点击回看,选择节目回看,看30秒,关闭盒子,关闭电视。

步骤4
Wireshark停止捕获


点击文件 保存 以备后面慢慢研究


步骤5
1.将光猫的iptv网线接入openwrt路由器,接口命名为iptv,安装udpxy,实现直播源igmp转换为http(站内教程很多,自行参考实现)
2.路由器安装mwan3,对流量进行分流,将iptv专网流量导入到iptv口输出(站内教程很多,参考双wan,多wan,多运营商出口分流之类的教程)

3.在mwan3管理界面将以下目标地址分流到iptv专网



4.在DHCP/DNS选项卡中写入iptv专网dns



步骤6
分析流量,在PC端重现iptv获取回看地址流程。
1.搜索DHCP,获取盒子IP

2.搜索盒子的HTTP和RTSP流量
搜索关键词为 ip.addr == 盒子IP && (http || rtsp)
滚动到最上面 找到/registerData/registerData.ac 右键选择追踪流 HTTP Stream

打开之后会看到如下报文
  1. <font size="3"><font size="3">POST /registerData/registerData.ac HTTP/1.1
  2. Connection: close
  3. Accept: */*
  4. Content-Type: application/x-www-form-urlencoded; charset=utf-8
  5. Content-Length: 203
  6. Host: 180.100.136.13:9000
  7. Accept-Encoding: gzip
  8. User-Agent: okhttp/3.4.1

  9. opt=100&data=xxxxxx|10.x.x.x|0|xxxxx-xxxx-xxxx-xxxx-xxxxxxxxx||xx:xx:xx:xx:xx:xx|20xx|1.0.15|E900|4.4.2|0|SKYWORTH|Hi3798MV100|xxxx|xxxx|1920*1080|0|QM|3.1.1.11.02</font></font>
复制代码
这里的10.x.x.x即为iptv的ip 在后面的重现中,请替换为路由器iptv口的最新ip
data=xxxxx中的xxxx为机顶盒背后贴纸上的序列号
xx:xx:xx:xx:xx:xx为机顶盒mac地址



重现软件选择postman,方便后期制作脚本直接导出curl或python代码。



重现过程中请注意将原始报文中http请求头,报文body进行复制,并选择http method为post
点击send
如果返回值为以下数据,则证明mwan3分流正确

我们移步下一个请求
url为/auth?UserID=iptv账号&Action=Login&Mode=MENU
  1. <font size="3"><font size="3">GET /auth?UserID=iptv账号&Action=Login&Mode=MENU HTTP/1.1
  2. Host: itv.jsinfo.net:8298
  3. Connection: keep-alive
  4. Pragma: no-cache
  5. Cache-Control: no-cache
  6. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  7. User-Agent: Mozilla/5.0 (X11; Linux x86_64; SkyworthBrowser) AppleWebKit/534.24 (KHTML, like Gecko) Safari/534.24 SkWebKit-JS-CTC
  8. Accept-Encoding: gzip,deflate
  9. Accept-Language: zh-cn,en-us,en

  10. HTTP/1.1 200 OK
  11. Server: Apache-Coyote/1.1
  12. Content-Type: text/html;charset=gb2312
  13. Content-Length: 706
  14. Date:

  15. xxxxxxAuthentication.CTCGetAuthInfo('xxxxxxxxxxxxxxxxxxxxxxxxx')xxxxxxxxxxxx</font></font>
复制代码
这一步中出现了一个重要方法Authentication.CTCGetAuthInfo('xxxxxxxxxxxxxxxxxxxxxxxxx')
我们要使用这个方法的入参xxxx来生成后面请求中要用到的UserToken

生成UserToken的方法论坛也有不少帖子,其中核心就是获取iptv盒子系统里的密码字段,然后利用密码对字段“任意8位$CTCGetAuthInfo入参$iptv账号$序列号$ip地址$mac地址$$CTC”进行加密,密文则为UserToken
获取iptv盒子系统里的密码字段的手段有两种.
1.开启盒子ADB,使用公对公USB线对盒子进行adb连接,从文件系统中获取密码,顺带拆包iptv软件,获取加密算法。
2.在已知密码为8位纯数字和加密算法的情况下进行爆破。
这里我们选择第一种方法,
(以下内容机顶盒均不需要联网,放电脑边上插开机即可)
盒子开启ADB的方法为按设置按钮,输入密码6321,切到其他设置,系统升级,按右方向键直到出现USB调试
开启ADB后,使用USB线将盒子与电脑连接,usb线可以自购,也可以剪两条四芯usb线将两个公头连接到一起。
在电脑上下载ADB浏览器 网址为https://github.com/Alex4SSB/ADB-Explorer
打开软件 将目录定位到/mnt/skparam

右键pull到本地电脑目录
用notepad++或记事本打开即可
搜索password字段,即可得到iptv的密码
得到iptv密码后,网上搜des在线加密 运算模式选ECB 密钥为iptv密码,对“任意8位$CTCGetAuthInfo入参$iptv账号$序列号$ip地址$mac地址$$CTC”进行加密
输出密文后,我们再回到wireshark
定位url /uploadAuthInfo
报文如下
  1. <font size="3"><font size="3">POST /uploadAuthInfo HTTP/1.1
  2. Host: itv.jsinfo.net:8298
  3. Connection: keep-alive
  4. Content-Length: 344
  5. Pragma: no-cache
  6. Cache-Control: no-cache
  7. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  8. Origin: http://itv.jsinfo.net:8298
  9. User-Agent: Mozilla/5.0 (X11; Linux x86_64; SkyworthBrowser) AppleWebKit/534.24 (KHTML, like Gecko) Safari/534.24 SkWebKit-JS-CTC
  10. Content-Type: application/x-www-form-urlencoded
  11. Referer: http://itv.jsinfo.net:8298/auth?UserID=xxxx&Action=Login&Mode=MENU
  12. Accept-Encoding: gzip,deflate
  13. Accept-Language: zh-cn,en-us,en

  14. UserID=xxxxxx&Authenticator=xxxxxx&AccessMethod=dhcp&AccessUserName=xxxx</font></font>
复制代码
这里的Authenticator字段即为上一步中的密文,在重现中要进行替换,其他字段不变(注意此请求为POST)
重现后得到如下回复报文
  1. <font size="3"><font size="3">HTTP/1.1 200 OK
  2. Server: Apache-Coyote/1.1
  3. Set-Cookie: UserToken=xxxxxxxx; Path=/
  4. Content-Type: text/html;charset=gb2312
  5. Content-Length: 831
  6. Date:

  7. <html><head><script language='javascript'>function AuthFinish(){Authentication.CTCSetConfig ('UserToken','xxxxxxxx')xxxx</font></font>
复制代码
这里报文头和报文体中的UserToken为后面请求的cookie中的UserToken字段,如使用postman 则不需要自己设置 postman会自动将此cookie带入到后面的请求中



下一个请求获取另一个重要字段JSESSIONID
定位url /iptvepg/function/index.jsp?loadbalanced=  (loadbalance url)
发现此url后面还有一堆参数loadbalanced=1&UserIP=xxx&UserID=xxxx&UserToken=xxxx&STBID=xxxx&LastTermno=&easip=xxxxxx&networkid=1
这里UserIP,UserID,UserToken,STBID固定已知,easip动态未知
于是在wireshark中定位此请求的上一个请求url /iptvepg/function/index.jsp?UserGroupNMB (UserGroupNMB url)
这个url同样出现了动态字段UserGroupNMB
于是再往上定位url /getServiceList
发现此url的返回报文即为上面的UserGroupNMB url
  1. <font size="3"><font size="3">GET /getServiceList HTTP/1.1
  2. Host: itv.jsinfo.net:8298
  3. Connection: keep-alive
  4. Pragma: no-cache
  5. Cache-Control: no-cache
  6. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  7. User-Agent: Mozilla/5.0 (X11; Linux x86_64; SkyworthBrowser) AppleWebKit/534.24 (KHTML, like Gecko) Safari/534.24 SkWebKit-JS-CTC
  8. Referer: http://itv.jsinfo.net:8298/getChannelList
  9. Accept-Encoding: gzip,deflate
  10. Accept-Language: zh-cn,en-us,en
  11. Cookie: UserToken=xxxx

  12. HTTP/1.1 200 OK
  13. Server: Apache-Coyote/1.1
  14. Content-Type: text/html;charset=gb2312
  15. Content-Length: 358
  16. Date:

  17. xxxxxxx'http://eas.itv.jsinfo.net:33200/iptvepg/function/index.jsp?UserGroupNMB=xxxxxxxxx</font></font>
复制代码
所以从这个url开始重现 获取到http://eas.itv.jsinfo.net:33200/ ... rGroupNMB=xxxxxxxxx直接复制到下一个重现栏中
http://eas.itv.jsinfo.net:33200/iptvepg/function/index.jsp?UserGroupNMB重现完成后
在返回的报文中最下面即为loadbalance url 复制到下一个重现tab中
在重现loadbalance url之后 JSESSIONID已被postman自动设置到cookie中,至此最重要的两个cookie获取完成
经过实验,发现JSESSIONID有效期较短,注意经常刷新。


下面我们跳过直播源获取的url 直接进入回看环节
(2023.12.1): 不能跳过这步 这一步的认证也是需要的 请自行重现 以获取服务端认证

直播源获取主要url为
/iptvepg/function/funcportalauth.jsp

/iptvepg/function/frameset_judger.jsp

/iptvepg/function/frameset_builder.jsp

其中funcportalauth和frameset_judger为验证api 需在最后的直播源frameset_builder.jsp的前方进行请求


点播
(2023.12.1)还需再前置请求一个url /iptvepg/frame224/huikan_detail.jsp?mixno=001
点播需要请求的第一个url为/iptvepg/frame224/datas/get_channel_tvod_data.jsp

报文如下
  1. <font size="3">GET /iptvepg/frame224/datas/get_channel_tvod_data.jsp HTTP/1.1
  2. Host: 180.100.93.38:33200
  3. Connection: keep-alive
  4. Pragma: no-cache
  5. Cache-Control: no-cache
  6. User-Agent: Mozilla/5.0 (X11; Linux x86_64; SkyworthBrowser) AppleWebKit/534.24 (KHTML, like Gecko) Safari/534.24 SkWebKit-JS-CTC
  7. Accept: */*
  8. Referer: http://180.100.93.38:33200/iptvepg/frame224/huikan_detail.jsp?mixno=001
  9. Accept-Encoding: gzip,deflate
  10. Accept-Language: zh-cn,en-us,en
  11. Cookie: JSESSIONID=xxxxxx

  12. HTTP/1.1 200 OK
  13. Date:
  14. Content-Type: text/html;charset=GBK
  15. Transfer-Encoding: chunked
  16. Connection: keep-alive
  17. Vary: Accept-Encoding
  18. X-Frame-UserToken:
  19. X-Frame-UserID:
  20. X-Frame-SessionID:
  21. X-Frame-Options: SAMEORIGIN
  22. Content-Encoding: gzip

  23. [{"name":"CCTV1-HD","chanid":"ch00000000000000000297",</font>
复制代码
可以看到 此返回体中出现了电视台列表 对应的chanid等参数
下面我们以CCTV1-HD频道为例
下一个url为 /iptvepg/frame224/datas/get_tvod_programe_data.jsp?channelid=ch00000000000000000297&index=-1&channelName=CCTV1-HD
其中channelid即为前一步中的chanid,可替换为其他频道
channelName也可一并替换为前一步中的name

index代表日期 -1即代表昨天 -2为前天 -3以此类推即可
这里我们以11月29日播出的电视剧人世间第29集为例
返回体如下
  1. {
  2.         "StartTime": "09:26",
  3.         "EndTime": "10:14",
  4.         "ContentId": "11SCHEcp000011231128000228477555",
  5.         "Playable": true,
  6.         "ProgramName": "人世间(29)",
  7.         "tvod": "1"
  8.     },
复制代码
比较重要的参数为StartTime EndTime ContentId
最后一步
url为/iptvepg/frame224/get_tvod_url.jsp?contentId=xxx&channelId=xxxxx&stime=xxxx&adPositionId=xxxx
报文为
  1. <blockquote><blockquote>GET /iptvepg/frame224/get_tvod_url.jsp?contentId=11SCHEcp000011231128000228477555&channelId=ch00000000000000000297&stime=undefined&adPositionId=undefined HTTP/1.1
复制代码
将返回值中的rtsp粘贴入potplayer即可播放








本帖子中包含更多资源

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

×
我的恩山、我的无线 The best wifi forum is right here.
好高深
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

卧槽,楼主牛逼,就喜欢这种帖子啊
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

目测楼主是不干正事的程序猿

点评

还得有闲时间,如果是我,我情愿花钱买了。  发表于 2023-12-1 16:42
有道理。学习,不懂  发表于 2023-11-30 20:38
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

给楼主疯狂点赞!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

请求所有直播源的http请求消息,楼主那有么
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

楼主给整一个转发服务器吧。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

有没有整理好的华为格式的rtsp直接用呢?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

看个电视还要学成专家,太麻烦不看了。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

太有用了。谢谢大神分享这些好经验!!!!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

郁闷!完全看不懂!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

好文,学习了,正需要
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

我把这个帖子复制到了chatGPT里面,GPT又教我了一边。小白不懂,学起来太费劲了。


本帖子中包含更多资源

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

×
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

标记一下,学习,谢谢
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

目前只是会抓包直播源,填入认证信息,局域网看iptv,但是回放怎么实现不知道了
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-28 03:01

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表