16 jul 2018

TakeTV: Descubriendo dispositivos DLNA/UPnP y utilizándolos

Hace unos meses estuve jugando con ChromeCast e hice un pequeño script llamado ChromeCrash. Era realmente sencillo poder meter mano a un dispositivo ChromeCrash, por defecto, si se tenía acceso a la red. Incluso, si no se tenía acceso a la red, se podía realizar un ataque Rickmote remoto, tal y como se puede ver en el video del artículo. Hace unos pocos días, llegué a un Github que me llamó la atención. La aplicación se llamaba TakeTV y permite descubrir dispositivos DLNA/UPnP y lanzarles comandos para reproducir imágenes, videos, música y poder interactuar con las Smart TV

La herramienta está escrita por @svelizdonoso y es muy vistosa e intuitiva. Para poder utilizarla hay que instalar, mediante apt-get install youtube-dl, una serie de dependencias, las cuales se utilizarán para descargar los videos, las canciones o las imágenes que se quieran tener en el servidor web que la herramienta monta. 


Funcionamiento

El funcionamiento es muy sencillo, TakeTVdispone de dos partes escritas en Python: 

·     La primera parte es la herramienta en sí que hace el descubrimiento de dispositivos y la que también enviará las órdenes a los dispositivos. El script se llama taketv.py.
·     La segunda parte es el script llamado assistent.py, el cual puede utilizarse para descargar los contenidos audiovisuales de diferentes rutas de Youtubeo de otras fuentes. Este script también es el encargado de listar las direcciones URL de los contenidos y de lanzar el servidor web en el que se debería apoyar taketv.py para que la televisión reproduzca el contenido. 


Si miramos la ayuda de la herramienta taketv.pyse puede encontrar diferentes opciones como son las siguientes:

·     El parámetro ip. Aquí se indicará la dirección IP de la televisión.
·     El parámetro all. Se realiza el descubrimiento de equipos por UPnP
·     Parámetros play, stop, mute, unmute, pause, volume, seekpermiten jugar con los contenidos y enviarlos a los dispositivos. 
·     El parámetro timeouttrabaja el tiempo de espera en la fase de descubrimiento. Es recomendable cubrir un timeoutalto, para que se puedan descubrir correctamente los dispositivos. 


Para poder descubrir dispositivos se puede utilizar la instrucción python taketv.py –all –timeout 7. Como se puede ver en la imagen, se obtiene un listado de dipsositivos, entre los que destaca una televisión. En el caso de ChromeCasttambién podríamos obtenerlo y manipularlo, como se vio con el ChromeCrash

Para poder preparar las URL dónde se encuentren los contenidos que enviar a los dispositivos o televisiones, se debe hacer uso del script assistent.py. Gracias a este script se puede realizar la descarga de contenido mp3, mp4, mkv, jpg. 


Además, se puede hacer un listado de los contenidos disponibles que luego se servirán con el script assistent.py, con el objetivo de que la televisión lo ejecute. La instrucción python assistent.py –listserverdevuelve el listado de contenidos disponibles. Es importante, ya que luego con python taketv.py –ip [dirección IP TV] –play [hay que indicar URL del servidor assistent.py].


Por último, hay que arrancar el servidor. Para ello, se ejecuta python assistent.py –httpserver –port 8000. Nos vuelven a listar las URL de los contenidos audiovisuales. 


Los dispositivos compatibles con la herramienta o sobre las que el autor ha comprobado son: Samsung, LG, Android TV, Recco AOC. Una vez se tiene listo todo, se puede enviar el contenido de la siguiente manera: taketv.py –ip [dirección IP TV] [opción: --play –stop –volume –pause, etc] [URL del recurso a reproducir en la televisión]

Sin duda, una herramienta interesante y es que la seguridad en el hogar es un campo que debemos seguir estudiando, ya que tenemos muchos ejemplos de posibilidades con los protocolos actuales. ¿Tienes una Smart TV? Pruébalo!

No hay comentarios:

Publicar un comentario