Зачем всё это нужно
У меня дома перестало работать iptv с одного известного сервиса (где за 1 доллар в месяц тебе дают много-много каналов). Попробовал через vpn - всё работает. Но не буду же я весь трафик с роутера кидать через vpn?
Сам я использую для выборочного обхода свою статью. Осталось узнать как найти все ip адреса, которые используются в моём iptv-плейлисте.
Исходные данные
Исходные данные это iptv плейлист. Выглядит он примерно вот так:
#EXTM3U
#EXTINF:0 tvg-rec="7",Первый канал FHD
#EXTGRP:Общие
http://mydomain.mysite.net/iptv/MyKey/240/index.m3u8
#EXTINF:0 tvg-rec="7",Первый канал HD
#EXTGRP:Общие
http://mydomain.mysite.net/iptv/MyKey/204/index.m3u8
#EXTINF:0 tvg-rec="0",Первый канал HD 50
и таких строк у меня 2 с лишним тысячи. Осталось в каждом из них посмотреть какие адреса используются
Программа
В итоге я написал программку на python, которая в выдаёт два множества. Первое - это все ip адреса, перечисленные в файле. Второе это множества, которые свёрнуты в CIDR. Эти множества это весь диапазон адресов 192.168.0.0 - 192.168.255.255, где 192.168 это нужная сеть из iptv-файла.
Код программы:
import codecs
import urllib.request
f = codecs.open( "1.m3u8", "r", "utf_8_sig" )
myset=set()
myset2=set()
#f=open("1.m3u8")
i=0
for line in f:
if (line.find("http")>-1):
i+=1
site =line.strip()
res = urllib.request.urlopen(site).readlines()
for sites in res:
sites=str(sites)
if (sites.find("http") > -1):
s=sites[2:-3].replace("http://","")
mas=s.split("/")
ip=mas[0]
myset2.add(ip)
ips=ip.split(".")
myset.add(ips[0]+'.'+ips[1]+'.0.0/16')
print(i)
print(myset2)
print(myset)
На выходе
Я использовал второе множество (CIDR) для использование его в файле unblock*.txt из исходной статьи