Busindre » Blog Archive » Como descargar Vídeos, Música y Juegos en Flash desde GNU/Linux sin usar plugins

Como descargar Vídeos, Música y Juegos en Flash desde GNU/Linux sin usar plugins

May 20th, 2008 by Busindre

El éxito de sitios como YouTube ha popularizado mucho el formato Flash en lo que a servicios multimedia para web se refiere. El formato Flash trabaja como sabemos sobre "fotogramas" y está destinado a la producción y entrega de contenido interactivo (Audio y video) sin importar la plataforma bajo la que se use. Utiliza gráficos vectoriales e imágenes ráster, sonido, código de programa, flujo de vídeo y audio bidireccional, entre otras cosas. Al ser un formato tan usado es normal que los usuarios tengan interés en descargar esos ficheros múltimedia para poder disfrutar de ellos sin depender de una conexión a Internet y de la operatividad sitio web que los ofrece.En principio este contenido audiovisual, ya sea en forma de manual interactivo, video, audio o imágenes, NO muestra facilidades para poder guardarse en el disco duro del que lo visualiza, ya que las webs donde se encuentran alojados no quieren facilitar dicha posibilidad, el negocio de los webmaster se basa en que se visite su web cada vez que alguien quiera disfrutar de ese juego o vídeo en formato flash, pero lógicamente sin opción a descarga.

¿Pero,.. Que nos dice la teoría? En principio, si podemos jugar a ese juego en flash o ver vídeos y escuchar las canciones en nuestro navegador web mediante flash, en algún lugar de nuestro ordenador estará cacheado ese material y deberíamos poder acceder a el. Si lo tenemos en nuestro pc cacheado durante un periodo de tiempo, habrá pasado en formas de paquetes por la red como es lógico, ya que el servidor habrá tenido que comunicarle a nuestro navegador web donde está ese archivo mp3, mp4, ogg, video flv, juego,.. En su defecto, si no le dice al navegador la ruta al fichero, mostrara la ruta a otro fichero que pueda contener esa información. Esto es lo que vamos a tratar de ver en este articulo, de una forma simple ver como podemos extraer ese tipo de ficheros flash y poder disfrutar de ellos tantas veces queramos de forma local, sin necesidad de usar Internet. Veremos como extraerlo de dos formas, primero del servidor donde se alojan, orientado a la creación scripts y luego comentaremos como poder encontrarlos cacheados después de una visualización en nuestro sistema GNU/Linux.

Con respecto a esta facilidad de poder obtener los archivos en flash y como curiosidad, decir que Adobe, dueña de Flash, conoce ese "problema / posibilidad" perfectamente y sabe que ese contenido puede ser sustraído de las web con un poco de maña y conocimientos, frente a lo que está preparando un programa extractor de FLV con DRM, para de alguna forma, intentar controlar esas extracciones de videos o por lo menos, obtener una beneficio mediante la integración de publicidad en los mismos.

Que tenemos que tener claro

Tipos de ficheros y su extensión:

Vídeos / Audio / Imágenes: flv (Macromedia Flash Video).
Tutoriales interactivos /Programas / Juegos: swf (Macromedia Flash data (compressed), version X).

Los programas con extensión swf requieren de un navegador web con el plugin de Flash instalado, que es lo que le aporta al navegador la posibilidad de usar tecnología flash, están orientados a ofrecer una interfaz audiovisual pero interactiva con el usuario, como pueden ser tutoriales o juegos. Los ficheros multimedia "flv", en su mayoría videos, necesitan de un reproductor que soporte flash, tanto en la propia web donde tenemos el video, como en nuestro sistema local para poder visualizarlo, en GNU/Linux encontramos reproductores con dicho soporte como son mplayer y Vlc. Las webs que mantienen a disposición de sus visitantes contenido audiovisual en flash (flv), van siempre acompañados de un programa reproductor (swf) para poder visualizarlo, por norma uno sin el otro no funcionan ya que para reproducir un fichero hace falta un programa reproductor como es lógico.

