Pregunta

Me gustaría capturar todos los paquetes HTTP entrantes de mi máquina. Para hacer eso que estoy usando SharpPcap que es un envoltorio de WinPcap.

SharpPcap funciona muy bien pero que captura los paquetes TCP y esto es demasiado bajo nivel para hacer lo que quiera. ¿Alguien sabe cómo puedo easly HTTP GET peticiones / respuestas completas de todos estos paquetes TCP?

Gracias

¿Fue útil?

Solución

SharpPcap ya es capaz de capturar los paquetes de la misma manera que lo hace el wireshark (justo en el código en lugar de una interfaz gráfica de usuario). Y se puede analizar ya sea directamente o se puede volcar a la unidad en el formato de archivo .pcap común.

Los pasos para analizar una captura son:

  • Pick una interfaz
  • Abrir una conexión en modo promiscuo
  • Iniciar captura, ya sea usando un bucle while o un evento de devolución de llamada
  • Analizar el paquete sin procesar con el tipo que desea

Si estás leyendo los archivos de volcado .pcap el proceso es casi el mismo, salvo que llama a un lector de captura fuera de línea, no es necesario recoger una interfaz, y no es necesario para establecer el modo promiscuo. Todos los filtros estándar que Wireshark, tcpdump, y la mayoría de los otros marcos Pcap uso están soportados en SharpPcap. Para una referencia a éstos revisar el hombre tcpdump.

Actualmente no hay apoyo para analizar HTTP directamente, sino analizar los paquetes TCP es muy fácil.

Cuando reciba el paquete sin procesar (no analizada) hacer esto:

TCPPacket packet = TCPPacket.GetEncapsulated(rawPacket);

El Packet.Net (A componente separado e incluido de SharpPcap) analizador es capaz de sacar la porción TCP directamente incluso si la comunicación está encapsulado por VPN, PPoE, o PPP.

Una vez que tenga la TCPPacket Analizada sólo tienes que tomar packet.PayloadBytes para la carga útil en una matriz de bytes que debe contener la cabecera HTTP en bytes primas que se pueden convertir al formato de texto adecuado (no estoy realmente seguro de si utilizan cabeceras HTTP UTF-8 o ASCII codificación en ese nivel). Debe haber un montón de herramientas / bibliotecas de libre disposición para analizar las cabeceras HTTP.


Para extraer el paquete HTTP de TCP:

Es necesario recoger los paquetes TCP de la conexión ya que vienen en y si se fragmentan los datos (mayor que 1500 bytes) que necesita para volver a montar las piezas en la memoria. Para descubrir qué partes van en qué orden lo necesario para realizar un seguimiento cuidadosamente los números de secuencia / acuse de recibo.

Esto es una cosa no trivial de lograr con SharpPcap porque se trabaja con una parte mucho más baja de la pila y volver a montar la conexión manualmente.

Wireshark tiene un interesante artículo sobre cómo lograr esto en C.

A partir de ahora, SharpPcap no es compatible con el análisis de TCP carga útil.


Si lo que buscas es fácil de seguir ejemplos de cómo utilizar SharpPcap descargar el árbol de fuentes y observe el ejemplo proyectos incluidos. También hay un tutorial para SharpPcap en CodeProject .

Si usted tiene más preguntas y / o desea realizar alguna solicitando nuevas características en el proyecto, no dude en enviar el proyecto SourceForge. Es lejos de estar muerto y sigue siendo bajo desarrollo activo.

Nota: Chris Morgan es el líder del proyecto y yo soy uno de los desarrolladores para SharpPcap / Packet.Net.

Actualización:. El proyecto tutorial sobre proyecto de código es ahora hasta a la fecha para que coincida con la API actual

Otros consejos

decodificación de un tren TCP en pares de petición / respuesta HTTP no es trivial. Herramientas como WireShark hacer esto con un esfuerzo considerable.

escribí un envoltorio WireShark para Ruby (no es que eso le ayudará a), pero antes de que lo escribí He intentado utilizar tshark (la versión de línea de comandos de WireShark). Que no resolvió mi problema pero puede funcionar para usted. He aquí cómo:

capturar los paquetes y escribir en un archivo pcap (SharpPcap probablemente tiene una manera de hacer esto). En algún momento cerrar el archivo tapón y empezar otra, a continuación, en el viejo tshark una carrera con un filtro para el tráfico HTTP, y una bandera que indica que desea que la salida en el formato PDML. Usted encontrará este es un formato XML, fácilmente analizada con las herramientas System.XML, que contiene el valor de cada campo HTTP en una variedad de formatos. Puede escribir código C # para desovar tshark, y el tubo de su corriente StdOut en un lector de XML para que pueda obtener los paquetes de tshark a medida que surgen. No recomiendo usar el analizador DOM como la salida PDML para un archivo de captura grande puede volverse locos muy rápidamente.

A menos que sus requisitos son complejos (como la mía era), esto puede ser todo lo que necesita.

Creo que está cerca de la solución: si tiene los paquetes TCP del tráfico HTTP, es suficiente para extraer la carga útil TCP con el fin de reconstruir la petición / respuesta HTTP. Ver este SO entrada sobre una posible manera de hacerlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top