среда, 8 июня 2016 г.

сканирование мультикаст адресов через udpxy

где то с годик назад купил один провайдер бюджетненький роутер SNR-CPE-W4N, был взят в тест, оказлось
- вполне сносная китайскаая железка,
- довольно бюджетная
- приличный функционал, по сравнению с тем же [d,TP] - link

саме интересное что у роутера есть доступ по ssh есть мануал на страничке поддержки с описанием как окирпичить роутер и как его починить. отельно стоит отметить наличие на роутере udpxy демона, но беда в том что на 15 страничке мануала есть картинка где предлагается развернуть udpxy и в WAN и в LAN, хотя корректно написано жирным что не советуют так ставить wan, если вообще знаешь что делаешь

что получили в итоге..
есть несколько человек которые платно настраивают роутеры, ну мануалы как правило читают только после появления проблемы, а они вообще настраивали "по картинкам" , мало того что сами так настраивали так еще и учили настравивть уже по своему "Мануалу" "исправленному"

в итоге все эти настроенные роутеры генерировали исходящий трафик с тв каналами в мир, у кого то только бесплатное неинтересное тв , а у кого то находилось что то сносное типа порева HD каналов

списки каналов быстренько разлетелись по миру , и некоторые пользователи умудрялись отдавать по 8 Тб в месяц

вот небольшой мануальчик как можно найти эти роуетры и небольшое дописание как просканить плейлист провайдера на наличие каналов через прокси тупого пользователя

для начала возьмем сетку провайдера (это сами как нибудь, диапазоны адресов дают команды whois), и просканим ее на 81 порт, удалим пустые и ненужные  строки и выведем все это в файл

nmap -PN -p 81 --open -n 37.225.0.0/24 | grep -v "filtered\|closed" | grep -vE "(^#|^$)" > /var/www/tmp/scan.txt
 
мануал команды nmap описан в инете, далее вытащим из этого списка только ip адреса

grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" scan.txt > ip.list

зная что udpxy имеет страничку "udpxy status" то будем ориентироваться на нее, так как на 81 порту может весеть какой то отличный сервис и он выдаст ошибку отличнуюю от 200
 
for i in `cat ip.list`; do wget --tries=1 -T 1 http://$i:81/status -o check_"$i" -O /dev/null; done

это в исполянемой директории выдаст нам  кучку файлов с названием "check_" в окончании с ip адресом в тексте которого будет процесс скачивания странички wget-ом
и на последок грепнем кто из списка этих файлов ответил  на этот запрос что "ок" в примере все файлы лежали в директории /tmp и выводились в фалйик ALL

grep -r "200 OK" /home/filalex/tmp/ > /home/filalex/ALL

после тем же самым грепом выдергиваем из этого файла только ip адреса и получаем уже список который можно юзать , так же скриптом при помощи sed можно получить вменяемый список каналов и выплюнуть его в m3u длч просмотра. Стоит иметь в виду что некоторые устройства сами прокидывают 81 порт и отвечают http кодом ok 200 на страничку статуса, но в браузере оказывается какая то логин страничка того или иного девайса.. но как показала практика таких примерно 2% от ответивших из /17 ой сетки, тоесть из 32000 роутеров


тут появляется вопрос, а допустим есть какие то статусные транички но в интернете и неизвесны мультикаст группы которые вещает тот или иной провайдер, но есть желание поглядеть тв и пара часов на отладку скрипта для скана ... как показала практика я оказался не первый и в этой статье есть баш скрипт "на коленке" коротый сканит и если канал есть то сохраняет картинку в png ше с именем мультикаст адреса канала
сам скриптик

#!/bin/bash

for i in $(seq 1 255); do
    IP=239.255.2.$i
    URL=udp://@$IP:5500
    echo "== $URL =="
    mplayer -ac none -really-quiet -vo png -frames 1 $URL 2>/dev/null
    mv 00000001.png $IP.png
done 
 
 
далее только дело времени и желания привести это все к вменяемому виду и запустить на поток сканирование интернета или указанных сеток для поиска бесплатного контента.

например мы, зная струткуту строки меняем строку URL на

 URL=http://адрес_прокси:порт_прокси/udp/$IP:4000

получаем сканирование непосредственно каналов, а если дописать еще одну переменную, то можно сканить не один октет а сразу несколько
 
for y in $(seq 1 255); do


так как провайдеры бывает разделяют подписки по группам третьим октетом и управляют доступом через акцесс листы комуттаторов