Изучение API телевизоров SONY Bravia 2014 года

Изучение API телевизоров SONY Bravia 2014 года

Не секрет, что практически все современные телевизоры со «Smart TV» (и не только) имеют под капотом Linux, полноценный доступ к которому открывает широкие возможности для его владельца. Тут вам и доступ по сети к расшаренным ресурсам, доступ к телевизору по FTP/SSH, установка неофициальных приложений (кардшаринг, привет!), плагинов и прочее. Однако производители всячески пытаются это ограничить. Посмотрим, к чему у нас есть доступ.
У меня есть возможность изучить два телевизора SONY 2014 года: KD-65X8505A и KDL-40W605B. Как я заметил, внутри программно они почти не отличаются, поэтому изучим второй телевизор.
Сперва поглядим, какие порты по умолчанию открыты у телевизора, и что на них висит. Поможет нам в этом nmap:

Портов открытых немного, ничего интересного на открытых портах я найти не смог. Очень интересны два порта: 80, на котором висит ningx, и 41824, на котором висит «Sony Bravia TV». Однако простое тыкание результатов не дало.

Зайдем с другой стороны: у Sony есть официальное приложение-пульт под Android, называется TV SideView. Очень удобная штука, позволяет управлять телевизором, загружать список каналов и программу передач, управлять записью. Очевидно, что программа общается с телевизором по сети. Для перехвата пакетов установим чудесную программу Shark for Root, которая является графической оболочкой консольной утилиты tcpdump.

Запустил Shark и понажимал кнопки в приложении-пульте, загрузил список каналов с телевизора. Результаты работы программы сохраняются в формате .pcap, который можно открыть при помощи Wireshark на компьютере и изучить, как же общается программа с телевизором:

Wireshark

Wireshark

Первым делом программа-пульт запрашивает файл dmr.xml, который доступен на порту 52323. В файле очень много интересного, скачать его можно здесь. Изучив дальнейшие запросы, я обнаружил следующее: в файле dmr.xml есть перечень адресов внутреннего API, которое принимает запросы в формате JSON, и отвечает также. Вот этот перечень:

Первым делом запрашивается версия API:

А далее список поддерживаемых методов:

Естественно увидев это я начал изучать методы по всем адресам. Для этого использовал плагин Postman для Google Chrome:

Postman

Postman

Например, по адресу /sony/system список методов такой:

Методов очень много, однако не всё так прозрачно и большинство методов требует авторизации на телевизоре. Для этого служит адрес /sony/accessControl, на который необходимо отправить запрос:

На данный запрос на телевизоре появится табличка с 4 цифрами, которые необходимо ввести на телефоне. Цифры отправляются на тот же адрес при помощи базовой аутентификации. При следующей аутентификации необходимо отправить такой же запрос, но цифры вводить уже не потребуется.

После аутентификации становится доступно большинство методов, однако некоторые, например, getNetworkSettings по адресу /sony/system вызывают зависание телевизора и результат не возвращают.

Но в списке адресов отсутствует один важный адрес, который есть в файле dmr.xml, но он указан в другом разделе: /sony/IRCC. Данный адрес представляет из себя не что иное, как пульт от телевизора. Однако запросы принимает в формате XML, и строго только после авторизации. Перечень команд пульта можно узнать по адресу /sony/system, при помощи метода getRemoteControllerInfo. Формат запроса на адрес /sony/IRCC следующий:

Где AAAAAgAAABoAAAB2Aw== и есть команда.

Еще один интересный адрес, не указанный в файле dmr.xml всплывает в случае, если метод требует аутентификацию. Например, вышеупомянутый метод getNetworkSettings зависает только после аутентификации, а без неё возвращает ответ:

По данному адресу всегда один и тот же ответ:

webauth

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

1 Comment

SiNTEx

about 4 года назад

Thanks for nice article full of interesting information. If i have some free time, I will make simple program to control TV from PC.

Ответить

Leave a Comment

Please be polite. We appreciate that.
Your email address will not be published and required fields are marked