Bueno, hace un rato que deje de escribir, pero todo fue para un bien mayor. Ahora es buena hora para retomar esto y con algunas cosas interesantes. Primero, como siempre, hay que plantear la situación. Como buen flashero debe saber, hay una utilidad casi maravillosa para relacionar un flash con un php sin tener que pasar los datos en medio por alguna bizarra manera que se te ocurra acomodar en un XML. Esto es el AMFPHP que lo único que hace es una traducción directa de php a flash (arreglos, cadenas, lo necesario). Hasta ahí todo es miel sobre hojuelas, te olvidas del loadVars y de una manera bastante sencilla.
Hasta que te topas con que algo no funciona, empiezas a googlear hasta que encuentras la maravillosa utilidad de Kevin Langdon que se llama Service Capture, gritas y saltas de alegría pues esta captura todo el trafico que pasa por el navegador, incluido el >AMF (Action Message Format) y te dice si se recibieron los paquetes, errores posibles, hasta te pone lo que se recibió en cada paquete, así puedes ver con patas, pelos y señales cual es el error que tiene tu programa. Incluso lo compras porque es un programa que realmente vale la pena.
Ahora no parece todo tan malo, el problema llega cuando se te muere te cansas del windows y tienes que hacer esas cosas en Linux. Lo primero que se te ocurre es emular el Service Capture usando WINE, pero eso no funciona. Luego buscas una alternativa libre entre los repositorios de tu distribución favorita, aquí encuentras todo tipo de espécimenes interesantes, desde el ethereal hasta el ksniffer pero ninguna te convence. ¿Cuál es la solución? Usar un script que te capture exactamente el trafico de los navegadores.
Ahora, como vamos a hacer algo que capture el trafico del navegador:
Ingredientes
- Ruby
- libpcap-ruby
- un flashero necesitado (ese eres tú)
- Un navegador de internet (cualquiera)
Primero, todos los ingredientes se consiguen en los repositorios de tu distribución de Linux favorita (buscalos, ahí están) y antes de empezar a soltar teclazos a lo pendejo, hay que decir unas cuantas cosas. Cosas como que vamos a capturar el trafico que vaya de salida de tu maquina a cualquier otra mientras sea al puerto 80 (el usual para el http), cosas como que para poder capturar el trafico necesitas ser un super-usuario, cosas como que todo el problema se resuelve en unas cuantas lineas de código.
Ahora si, a lo que nos truje:
#!/usr/bin/env ruby
require 'pcaplet'
$device = Pcaplet.new('-s 10240')
$filtro = Pcap::Filter.new('tcp and dst port 80', $device.capture)
$device.add_filter($filter)
for paquete in $device
puts paquete.tcp_data if $filter =~ paquete
end
Sip, asi de sencillito es capturar los paquetes que necesitamos. Antes de explicar, guarda el código en algún archivo, digamos en snif.rb y para correrlo, tienes que decirle
sudo ruby snif.rb
en el directorio donde lo hayas guardado, te pide tu password y empieza a correr, intentalo y usa el navegador mientras esta ejecutándose el script.
Ahora si, que es lo que hace el programa, la primer linea dice que es un script de ruby, la segunda dice que vamos a usar la librería Pcap (packet capture), la magia empieza en la tercera. Le decimos que capture todos los paquetes que midan a lo mas 10 Kbytes (10240 bytes) y que guarde esos datos en $device, luego filtramos los paquetes para que nos den solo los que pasan por el tcp y con destino (dst) el puerto (port) 80 y llamamos a ese filtro (sorpresa) $filtro. Luego a la conexión ($device) le pegamos el filtro ($filter). Finalmente recorremos todos los paquetes que le hayan llegado a $device.
No esperes que sea una interfaz extra guapa como la del Service Capture, pero te dice exactamente lo que necesitas saber. Los paquetes del AMF se distinguen por el tipo MIME que es x-amf (y de verdad son bastante obvios).
Si te pasa que saca montones de datos y no puedes ver los que necesitas porque huyeron hacia arriba de la pantalla, puedes mandar toda la salida a un archivo de texto plano así:
sudo ruby snif.rb > resultado.txt
y puedes abrir el archivo mientras esta ejecutándose para ver como van moviéndose las cosas (recargando el archivo cada que creas necesario). Un detalle es que seguramente veas muchas lineas con nil, no les hagas caso.
Ahora ya puedes ser una persona mas feliz pues puedes debugear tus swf sin necesidad de un windows.
Si necesitas un filtro mas fino, puedes revisar la documentacion del pcap y acomodarlo a tu gusto.
Espero te hayas divertido.
buenisimo tu blog .
tambien puedes usar el comando tail para ver los cambios de el archivo de texto y si lo mezclas con grep puedes tener un exelente filtrado de datos , incluso coloreando keywords
al final de este post en mi blog pongo ejemplos basicos de tail+grep http://blog.motion.com.mx/?p=5