jueves, 1 de marzo de 2012

Obtener videos Flash desde cache en Linux

Hoy les platico algo que es más como una curiosidad que en ocasiones es útil. Parafraseando una entrada en internet cuya fuente sito al final, pude resolver algo que a mi me ha servido para guardar un respaldo de los videos Flash que veo de repente por la red.

Con las versiones anteriores del plugin de Flash Player de Adobe en Linux era posible ver directamente el archivo que se quedaba en cache de disco al ver nuestros archivos Flash en algún navegador. Entonces sin necesidad de usar herramienta adicional podiamos copiar un video accediendo al directorio tmp de nuestro sistema de archivos, escribiendo en la consola algo como esto:
$ cp /tmp/FlashXasdf ~/video.flv
En ese entonces identificábamos fácilmente un archivo Flash por el prefijo "Flash" presisamente... que difícil ¿verdad?

Sin embargo los chivos de Adobe pensaron que esto no debería suceder y en las versiones siguientes de su plugin han quitado este comportamiento. Ahora lo que hacen es borrar el archivo del sistema de archivos sin embargo se sigue descargando y sigue ocupando espacio en el disco duro, por lo tanto mantiene una liga para poder accederlo. Mientras exista un hilo de ejecución que tenga referencia a ese archivo (en nuestro caso el plugin de Flash, ¡cuidado! si cierras el plugin o el navegador esta referencia desaparecerá llevándose el archivo consigo), el archivo permanece en el sistema de archivos en Linux. A grandes rasgos algo así es lo que sucede.

Ahora, para acceder a este archivo y copiarlo a nuestro directorio haremos uso de un par de herramientas en linux. La clave de este descubrimiento es que se sigue creando en un primer momento el archivo como /tmp/Flash* así que de esa manera lo buscamos:
$ lsof | grep Flash 
COMMAND   PID   USER      FD  TYPE DEVICE SIZE/OFF NODE NAME 
firefox-b 23230 vagabundo 84u REG  254,0  1065348  929 /tmp/FlashXXQCasdK (deleted)
El header esta agregado, asi que el comando lsof solo les mostrará lo campos de la parte de abajo, para que no se vayan a asustar. De los datos que aparecen los que nos interesan en particular son el PID y el FD que son con los que podremos hacer referencia al archivo en cuestión.

Para continuar usaremos el directorio /proc del sistema de archivos. Éste directorio tiene varias gracias, ofrece mucha información del sistema que se esta ejecutando actualmente y esta presente por lo general en todas las distribuciones Linux. También mantiene archivos utilizados por las aplicaciones. En este caso con los datos que hemos recolectado antes (PID=23230 ,FD=84). Estos datos apuntan a una referencia que seria /proc/23230/fd/84 . Sin embargo no podemos acceder directamente a nuestro video, es necesario hacer un truco más escribiendo en nuestra consola:
$ cat /proc/23230/fd/84 > ~/video.flv
Y .... ya tenemos nuestro video C: 

Espero les sea útil. Este prcedimiento es, como lo comenté en un pricnipio, para Linux. En Windows no se si se pueda hacer algo similar, pero seguramente también hay alguna manera, ¿Alguien conoce alguna?

Anexo aquí el tutorial original de donde parafraseé el contenido de arriba, a cuyo autor se le agradece enormemente. Viene un poco más explicado aunque en inglés:


¡Saludos Javer@s!... hasta la próxima...

No hay comentarios:

Publicar un comentario