Получение снимка JPEG с IP камер GeoVision
Большинство IP камер умеет отдавать как видеопоток, так и моментальные снимки видеоизображения. И если видеопоток настраивается легко и просто через веб-интерфейс камеры, то вторую возможность производители упорно прячут. Попробуем исправить это.
Потребовалось получить моментальный снимок с камеры GeoVision BX-2400. В идеале чтобы при запросе сразу отдавалась картинка в формате jpeg/png. В веб-интерфейсе камеры предусмотрена возможность загружать на FTP и отправлять по почте моментальные снимки в случае обнаружения движения, что мне не очень подходит:
Гугление на данную тему приводит лишь на одно страницу: Ispyconnect.com. Но рабочей ссылки там нет.
Камера, как и большинство текущих устройств, работает на линуксе. Производитель периодически обновляет прошивку камеры, выкладывая новую на сайте. Последняя версия на момент написания статьи была 3.00, скачаем её. В zip-архиве лежит файл в формате img, посмотрим, что он из себя представляет при помощи утилиты binwalk:
1 2 3 4 5 6 7 8 |
root@kali:/home/user# binwalk GV-BX2400_V300_150423_128M.img DECIMAL HEX DESCRIPTION ------------------------------------------------------------------------------------------------------------------- 1670040 0x197B98 U-Boot boot loader reference 3539120 0x3600B0 uImage header, header size: 64 bytes, header CRC: 0x682C706D, created: Wed Apr 22 18:48:43 2015, image size: 1739360 bytes, Data Address: 0x80008000, Entry Point: 0x80008000, data CRC: 0xF9F061F8, OS: Linux, CPU: ARM, image type: OS Kernel Image, compression type: none, image name: "Linux-2.6.18_pro500-davinci" 3552032 0x363320 gzip compressed data, from Unix, last modified: Wed Apr 22 18:48:42 2015, max compression 5374128 0x5200B0 CramFS filesystem, little endian size 38080512 version #2 sorted_dirs CRC 0x785c9fce, edition 0, 18468 blocks, 1449 files |
Результат крайне радует, binwalk без труда определил загрузчик, ядро и файловую системы внутри img-файла. Распакуем его опять же при помощи binwalk:
1 |
root@kali:/home/user# binwalk -e GV-BX2400_V300_150423_128M.img |
На выходе получим рядом каталог с распакованной файловой системой камеры. Внутри нас интересует каталог www, в котором собраны cgi-файлы веб-интерфейса:
Беглый осмотр названий показал, что нас интересуют 3 файла:
JpegStream.cgi
RoiSnapshot.cgi
PictureCatch.cgi
Начнём с JpegStream.cgi. Простое обращение через браузер выдаёт нам пустую страницу, не густо. Однако, через веб-интерфейс камеры доступны отладочные логи (Менеджмент->Информация журнала), попробуем заглянуть в них:
1 2 3 4 |
192.168.2.50 - - [01/Jan/1970:17:10:47 +0300] "GET /JpegStream.cgi HTTP/1.1" 200 25000 "" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36" Apr 21 16:11:20 thttpd[1019]: (1019) cgi[3734]: Spawned CGI process 19154 to run 'JpegStream.cgi', query[] Apr 21 16:11:20 thttpd[1019]: (1019) cgi[3739]: Don't time limit spawned CGI process 19154 for file 'JpegStream.cgi' Apr 21 16:11:20 JpegStream.cgi: main: Push JPEG not support: channel[0] |
В последней строке видим ошибку, что не указан канал. Укажем его, добавив в адресной строке JpegStream.cgi?channel=1:
1 2 3 4 |
192.168.2.50 - - [01/Jan/1970:17:13:02 +0300] "GET /JpegStream.cgi?channel=1 HTTP/1.1" 200 25000 "" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36" Apr 21 16:13:35 thttpd[1019]: (1019) cgi[3734]: Spawned CGI process 19644 to run 'JpegStream.cgi', query[channel=1] Apr 21 16:13:35 thttpd[1019]: (1019) cgi[3739]: Don't time limit spawned CGI process 19644 for file 'JpegStream.cgi' Apr 21 16:13:35 JpegStream.cgi: jpeg_stream_push: Invalid User[] and PW[] |
Продвинулись дальше, теперь требуется логин и пароль. По умолчанию, в камере идёт логин admin и пароль admin. Сразу скажу, что добавление &User=admin&PW=admin ни к чему не привело, правильная комбинация нашлась путем перебора, но на выходе получаем трансляцию в MJPEG:
http://ip_camera/JpegStream.cgi?username=admin&password=admin&channel=1
Трансляция в формате MJPEG мне не нужна, идём дальше. RoiSnapshot.cgi при обращении через браузер требует авторизации, поэтому предварительно авторизуемся через веб-интерфейс. После этого скрипт выдает одну текстовую строчку с сылкой на файл jpeg:
tmp/event20160421162549002.jpg
Полная ссылка соответственно выглядит так:
http://ip_camera/tmp/event20160421162549002.jpg
Но стоит открыть его через браузер, как нас ждет разочарование: очень маленький снимок, что для Full HD камеры выглядит как издевательство.
Остался последний файл, PictureCatch.cgi. Название звучит многообещающе, но в браузере мы опять получаем пустую страницу, а в логах камеры тишина. Попробуем добавить те же параметры, что и у JpegStream.cgi:
http://ip_camera/PictureCatch.cgi?username=admin&password=admin&channel=1
И бинго! В ответ получаем картинку в формате JPEG, с которой дальше можем делать всё, что необходимо.
На последок добавлю, что данный способ работает на следующих IP камерах GeoVision:
GV-BL120D / 130D / 220D / 320D / GV-BL1200 / 1300 / 1500 / 2400 / 2500 / 3400 / 1210 / 2410 /3410 / 5310 / 2510-E / 5310-E
GV-BX1300 Series / 1500 Series / 2400 Series / 2500 Series / 3400 Series / 5300 Series
GV-BX1500-E / 2400-E / 3400-E / 5300-E / 2510-E / 5310-E
GV-CA120 / 220 and GV-CAW120 / 220
GV-FD120D / 220D / 320D / 1200 / 1500 / 2400 / 2500 / 3400 / 5300 / 1210 / 1510 / 2410 / 2510 / 3410
GV-FE420 / 421 / 520 / 521 / 2301 / 4301 / 2302 / 3402 / 3403 / 5302 / 5303
GV-FER3402 / 3403 / 521 / 5302 / 5303
GV-MDR120 / 220 / 320 / 520 / 1500 Series / 3400 Series / 5300 Series
GV-MFD120 / 130 / 220 / 320 / 520 / 1501 Series / 2401 Series / 2501 Series / 3401 Series / 5301 Series
GV-PT130D / 220D / 320D
GV-UBL1211 / 2411 / 3411 / 1301 Series / 2401 Series / 3401 Series
GV-UBX1301 Series / 2301 Series / 3301 Series
GV-VD120D / 121D / 122D / 123D / 220D / 221D / 222D / 223D / 320D / 321D / 322D / 323D
GV-VD1500 / 2400 / 2500 / 3400 / 1530 / 2430 / 2530 / 3430 / 1540 / 2440 / 2540 / 3440 / 5340 / 2540-E / 5340-E
1 Comment
WANZER8
about 4 месяца назадThank you!!1
Ответить