- PVSM.RU - https://www.pvsm.ru -
Дело было вечером, делать было нечего. Поводом послужила активность пользователя leider [1], который дал в комментарии [2] ссылку на публичный ресурс: http://video.dit.mos.ru/window/
Чем примечателен этот ресурс — он предоставляет публичный доступ к камерам видео-наблюдения через встроенный плеер.
В данной статье не будет ни «соли», ни сахара, а только здоровые пища ссылки прямо из печки.
Список ссылок, которые использует плеер на том ресурсе:
http://videoproxy2.echd.ru:41025/rtsplive/10.200.21.21:2033/rtsp___10.208.1.18_axis_media_media.amp/live
http://videoproxy2.echd.ru:41025/rtsplive/10.200.21.22:2033/rtsp___10.208.1.186_axis_media_media.amp/live
http://videoproxy2.echd.ru:41025/rtsplive/10.200.21.22:2033/rtsp___10.208.0.50_axis_media_media.amp/live
http://videoproxy2.echd.ru:41025/rtsplive/10.200.21.22:2033/rtsp___10.208.41.134_axis_media_media.amp/live
http://videoproxy2.echd.ru:41025/rtsplive/10.200.21.23:2033/rtsp___10.194.23.9_axis_media_media.amp/live
http://videoproxy2.echd.ru:41025/rtsplive/10.200.30.24:2033/rtsp___10.208.14.78_axis_media_media.amp_camera_4/live
http://videoproxy2.echd.ru:41025/rtsplive/10.200.30.33:2033/rtsp___10.208.14.117_axis_media_media.amp_camera_2/live
http://videoproxy2.echd.ru:41025/rtsplive/10.200.26.150:2033/rtsp___10.232.0.121_live_h264/live
http://videoproxy2.echd.ru:41025/rtsplive/10.200.26.150:2033/rtsp___10.232.0.1_live_h264/live
http://videoproxy2.echd.ru:41025/rtsplive/10.200.26.153:2033/rtsp___10.232.0.113_live_h264/live
Включаем логику программиста "влоб!":
http://videoproxy2.echd.ru:41025/rtsplive
— это прокси10.200.30.33:2033
— это кеширующий серверrtsp___10.208.14.117_axis_media_media.amp_camera_2/live
— это ссылка на поток с камеры на сервере.Рабочие ссылки:
http://videoproxy2.echd.ru:41025/rtsplive/10.200.21.21:2033/rtsp___10.208.1.18_axis_media_media.amp/live
http://videoproxy2.echd.ru:41025/rtsplive/10.200.21.21:2033/rtsp___10.208.1.18_axis_media_media.amp
Нерабочие ссылки:
http://videoproxy2.echd.ru:41025/rtsplive/10.200.21.21:2033/rtsp___10.208.1.18
http://videoproxy2.echd.ru:41025/rtsplive/10.208.1.18:80
http://videoproxy2.echd.ru:41025/rtsplive/10.208.1.18:81
http://videoproxy2.echd.ru:41025/rtsplive/10.208.1.18:8080
http://videoproxy2.echd.ru:41025/rtsplive/10.208.1.18:8081
http://videoproxy2.echd.ru:41025/rtsplive/10.208.1.18:[пачка_rtsp_портов из wiki, так же 7020 и 27020]
Теория:
Далее, _camera_4 и т.д. не учитывается, так как существует «10.200.30.24:2033/rtsp___10.208.14.78_axis_media_media.amp_camera_4/live» и не существует «10.200.30.24:2033/rtsp___10.208.14.77_axis_media_media.amp_camera_3/live», но следуя логике должна быть обязательно "_axis_media_media.amp/live" — вот их-то и будем искать.
Список IP для кеширующих серверов:
В идеале как диапазон надо бы выбрать 10.200.21.1--10.200.30.254.
Список IP адресов для камер:
Как диапазон (опять же идеальный) берем адреса 10.194.0.1--10.232.255.254 за исключением 10.200.*.* , так как по моей логике (как бы сделал я) — это кеширующие сервера.
В итоге вырисовывается вот такой шаблон для запросов:
http://videoproxy2.echd.ru:41025/rtsplive/10.200.
ip13.ip14:2033/rtsp___10.ip22.ip23.ip24_axis_media_media.amp/livehttp://videoproxy2.echd.ru:41025/rtsplive/10.200.
ip13.ip14:2033/rtsp___10.ip22.ip23.ip24_live_h264/live
Получаем: 5 миллиардов адресов и запросов… В реальности запросов много меньше и мы к тому же можем экономить 903k запросов за 10-15 секунд простоя скрипта… (об этом ниже).
Успех:
Неудача:
Чтобы минимизировать время парсинга задаем timeout на соединение равный 10000 мс, следом перед запросом и после запроса (когда сервер ответил или сработал timeout на нашем клиенте) сохраняем значение времени. Далее из второго вычитаем первое и если прошло 9500мс или более, то переходит на 1 IP выше (для кеширующего сервера), что дает нам упомянутую выше экономию 903 224 запросов или 104 дня ожидания по 10 секунд!
Так же надо понимать, что ссылки на камеры бегут по кругу, и как заметили [3] в предыдущей статье — камер около 140 000. Сервер спокойно отдает 10 запросов в секунду, так что если мы уже нашли 140 000 камер, то в будущем нам искать их повторно не нужно.
Но парсинг такого количество адресов займет целую вечность, а мы пока не в матрице!
Сокращаем круг поисков:
Их прокся спокойно обрабатывает ~10 запросов на 1 поток, пробуем… 8 потоков, 16 потоков… хватит и 16. Итого ~160 ссылок в секунду и поток на уровне 2-3 мегабит, что не нагружает сеть.
Ответ от сервера:
video/x-flv — это если мы получили поток с камеры через их сервер, text/html — если сообщение об ошибке. В программе надо делать условие не нахождения x-flv, а отсутствия text. Потому, что если камера лежит, то сервер просто тупит и мы ничего не получаем, но камера-то есть.
В результате было найдено 608 камер:
IP | .21.23 | .21.22 | .21.21 | .26.150 | .26.151 | .30.21 | .26.152 | .30.24 | .26.153 | .30.23 | .30.25 | .21.24 | .30.22 |
число | 193 | 176 | 171 | 31 | 10 | 7 | 4 | 4 | 3 | 3 | 3 | 2 | 1 |
Уведомления:
«Новости»:
Надеюсь, что после этой публикации они введут проверку на videoproxy2, чтобы он выдавал только камеры из проекта «окна». Для прочих камер/всех камер можно поднять blablaproxy2, который нигде не светить и который будет работать по https.
Ссылки по теме:
Страница с плеерами [4] || дамп в формате mysql [5] (описание полей в комментариях).
Автор: nikitasius
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/moskva/81025
Ссылки в тексте:
[1] leider: http://habrahabr.ru/users/leider/
[2] комментарии: http://habrahabr.ru/post/248727/#comment_8241135
[3] заметили: http://habrahabr.ru/post/248727/#comment_8241201
[4] Страница с плеерами: http://cdn-files.evildayz.com/_habr/moscams/habr_moscams.html
[5] дамп в формате mysql: http://cdn-files.evildayz.com/_habr/moscams/ru_echd_cams_ips.7z
[6] Источник: http://habrahabr.ru/post/249173/
Нажмите здесь для печати.