酒店直播源定时更新脚本

第一篇博客,欢迎指教

起因

之前瞎逛发现一个博客写了一篇关于酒店iptv源的文章,才发现原来酒店源一直很稳定,清晰度不错(8M),只是每天IP都会变化,不过IP只会变化最后一位(如192.168.1.XX)

所以根据这一特性,我们只用写一个脚本放在服务器上每天定时运行就可以得到一个长期稳定的直播源了(原文也给出了一些方法,但不是很完善)

扫源

首先找到一个还不错的酒店源,如:http://192.168.1.36:9901//tsfile/live/0001_1.m3u8

打开终端,输入apt update更新一下软件源,接着输入apt install nmap安装nmap, 还要用到python,不过一般lniux发行版都有预置,不用另行安装,我们的脚本用的都是python内置的库,不需要另行安装第三方库

首先我们验证一下这个酒店源的IP,终端输入:

nmap 192.168.1.0/24 -p 9901 --open | egrep - o "192.168.1.[0-9]+"

终端输出:

192.168.1.22
192.168.1.78

可能会输出多个IP,这些IP一般都能使用

这条命令是验证192.168.1.0/24这个网段上9901端口open的IP,也就是能够观看直播的IP

接着我们将得到的IP替换在网上找的源IP,如:将192.168.1.36替换为192.168.1.22得到http://192.168.1.22:9901//tsfile/live/0001_1.m3u8

打开黑鸟播放器扫源工具,扫源教程点我,扫完之后的到一个完整的txt播放列表,如:

··· ···
001,http://192.168.1.22:9901/tsfile/live/0001_1.m3u8
002,http://192.168.1.22:9901/tsfile/live/0002_1.m3u8
003,http://192.168.1.22:9901/tsfile/live/0003_1.m3u8
··· ···
049,http://192.168.1.22:9901/tsfile/live/0019_1.m3u8
··· ···

可以稍加转换为m3u列表或其他匹配你所使用的播放器的列表。列表转换工具点我,在线转换点我,感谢黑鸟博客

然后把里面的频道名备注好方便观看。一般这个IP明天就会失效,所以接下来我们需要写一个脚本,每日定时更新源的IP(创建的直播列表,除了IP的最后一位会每天变化外,其他都不会变)

至此,列表制作完毕,我把列表放在/var/www/html/iptv.txt,到时候起一个http服务,方便其他设备获取

脚本

思路明确,开搞:

vim update_iptv.py
import re
import os

r = os.popen('nmap 192.168.1.0/24 -p 9901 --open|egrep -o "192.168.1.[0-9]+"').read()
#获取能够观看直播的IP并存储为string
new_IP = r.split("\n")[0]
#将获取到的文本利用split函数拆分为列表,并取列表的第一个IP

with open(r'/var/www/html/iptv.txt', 'r',encoding='UTF-8') as file:
#打开iptv源列表,/var/www/html/iptv.txt改为你的iptv源存放的位置
        data = file.read()

new_list = re.sub(pattern='192.168.1.[0-9]+',repl=new_IP,string=data,flags=re.S)
#利用re库的sub方法将失效的旧IP替换为刚才获取的新IP

with open(r'/var/www/html/iptv.txt',"w",encoding="utf-8") as file: 
    file.write(new_list)
#更新iptv列表,/var/www/html/iptv.txt改为你的iptv源存放的位置

至此脚本编写完毕!把这个脚本随意放到一个位置,我这边放在/root/update_iptv.py

crontap定时执行脚本

终端输入:

crontap -e 
#第一次运行需要选择编辑器,选择你常用的即可
然后在最后添加一条
0 6 * * * /usr/bin/python3 /root/update_iptv.py
#每日6点执行该python程序,/root/update_iptv.py为python程序位置

题外话
菜鸡学习笔记,欢迎指导!

apache部署直播源

终端输入apt install apache,将/var/www/html目录下的文件清空,然后将直播源放到/var/www/html目录下,浏览器输入服务器的IP即可访问:

在你的播放器输入例如:http://192.168.1.11/iptv.txt即可加载列表

re库的使用

函数 说明
re.search() 从一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
re.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall() 搜索字符串,以列表类型返回全部能匹配的子串
re.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

Python os模块的使用

nmap的使用

nmap -sT 目标ip //TCP连接扫描,不安全,慢
nmap -sS 目标ip //SYN扫描,使用最频繁,安全,快
nmap -Pn 目标ip //目标机禁用ping,绕过ping扫描
nmap -sU 目标ip //UDP扫描,慢,可得到有价值的服务器程序
nmap -sI 僵尸ip 目标ip //使用僵尸机对目标机发送数据包
nmap -sA 目标ip //检测哪些端口被屏蔽
nmap 目标ip -p //对指定端口扫描
nmap 目标网段 //对整个网段的主机进行扫描
nmap 目标ip -oX myscan.xml //对扫描结果另存在myscan.xml
nmap -T1~6 目标ip //设置扫描速度,一般T4足够。
nmap -sV 目标ip //对端口上的服务程序版本进行扫描
nmap -O 目标ip //对目标主机的操作系统进行扫描
nmap -sC 目标ip //使用脚本进行扫描,耗时长
nmap -A 目标ip //强力扫描,耗时长
nmap -6 ipv6地址 //对ipv6地址的主机进行扫描
nmap -f 目标ip //使用小数据包发送,避免被识别出
nmap –mtu 目标ip //发送的包大小,最大传输单元必须是8的整数
nmap -D <假ip> 目标ip //发送参杂着假ip的数据包检测
nmap --source-port //针对防火墙只允许的源端口
nmap –data-length: 目标ip //改变发生数据包的默认的长度,避免被识别出来是nmap发送的。
nmap -v 目标ip //显示冗余信息(扫描细节)
nmap -sn 目标ip //对目标进行ping检测,不进行端口扫描(会发送四种报文确定目标是否存活,)
nmap -sP 目标ip //仅仅对目标进行ping检测。
nmap -n/-p 目标ip //-n表示不进行dns解析,-p表示要
nmap --system-dns 目标ip //扫描指定系统的dns服务器
nmap –traceroute 目标ip //追踪每个路由节点。
nmap -PE/PP/PM: 使用ICMP echo, timestamp, and netmask 请求包发现主机。
nmap -sP 目标ip //主机存活性扫描,arp直连方式。
nmap -iR [number] //对随机生成number个地址进行扫描。

crontap的使用

大功告成!!!(该教程未完成)