2011-03-25 17 views
5

¿Alguien sabe cómo escribir un sniffer de datos en tiempo real en Python que extrae la dirección IP de origen y la URL completa a la que se accede? He tratado de extraer datos de urlsnarf; sin embargo, IPv6 no es compatible (y las conexiones serán a hosts IPv6).URL Sniffing en Python

Aunque puedo extraer datos de tcpdump y greping para GET/POST que me dejarían simplemente con la ruta en el servidor web, y no obtendría el FQDN asociado. Desafortunadamente, el uso de SQUID w/IPv6 TPROXY no es una opción debido a la configuración del entorno.

¿Alguien tiene alguna idea sobre cómo hacer esto con los enlaces de Python para libpcap? Su ayuda sería muy apreciada :)

Gracias :)

+2

Scapy debería tener algunos enlaces IPv6. Una vez que supere el obstáculo de IPv6, debería ser solo cuestión de analizar los encabezados http. Todo está en la capa de aplicación, por lo que IPv6 no debería afectar los datos que se envían. – krs1

+0

http://stackoverflow.com/questions/462439/packet-sniffing-in-python-windows posiblemente relacionado. –

Respuesta

2

Por desgracia, con IPv6 que están atrapados haciendo su propia TCP reensamblaje. La buena noticia es que solo le interesan los datos de URL que, por lo general, deberían estar en uno o dos paquetes.

Debería poder salirse con la suya usando pylibpcap para hacer esto. Querrá utilizar setfilter en su objeto pcap para asegurarse de que solo está mirando el tráfico TCP. A medida que avance en su bucle pcap, aplicará algunas expresiones regulares HTTP a la carga útil. Si tiene lo que se parece al tráfico HTTP, proceda e intente analizar el encabezado para obtener los datos de la URL. Con suerte, obtendrás una URL completa con un salto de línea antes del final del paquete. De lo contrario, tendrá que realizar un ligero ensamblaje TCP.

Ah, y querrá usar socket.inet_ntop y socket.getaddrinfo para imprimir información sobre el host IPv6.