Los vídeos que veamos en Internet de forma online, usando FLash, siempre estarán en formato flv o swf, nunca como avi, mpg, wmv, etc,.. Los únicos formatos que pueden usarse directamente con un reproductor flash sin que estén en formato flash, son el sonido (mp3, mp4, ogg,..) y las imágenes (png, jpg,etc..). Entonces, de esto se deduce que si queremos descargar un vídeo flash, se descargará natívamente en formato flv, NO en el formato en el que fue subido originalmente, sitios como el popular Youtube transforman el video / sonido, independientemente de la codificación que tenga a formato video flash "flv".

En el caso de que el reproductor use un fichero de audio tipo ogg, mp3, mp4 u otros, se debe poder encontrar la ruta a los mismos, al igual que el fichero flv y en consecuencia descargarlos. No se debe confundir el formato flash para visualizaciones online con la posibilidad de visualizar ficheros (avi, ogg, mpeg, wmv,..) desde el navegador web por medio de un plugin, como puede ser el Mplayer-plugin, que lo único que hacen es incorporar esa tecnología del reproductor al navegador web (Opera, firefox, Konqueror, Safari,..) y usarlo como si fuera un streaming, según se descarga el fichero, por ejemplo en formato "avi", el reproductor lo va cacheando y lo reproduce en el navegador, lógicamente eso no tiene nada que ver con Flash y su tecnología. Con decíamos antes, con el audio no estamos obligados a tener que usar formato flash, la mayoría de reproductores web de música que usan flash, se basan en un programa swf que cumple la función de reproductor y una ruta al fichero de sonido, ya sea ogg, mp3, video flash o el que sea para poder ser procesado. De no fijarse una ruta directa al fichero multimedia, se puede encontrar un fichero que enlaza con el fichero final, por ejemplo mediante algún tipo de fichero xml.

Depende de la web pueden esconder un poco más el fichero, pero con tiempo y dedicación no es difícil averiguar donde está ese archivo de sonido o ese vídeo en formato flv, ya que nuestro navegador debe saber donde está para poder reproducirlo. Sabemos que hay un sin fin de scripts y plugins para el navegador que hacen esta labor por nosotros, pero lo divertido y lo que de verdad nos aporta algo práctico, es aprender a hacerlo nosotros mismos, que es lo que trataremos a continuación en el articulo. Veremos a modo de ejemplo como extraer Video / Audio directamente de los tres más usados proyectos de multimedia online, que son Metacafe, Youtube y Goear. Comentaremos también como sacar fácilmente los ficheros flash precacheados de nuestro sistema una vez reproducidos GNU/Linux.

Sabiendo y entendiendo la diferencia entre flv y swf, veamos una prueba de concepto con el siguiente código para reproducir un vídeo en formato flv de la web Metacafe pero usando otro reproductor que no es el propio de Metacafe:

<object width="640" height="480" type="application/x-shockwave-flash" data="http://blacktwnty.vo.llnwd.net/o16/files/druport/assets/players/flow2/FlowPlayerDark.swf">
 <param name="movie" value=""http://blacktwnty.vo.llnwd.net/o16/files/druport/assets/players/flow2/FlowPlayerDark.swf />
 <param name="flashvars" value="config={videoFile: 'http://akvideos.metacafe.com/ItemFiles/%5BFrom%20www.metacafe.com%5D%201012768.5759906.11.flv'}"/>
  </object>

* Reproductor: FlowPlayerDark.swf
* Video: 201012768.5759906.11.flv

NOTA: Previamente averiguamos la ruta al video en formato flv por medio de una búsqueda en el código html de la web de Metacafe, también hemos buscado por la red el reproductor FlowPlayerDark.swf, la suma de los dos es necesaria para poder visualizar el video. Existen reproductores que soportan varios tipos de ficheros, como son Flv, Mp4, H.264, JPG, PNG, Ogg, Mp3, etc,.. Pero solo se visualizarán los que tengan formato flv, es decir, si el reproductor swf usa un fichero mp4 de vídeo, solo escucharemos el audio del vídeo, NO los fotogramas. Para ver Imagen + Audio debe usarse vídeo en formato flash (flv) como ya comentamos con anterioridad. A este reproductor podemos cambiarle el fichero multimedia por ejemplo por una imagen en jpg de la siguiente manera:

<object width="640" height="480" type="application/x-shockwave-flash" data="http://blacktwnty.vo.llnwd.net/o16/files/druport/assets/players/flow2/FlowPlayerDark.swf">
 <param name="movie" value=""http://blacktwnty.vo.llnwd.net/o16/files/druport/assets/players/flow2/FlowPlayerDark.swf />
 <param name="flashvars" value="config={videoFile: /home/busi/fichero.jpg'}"/>
  </object>

¿Como se averigua la ruta a los ficheros de flash para poder descargarlos?

Como ya deberíamos saber, por mucho que se oculte el acceso al fichero multimedia (flv, ogg, mp3,..) por parte de los programadores de la web, siempre habrá alguna forma de obtener la ruta real al fichero en el servidor, entre otras cosas porque el navegador debe saber donde está ese fichero para mostrárselo al usuario, en algunas webs puede ser más rebuscado la forma de obtenerlos que en otras. En principio, lo que se debe hacer a la hora de encontrar la ruta a ese fichero flash, es buscar en el código fuente de la pagina, en los paquetes http recibidos desde el servidor y en el código previamente "desencapsulado" del fichero swf que trabaja con ese fichero de video / audio..

Donde buscar pistas:

* Código Html
* Trafico del servidor
* Codigo del programa reproductor

Código Html

Se debe buscar en el código html de la pagina web que nos ofrece ese contenido multimedia, ya sea en forma de sonido, videos o juegos en flash, en el podemos encontrar información sobre donde se alojan los ficheros que queremos descargar. Veamos un ejemplo en la web de Metacafe: http://www.metacafe.com/watch/1017286/julien_dupont_trial_try_all/

Si miramos el código fuente de la web encontraremos:

* La dirección del video flv: http://akvideos.metacafe.com/ItemFiles/%5BFrom%20www.metacafe.com%5D%201017286.5782977.11.flv

* La dirección del reproductor: http://s.mcstatic.com/Flash/vp/PortalVideoPlayer_5.2.1.1.swf

La suma de esos dos ficheros da como resultado que nuestro navegador, mediante el plugin de flash pueda mostrar el vídeo y nos de la posibilidad de interactuar con el, pararlo, ir a un minuto determinado, subir volumen, etc,.. Si queremos usarlo con otro reproductor debemos hacerlo como anteriormente comentábamos:

<object width="340" height="280" type="application/x-shockwave-flash" data="http://blacktwnty.vo.llnwd.net/o16/files/druport/assets/players/flow2/FlowPlayerDark.swf">
    <param name="movie" value="http://blacktwnty.vo.llnwd.net/o16/files/druport/assets/players/flow2/FlowPlayerDark.swf" />
    <param name="flashvars" value="config={videoFile: 'http://akvideos.metacafe.com/ItemFiles/%5BFrom%20www.metacafe.com%5D%201017286.5782977.11.flv'}"/>
  </object>

Una vez sabemos donde está el video en flash, con mplayer podemos conectar a el y verlo de forma online.

$ mplayer http://www.archive.org/download/m422007-07-10.mOnchito42/M42.flv

Veamos un ejemplo de juego en flash, por ejemplo: http://minijuegos.com/juegos/jugar.php?id=6404

Si miramos el código html de la web vemos el siguiente párrafo:

<object id="FlashGame" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" height="320" width="400">
 <param name="movie" value="http://72.36.157.12/flash1234/no_hotlink/monolithsmarioworld4.swf">
 <param name="quality" value="high">
<embed src="http://72.36.157.12/flash1234/no_hotlink/monolithsmarioworld4.swf" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" class="FlashGame" height="320" width="400">                         
</object>

El fichero que nos interesa está en: http://72.36.157.12/flash1234/no_hotlink/monolithsmarioworld4.swf, por lo que ya puede ser descargado e incluso jugado online, a su resolución original (Debido a que no hay código html que lo escale -> height="320" width="400"):

$ firefox http://wwws.warnerbros.co.uk/speedracerchaser/game.swf

Imagen de Ejemplo: http://www.busindre.com/archivos/flash_juegos.png

Como vemos, el código de la web nos da mucha información, en estos ejemplos con solo mirarlo ha sido suficiente para saber donde está lo que nos interesa, pero no en todas las web será tan simple, como veremos en los siguientes ejemplos.

Visionar el tráfico generado con el servidor (Sniffer)

