La idea de este texto es mostrar como descargar un video FLV desde un servidor como, por ejemplo, YouTube. Estos sitios utilizan tecnología Flash un archivo SWF que carga el reproductor y va descargando y reproduciendo las partes cargadas de un archivo FLV. Nuestro objetivo va a ser obtener ese archivo FLV sin necesidad de utilizar algún programa especifico para la tarea (como youtube-dl (http://www.arrakis.es/%7Erggi3/youtube-dl/)) o alguna pagina que nos de la URL para la descarga (como Keepvid (http://keepvid.com/)), dado que aprendiendo a descargarlo "a lo bruto" podremos descargar archivos de cualquier sitio sin necesidad de depender de un tercero.
Si bien acá se va a apuntar a descargar un FLV, este mismo método se puede utilizar para descargar cualquier archivo de una web que su código esté ofuscado.
HerramientasPrimero vamos a necesitar un navegador, en este caso usaré el Firefox (http://www.mozilla-europe.org/es/). Luego necesitamos un sniffer. Un sniffer es un programa que nos permite capturar todos los paquetes que entran o salen en una o varias interfaces de la PC, a su vez tiene la posibilidad de poner la placa de red (NIC) en modo promiscuo, permitiendo capturar todo lo que pase por la red (bueno en las épocas en que se usaban HUBs). En este caso utilizaré el Wireshark (http://www.wireshark.org/) ambos son OpenSource y multiplataforma (Windows, Linux, MacOS).
Se recomienda en caso de duda, darle una leída al protocolo HTTP RFC 2616 (http://www.ietf.org/rfc/rfc2616.txt).
Manos a la obraEl primer paso será localizar el video a descargar, una vez encontrado no abrimos la ventana donde esté simplemente lo dejamos para hacer click.
(http://img255.imageshack.us/img255/4434/01youtubeargentop2pgs4.jpg)
Ahora el siguiente paso es abrir el Wireshark y apretar el siguiente botón para empezar a capturar:
(http://img442.imageshack.us/img442/225/02snifferwiresharkcaptujl8.jpg)
Esto nos abrirá el dialogo donde están todas las interfaces, vamos a Options (de la interfaz de Internet):
(http://img441.imageshack.us/img441/8507/03snifferwiresharkopciouw3.jpg)
Ahora nos abre el dialogo Wireshark Capture Options, debemos hacer un click en el botón Capture Filter, seleccionar "HTTP TCP port (80)", hacer un click en OK, y dale al botón Start para empezar a capturar:
(http://img95.imageshack.us/img95/8837/04snifferwiresharkcaptucn5.jpg)
Ahora debemos ir a nuestro navegador, y darle click al video que queremos ver, una vez que ya haya empezado a cargar el video y se este reproduciendo podemos ir al botón atrás del navegador para que no siga descargando y en el Wireshark apretamos el siguiente botón para detener la captura:
(http://img128.imageshack.us/img128/2001/05snifferwiresharkdetenxh7.jpg)
Ahora tendremos todos los paquetes capturados, podemos revisar a mano todos los paquetes TCP (en este caso se recomienda si no estar descargando nada), o buscar el siguiente string para el caso de YouTube "get_video" con el icono de la lupita (nótese en el siguiente gráfico que hay 2 paquetes con get_video). En otros se suele tener que buscar ".flv", pero eso lo podemos ir descubriendo durante la práctica. Una vez encontrado, debemos dar botón derecho sobre el paquete y apretar "Follow TCP Stream", de esta forma nos filtrara todo el flujo de ese paquete y nos los mostrara en una ventana.
(http://img124.imageshack.us/img124/4581/06snifferwiresharkbuscazu3.jpg)
Esto es lo que nos muestra, vamos al final:
(http://img255.imageshack.us/img255/8241/07snifferwiresharkfollokq3.jpg)
En rojo están los paquetes que enviamos (GET o POST) y en azul lo que recibimos del servidor, como vemos el último paquete nos redireccióna a otra URL, esta la podemos copiar y pegar al navegador y ya nos descargara el video, pero antes vamos a revisar el otro GET. Cerramos la ventana, damos click en Clear (para que nos saque el filtro de este paquete), volvemos a buscar el "get_video" y seleccionamos el segundo:
(http://img254.imageshack.us/img254/9697/08snifferwiresharkfolloaq1.jpg)
Como vemos en la respuesta del server la cabecera del archivo es el FLV, para obtener la URL debemos ponemos en un http mas copiamos lo que dice en "Host" unido a lo que dice después del "GET" (incluyendo la barra). Ahora ya lo podemos poner en el navegador:
(http://img168.imageshack.us/img168/3413/09descargarflvjt8.jpg)
¡Listo! ya nos podemos descargar el FLV, que podremos reproducir con el VideoLAN (http://www.videolan.org/).