我的机顶盒的内网ip地址是192.168.2.239,通过设置filter:ip.src==192.168.2.239能够过滤得到所有从机顶盒向外发出的请求。然后我们反复通过前面提到的方法,将这个ip地址对应网段(通常是/24或者/16)添加到静态路由表中。
注:你自己抓包得到的数据应该没有我得到的这么多。因为机顶盒的开机鉴权是个串行的过程,由于没有添加路由,每次机顶盒都会卡在其中一个步骤无法继续鉴权,所以需要先第一次抓包,抓到第一个地址添加到路由表,然后抓第二次包,得到第二个地址添加到路由表,以此类推。例如在上图的抓包信息中,机顶盒在发出第一次连接到210.13.13.14时就会卡住,此时你需要将210.13.0.0/16加入到静态路由表中,然后重新抓包才能获取到后面的信息。
经过我的测试和优化,我找到的路由表主要是下面几条。如果你是北京联通用户(我在海淀区),有可能设置成下面的信息就可以直接使用,但如果这些信息不可用,那你可能就要用上面介绍的方式反复抓包获取每一个专网内的地址:
上面61.135.0.0/16的那一条路由不要加!这个是我抓包的时候搞错了,加了这条路由会导致baidu主页上不去。。。然后重启iptv的端口、重启igmpproxy服务,然后机顶盒应该就能正常开机并使用了。
如果发现机顶盒能开机进入主界面、能够换台、能够正常获取频道信息、节目单,但节目始终是黑屏,那说明igmpproxy没有正常启动。如果开机都无法完成机顶盒的登陆,说明上面的路由表配置仍然存在问题。
获取IPTV频道列表的脚本
(下面内容仅限北京联通IPTV使用,其他省市可能要对脚本做一些修改)
其实到上面一节为止,只要使用网友提供的播放列表就能够直接在局域网内使用机顶盒、直接用任意设备播放视频了。那么,这个列表是怎样获取的呢?其实我们只要仔细分析之前获得的抓包文件就能明白其中内容了。
重新看一下之前的抓包文件,然后设置一下filter:((ip.src==192.168.2.239) || (ip.dst==192.168.2.239)) && http这样我们就只关注机顶盒收发的http数据包:
从数据包中我们能直接找到最关键的那一条HTTP Request:向http://210.13.0.147/bj_stb/V1/STV/