iptv через VPN. Получение ip-адресов

Зачем всё это нужно

У меня дома перестало работать 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/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *