вторник, 8 июля 2014 г.

Сканирование живых ip адресов, для IPTV. часть II

Для сканирования с помощью ресивера нам понадобится curl и cron, так как операция сканирования одного диапазона занимает около 16 часов, и желательно проделывать эту операцию в фоновом режиме...
curl_7.24.0-r0_mips32el.ipk
cURL — свободная , кроссплатформенная служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL
установка:

>>opkg update
>>opkg install /tmp/curl_7.24.0-r0_mips32el.ipk
>>opkg install busybox-cron
>>reboot

описание возможных команд curl http://osxh.ru/terminal/command/curl
и так имеем диапазон провайдера Ростелеком от 212.164.0.0 до 212.164.255.255, запускаем строку поиска:

>>curl -I -m1 212.164.[0-255].[0-255]:1234

где:
[0-255] диапазон адресов от 0 до 255, curl будет перебирать каждый адрес
-I -- читать заголовки (HEAD) доступные по указному ip и порту
-m1 -- Задает максимальное время в секундах выделенное на операцию, в данном случае стоит 1 секунда, если ip и порт не отвечает, запрашиваем следующее ip...
получаем в терминале такую картинку:

[205/65536]: 212.164.0.204:1234 --> <stdout>
--_curl_--212.164.0.204:1234
curl: (28) Connection timed out after 1001 milliseconds

[206/65536]: 212.164.0.205:1234 --> <stdout>
--_curl_--212.164.0.205:1234
curl: (28) Connection timed out after 1001 milliseconds

[207/65536]: 212.164.0.206:1234 --> <stdout>
--_curl_--212.164.0.206:1234
curl: (28) Connection timed out after 1001 milliseconds

[208/65536]: 212.164.0.207:1234 --> <stdout>
--_curl_--212.164.0.207:1234
curl: (28) Connection timed out after 1001 milliseconds

понятное дело сидеть перед терминалом и высматривать рабочий ip, удовольствие мало приятное, посему
запускаем curl с перенаправленным выводом в файл, например /tmp/rostelecom

>>curl -I -m1 212.164.[0-255].[0-255]:1234 >/tmp/rostelecom

получаем в файле /tmp/rostelecom, приблизительно такое:

--_curl_--212.164.2.80:1234
--_curl_--212.164.2.81:1234
--_curl_--212.164.2.82:1234
HTTP/1.1 200 OK 
Content-Type:application/octet-stream

--_curl_--212.164.2.83:1234
--_curl_--212.164.2.84:1234

строка перед HTTP/1.1 200 OK является искомым результатом

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

>>curl -I -m1 212.164.[0-255].[0-31]:1234 >/tmp/rostelecom1
>>curl -I -m1 212.164.[0-255].[32-63]:1234 >/tmp/rostelecom2
...
curl -I -m1 212.164.[0-255].[224-255]:1234 >/tmp/rostelecom16

сам cull потребляет мизерное количество ресурсов, я например использую 16 одновременно работающих, и вся операция завершается где-то за час

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

>>nohup curl -I -m1 212.164.[0-255].[0-31]:1234 >/tmp/rostelecom1 >/dev/null &

в таком виде все будет работать в фоне, соответственно можно запустить одновременно несколько подобных задач

теперь перейдем к обработке полученных результатов, имеем файл /tmp/rostelecom с таким содержимым:

--_curl_--212.164.2.80:1234
--_curl_--212.164.2.81:1234
--_curl_--212.164.2.82:1234
HTTP/1.1 200 OK 
Content-Type:application/octet-stream

--_curl_--212.164.2.83:1234
--_curl_--212.164.2.84:1234

нам нужно вычленить все ip после которых идет строка HTTP/1.1 200 OK, для этого мы используем одну из величайших вещей которые есть в linux/unix системах, а точнее потоковый редактор SED.
sed (от англ. Stream EDitor) — потоковый текстовый редактор (а также язык программирования), применяющий различные предопределённые текстовые преобразования к последовательному потоку текстовых данных.

Первоначально был написан как UNIX-утилита Ли Макмэхоном (англ. Lee E. McMahon) из Bell Labs в 1973—74 годах. Сейчас sed доступен фактически для любой операционной системы, поддерживающей работу с командной строкой.
https://ru.wikipedia.org/wiki/Sed

>>sed -i -n '/200 OK/{g;1!p;};h' /tmp/rostelecom

получаем список рабочих ip

--_curl_--212.164.1.157:1234
--_curl_--212.164.2.82:1234
--_curl_--212.164.3.25:1234
--_curl_--212.164.3.139:1234
--_curl_--212.164.3.222:1234
.........

теперь вычленяем сам ip

>>sed -i -n 's/^.*--_curl_--\(\([0-9].\{1,3\}\)\{3\}[0-9]\{1,3\}\).*:1234/\1/p' /tmp/rostelecom

получаем:

212.164.1.157
212.164.2.82
212.164.3.25
212.164.3.139
212.164.3.222
.......

создав на основании вышеизложенного скрипт и запуская его с помощью cron мы можем полностью автоматизировать получение живых ip для просмотра данного оператора и не зависеть от внешних ресурсов....

8 комментариев:

  1. Неплохо бы на этих наработках собрать плагин для поиска рабочих IP и автоматической отправки полученных результатов в hosts.
    И неплохо если он не будет прикреплен к одному провайдеру и диапазон адресов будет вводится вручную и этот профиль будет запоминаться и выводится по требованию.

    ОтветитьУдалить
  2. ну одного универсального плагина в природе нет, есть парочка плгаинов провайдеро-ориентированных, для личного пользования, и тут описана только вершина, есть еще много провайдерозависмых штук, например для Ростелекома, после сканирования находится обычно от 200 до 50 живых ip в зависимости от диапазона поиска, и эти ip в течении дня умирают, я решил для себя эту проблему, а остальным желающим могу пожелать терпения и удачи)))
    ps плагинов в паблике не будет, из-за того чтобы не стимулировать операторов начать бороться с подобными штуками, сделать они могут запросто и тогда даже в интернете не будет ресурсов которые раздают живые ip и оборудование у них не резиновое, у локальных провайдеров оно прямо скажем хлипкое, любая дополнительная нагрузка вызывает проблемы с просмотром, самый мощный это Ростелеком и рухнуть он конечно не должен, а если и рухнет то не велика беда, для меня лично.... а вот остальные гораздо более интересные провы, у которых есть например кинозалы хд от трико и еще пару интересных кино каналов, будет жалко....

    ОтветитьУдалить
  3. Ну судя по всему очень скоро iptv-провайдеры тоже будут массово вводить кодирование. Знаю что мой провайдер вовсю тестирует DRM, у Ростелекома тоже видел.

    ОтветитьУдалить
  4. Твою философию понимаю! Может ты и прав.

    ОтветитьУдалить
  5. если честно, то мне очень слабо в это верится, вещают они в основном в свои локальные сети, оплата за услугу относительно невелика, менять свое оборудование и клиентское вряд ли кто то будет, слишком затратно, они в основной своей массе не в состоянии построить нормальную современную сетевую инфраструктуру, а еще и кодирование, сомневаюсь, не в ближайшей перспективе, ограничить сторонний доступ они могут и без этого, например не выпуская поток за пределы определенных (своих) ip и еще есть куча способов и методов, кодировать вероятно будут новые провайдеры услуг, которые будут броадкастить на любые сети, но это совсем другая история...

    ОтветитьУдалить
  6. @Пилишек Александр, это не философия, а меркантильный интерес, если он и не выражается в денежных знаках, он все равно меркантилен, все для себя любимого и с наименьшим геморроем....

    ОтветитьУдалить
  7. Просто каналы, спутниковые операторы будут лабировать кодирование. Иначе очень уж им обидно. Останутся в открытом виде то что dvb-t2 мультиплексах, да ерунда всякая.

    ОтветитьУдалить
  8. интересно, а причем тут спутник? их мало кто спрашивает, особенно на соседней территории, в свете принятия закона о запрете рекламы на платных каналах, вообще возможна смерть телевидения в том виде в котором мы к нему привыкли останется как в совке 4 канала показывающих съезд кпсс....

    ОтветитьУдалить