Cuando se comunica nuestro navegador con una pagina web que ofrece cierto contenido flash, nuestro navegador debe averiguar donde está ese fichero multimedia y esa información la da el servidor como es lógico, pero no tenemos porque verlo en el código html de la pagina, puede venir del programa swf. El servidor puede indicarle al navegador la localización del fichero, el cual puede estar en un servidor distinto al que estamos conectados y el archivo puede tener una ruta que no tiene porque terminar en la extensión flv. En este caso tenemos como ejemplos a Youtube y Goear, para el ejemplo nos centraremos en el primero de ellos. Si tenemos que analizar el tráfico que le llega a nuestro navegador, debemos usar algún programa sniffer que permita a nuestra tarjeta de red trabajar en modo promiscuo, en la prueba de concepto usaremos el sniffer Wireshark, veamos que pasos hay que seguir de forma básica.

1.- Debemos tener un vídeo de Youtube seleccionado (NO arrancado ni cacheado).
2.- Ponemos un filtro para trafico HTTP, para no ensuciar demasiado la salida.
3.- Arrancamos el Sniffer.
4.- Arrancamos el video.
5.- Paramos el Sniffer.
6.- Mirar la salida obtenida en búsqueda de pistas.

En el caso de youtube, nos fijamos en la salida de Wireshark que hay un paquete HTTP de este tipo:

GET /get_video?video_id=umHOYDalK1k&t=OEgsToPDskIObYonj5UdCwODTvsGmpvV HTTP/1.1\r\n

Si miramos en el segundo recuadro de Wireshark, donde ordena la información del paquete mediante capas y nos fijamos en "Hypertext Transfer Protocol" podremos ver el host, que puede ser youtube.com o tener una sintaxis del tipo ****.youtube.com.

Para descargar el fichero flv debemos unificar esa información y obtener la ruta al vídeo, esto de hace de la siguiente manera:

Ruta al fichero flv: host + get_video

Ruta al fichero flv para el ejemplo dado:

http://www.youtube.com/get_video?video_id=umHOYDalK1k&t=OEgsToPDskIObYonj5UdCwODTvsGmpvV

Al visionar esa url se nos mostrará el fichero en flash con la sintaxis get_video, nos vale con cambiarle el nombre al archivo y añadirle la extensión flv para tener perfectamente descargado nuestro vídeo. Como vemos estudiar los paquetes es crucial a la hora de determinar la verdadera ubicación de esos ficheros multimedia que usan flash.

Ver Imagen Ejemplo: http://www.busindre.com/archivos/flash_youtube_hack.png

Código del programa reproductor

En Flash se usa un lenguaje denominado ActionScript (OOP), donde el código no se ejecuta linealmente y responde a eventos generados por el sistema o el usuario, como se ve en los programas reproductores swf. La idea base de los programas en flash, es que cada vez que se genere un evento, el programa responda con el comportamiento adecuado, como puede ser subir volumen, parar un vídeo, saltar en un juego, etc.. Entonces, para nuestro objetivo, vendría bien poder obtener código de esos reproductores en flash, ya que pueden ser ellos los que den determinadas instrucciones al navegador y no el propio html de la web, el encargado de decirle al navegador web donde esta ese fichero multimedia que queremos descargar.

En GNU/Linux para desensamblar el código del fichero swf, podemos hacer uso de aplicaciones modo texto como es flasm. Esta técnica es conocida por muchos usuarios aficionados a hacer trampas en juegos online basados en flash y es debido a la facilidad que swf ofrece para permitir desencapsular / encapsular su código fuente, dejándonos modificar su código y usarlo una vez encapsulado como si del original se tratara.

Para explicar este método, a modo de ejemplo usaremos la web del proyecto Goear y veremos como obtener la ruta del fichero mp3 / mpeg alojado en sus servidores, que es con lo que Goear almacena, no convierte a formato flv sus audios, entre otras cosas, porque no se requiere mucha más compresión que la obtenida con el formato mp3 en relación a su calidad de sonido.

Extraer código ActionScript del programa Flash (Reproductores):

Lo primero es mirar el código html referente al reproductor swf que usa Goear, como vemos en este ejemplo:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="363" height="129">
  <param name="movie" value="files/r.swf" />
   <param name="FlashVars" value="file=904ed23" />
    <param name="quality" value="high" />
   <embed src="files/r.swf" flashvars="file=904ed23" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="363" height="129"></embed>
