Зачем всё это нужно
У меня дома перестало работать 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 из исходной статьи
ссылка на оригинал статьи https://habr.com/ru/post/704744/