之前抓取IPTV播放列表都是用Openwrt的端口镜像,配合台式机去抓包的,但是每次这样弄都好麻烦了,路由器,机顶盒,电脑都要用网线连接在一起,主力机变成XPS 15后,没有网口就显得更麻烦了。
此时就想起tcpdump
了,这货不是能把所有数据包全抓下来吗,在路由器搞一搞就好了!
家里用的是软路由,弄个tcpdump还是很简单的,但是老人家里用的是K2P,还没硬改过的,装这个包和对应依赖空间有压力啊。。。
Google一番,没找到能用的tcpdump静态链接
版本,又是DIY时刻了。
K2P刷的是高恪的固件,基于openwrt 14.07
的,找到对应SDK和Toolchain,
参照之前的高恪插件编译教程弄起来了,却发现没有tcpdump
这个包,搜索一番得知在base这个repo,SDK默认是没有添加这个repo的.
Openwrt 14.07
也算是年代久远了,费劲一番才找到这个repo的源
git://git.archive.openwrt.org/14.07/openwrt.git
添加后就是常规操作
./script/feeds update
./script/feeds install
先按照官方动态链接的方式编译一遍看会不会出错。
make -j16 package/network/utils/tcpdump compile
成功编译后,看到依赖库libpcap把静态链接库也编译出来了。
接下来就是尝试编译静态链接的tcpdump了
只需要对Makefile稍作改动
49 CONFIGURE_ARGS += \
50 --without-crypto
51
52 ifeq ($(CONFIG_IPV6),y)
53 CONFIGURE_ARGS += \
54 --enable-ipv6
55 endif
56
57 TARGET_CFLAGS += -ffunction-sections -fdata-sections
58 TARGET_LDFLAGS += -Wl,--gc-sections
59
60 CONFIGURE_VARS += \
61 BUILD_CC="$(TARGET_CC)" \
62 HOSTCC="$(HOSTCC)" \
63 td_cv_buggygetaddrinfo="no" \
64 ac_cv_linux_vers=$(LINUX_VERSION) \
65 ac_cv_header_rpc_rpcent_h=no \
66 ac_cv_lib_rpc_main=no \
67 ac_cv_path_PCAP_CONFIG=""
68
69 MAKE_FLAGS :=
改成
49 CONFIGURE_ARGS += \
50 --without-crypto
51
52 ifeq ($(CONFIG_IPV6),y)
53 CONFIGURE_ARGS += \
54 --enable-ipv6
55 endif
56
57 TARGET_CFLAGS += -ffunction-sections -fdata-sections
58 TARGET_LDFLAGS += -static -Wl,--gc-sections
59
60 CONFIGURE_VARS += \
61 BUILD_CC="$(TARGET_CC)" \
62 HOSTCC="$(HOSTCC)" \
63 td_cv_buggygetaddrinfo="no" \
64 ac_cv_linux_vers=$(LINUX_VERSION) \
65 ac_cv_header_rpc_rpcent_h=no \
66 ac_cv_lib_rpc_main=no \
67 ac_cv_path_PCAP_CONFIG=""
68
69 MAKE_FLAGS :=
再次执行编译命令就可以了。
make -j16 package/network/utils/tcpdump compile
编译好的静态链接tcpdump和tcpdump-mini二进制附上。
在路由器上开始抓到包
tcpdump -i br-lan -s 0 -w iptv.pcap host 192.168.2.113
完了用scp把抓包文件传回到Mac上,直接用Charles就可以打开。
我这边都是rtsp协议的直播,所以直接查找关键词rtsp
就可以找到列表页了,找到以后就是用正则提取一下电视台名称
和播放地址
。
用到的正则也很简单ChannelName="(.*?)".*ChannelURL="(?:.*?((?:rtsp|http).*?(?:smil|m3u8).*?END.*?))"
,最后就是根据个人习惯调整一下列表的顺序了。
广东电信这里抓到的播放列表在此。
还不快抢沙发