</object>

Debemos prestar atención a las variables y sus valores ya que al no encontrar en el código html de la pagina, el enlace al mp3, debe derivarse dicha función al programa en flash. Una linea muy significativa que encontramos es la siguiente:

<param name="FlashVars" value="file=904ed23" />

Mediante ese código deducimos fácilmente que la ruta al programa swf reproductor es http://www.goear.com/files/r.swf, ahora solo nos queda descargarlo y extraer su código fuente para que nos ayude en nuestra labor:


$ wget http://www.goear.com/files/r.swf
$ ./flasm -d r.swf > test.flm"

En el fichero test.flm encontraremos el código fuente, veamos que puede decirnos sobre el metodo que usa goear para esconder sus ficheros mp3, fijemosnos en estas lineas:


push 'data_xml', 0.0, 'XML'
new
setVariable
push 'data_xml'
getVariable
push 'ignoreWhite', TRUE
setMember
push 'data_xml'
getVariable
push 'onLoad', 'ladeDaten'
getVariable
setMember
push 'playlist', 'files/sst/secm', '_root'
getVariable
push 'file'
getMember
add
push '.xml'

Parece que hay una ruta en la linea "push 'playlist', 'files/sst/secm', '_root'" seguida de la variable "file" y un ".xml", si sabemos la ruta del reproductor (http://www.goear.com) y sustituimos la variable file por el valor que nos dio el codigo html tenemos un resultado parecido a este:

http://www.goear.com/files/sst/secm904ed23.xml

Veamos el contenido de ese fichero que nos ha dado como resultado el desencapsulamiento del programa:

$ curl http://www.goear.com/files/sst/secm904ed23.xml

<?xml version="1.0" encoding="UTF-8"?>
<songs>
   <song path="http://www.goear.com/files/sst/ff1b26879465520eaafeec2135769722.mp3" bild="img/s.jpg" artist="Monkey island" title="Monkey island - Main Theme"/>
</songs>

Como vemos la ruta del mp3 la encontramos en: http://www.goear.com/files/sst/ff1b26879465520eaafeec2135769722.mp3

Ver Imagen del ejemplo : http://www.busindre.com/archivos/flash_goear_hack.png

Este método de observación del código fuente del programa en flash es más complejo que los otros dos mostrados ya que requiere un poco más de conocimientos por parte del usuario. Realmente el método de esnifar la red nos hubiera dado la misma información, ya que el tráfico capturado es una consecuencia de lo que el programa flah realiza y mediante su lectura se llegaría a la misma deducción de la ruta del fichero flash, como vemos en la siguiente imagen.

Imagen: http://www.busindre.com/archivos/flash_goear.png

¿Como averiguar la ruta local a los ficheros temporales de flash para poder visualizarlos?

Una vez visto como podemos deducir la ruta a los ficheros que flash nos reproduce desde un determinado sitio web, pasamos a explicar como podemos extraerlos cuando sean visualizados y cacheados en nuestro sistema operativo, que es una manera más simple de llegar al mismo cometido. Por norma general los ficheros flash, ya sean videos, juegos, tutoriales o videos que hayan sido visualizados por medio de nuestro navegador deben permanecer cacheados por un determinado espacio de tiempo en el directorio /tmp de GNU/linux o bien en el directorio Cache del navegador usado.

Directorios usados para almacenar los ficheros flash:

/tmp -> Sistema
$HOME/.mozilla/default/Cache/ -> Mozilla suite
$HOME/.mozilla/firefox/7c1h7jjh.default/Cache/ -> Firefox
instalacion_opera/usersettings/cache4 -> Opera

Es normal encontrar el mismo fichero en el directorio /tmp que en la carpeta de temporales de nuestro navegador usado (Mozilla, firefox, Opera, etc,..). Una vez que habrámos un video en flash debemos escanear esos directorios en busqueda de ficheros temporales, el archivo que veamos en los temporales es exactamente el mismo que el que podriamos descargar de la web de las formas anteriormente vistas ya que realmente es lo que hace el cliente web, lo descarga y lo guarda en forma de temporal. Ló unico que cambiara será el nombre y que el fichero carecerá de extensión, por eso nos apoyaremos en la herramienta finger para averiguar que tipo de fichero tenemos en la cache e incluso a que versión de flash pertenece. Veamos unos ejemplos de uso:

$ file * instalacion_opera/usersettings/cache4/* | grep -i Flash
opr0003Z.swf: Macromedia Flash data (compressed), version 8
opr00044.swf: Macromedia Flash data (compressed), version 7
opr0004Q.swf: Macromedia Flash data (compressed), version 8

La salida de los temporales de Flash es la más clara porque ofrece la extensión, que nos permite distinguir los swf de los flv sin obligar al uso de finger.

$ file .mozilla/firefox/7c1h7jjh.default/Cache/* | grep -i Flash
.mozilla/firefox/7c1h7jjh.default/Cache/04DE0514d01: Macromedia Flash data (compressed), version 8
.mozilla/firefox/7c1h7jjh.default/Cache/06D30E9Fd01: Macromedia Flash Video
.mozilla/firefox/7c1h7jjh.default/Cache/0BD81889d01: Macromedia Flash data (compressed), version 9
.mozilla/firefox/7c1h7jjh.default/Cache/16CE76DDd01: Macromedia Flash Video

$ file /tmp/* | grep -i Flash
/tmp/FlashbpXWQq: Macromedia Flash Video
/tmp/FlashfjsfX4: Macromedia Flash Video

Si queremos buscar los videos podemos hacer uso de este comando:

$ file ruta_temporales/* | grep -i "Flash Video"

Si queremos los ficheros swf:

$ file ruta_temporales/* | grep -i "Flash data"

Si queremos los ficheros mp* (Por ejemplo después de usar Goear)

$ file /home/busi/.mozilla/firefox/7c1h7jjh.default/Cache/* | grep -i mp
/home/busi/.mozilla/firefox/7c1h7jjh.default/Cache/0B698991d01: MPEG ADTS, layer III, v1, 128 kBits, 44.1 kHz, JntStereo
/home/busi/.mozilla/firefox/7c1h7jjh.default/Cache/0C3FFF71d01: MPEG ADTS, layer III, v1, 128 kBits, 44.1 kHz, JntStereo
/home/busi/.mozilla/firefox/7c1h7jjh.default/Cache/82FB2664d01: Audio file with ID3 version 22.0 tag, MP3 encoding

Imagen de Ejemplo 1: http://www.busindre.com/archivos/flash_captura.png
Imagen de Ejemplo 2: http://www.busindre.com/archivos/flash_captura2.png

Como vemos en las imágenes los ficheros pueden ser reproducidos sin necesidad de cambiarles el nombre / extensión, es mas, necesitaremos reproducirlos para poder identificarlo si tenemos varios temporales y solo queremos un video en concreto. Una vez seleccionado el que buscábamos, lo cambiamos de carpeta para que no se borre con el paso del tiempo.

NOTA: Pueden tardar un rato en aparecer los temporales en los directorios comentados, hay que ser paciente. Recordar que los ficheros cacheados son exactamente los mismos que obtendríamos descargándolos directamente desde la ruta con algunos de los métodos vistos con anterioridad. Para terminar si queremos pasar flash a otro formato o al contrario podemos usar ffmpeg.

Pasar de avi a flv / flv a avi:

$ ffmpeg -i fichero.avi -vcodec flv fichero.flv
$ ffmpeg -i fichero.flv fichero.avi

NOTA: De usar un plugin para descargar ficheros multimedia desde navegadores Firefox, recomendamos encarecidamente el uso de FlashGot, que gracias a la nueva implementación de FlashGot Media (http://flashgot.net/features#fgmedia) permite descargar cualquier tipo de fichero de Audio y Video de portales tipo RedTube, Youtbe, goear, Megavideos,Vimeo... Se recomienda seleccionar el motor Wget como gestor de descargas dentro de FlashGot para este menester, con otros motores podemos tener problemas a la hora de descargar los ficheros.

Posted in Curiosidades |

One Response

  1. Pedro Says:

    Che muy bueno este post! la verdad que me sirvio por demas!!!

    Te agradezco mucho que brindes tu tiempo para explicar este tipo de cosas porque es un terreno que estoy investigando y que este tipo de info es de muchas ayuda.

    Anotado en mis feeds diarios! Saludos

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.