Cómo volcar solicitudes HTTP completas con apache

27

¿Es posible volcar solicitudes HTTP completas por apache? Necesito rastrear todos los encabezados HTTP de solicitudes entrantes. ¿Como hacer eso?

Alex
fuente

Respuestas:

30

Creo que lo que quieres en lugar de Apache podría ser un analizador de paquetes , también conocido como sniffer de paquetes. Dos de los más populares son probablemente TCPDump y Wireshark , los cuales son gratuitos y tienen versiones para los sistemas operativos Windows y * nix. Estos le mostrarán todo el tráfico que ingresa en una interfaz, no solo lo que Apache ve. Pero puede usar filtros para restringir a un puerto específico, como 80 para http.

tcpdump:
el siguiente comando ejecutado desde el servidor le mostrará todos los paquetes destinados al puerto 80:

sudo tcpdump -s 0 -X 'tcp dst port 80'

El interruptor de mayúscula X descarga la carga útil en hexadecimal y ASCII. El interruptor s con 0 significa obtener el paquete completo. 'tcp dst port 80' significa filtrar y mostrar solo los paquetes destinados al puerto 80 en el encabezado tcp.

Wireshark:
para la versión más fácil de usar, si tiene una GUI ejecutándose, considere wireshark (formalmente conocido como etéreo).

Kyle Brandt
fuente
1
Gracias Kyle, ¿cómo extraigo la información del encabezado HTTP de la salida de tcpdump?
Alex
1
Alex: Sabes qué, Wireshark lo hará mucho más fácil. Puede usar el nombre de archivo -r para guardar el volcado en un archivo y luego abrirlo con wireshark en su escritorio.
Kyle Brandt el
Ah, y suelta el 'dst' si quieres las respuestas también.
Kyle Brandt el
1
-Apara solo texto (sin volcado hexadecimal):sudo tcpdump -A -s 0 'tcp dst port 80'
Brent Faust
12

tal vez el vertido de galletas ? de lo contrario, mira mod_dumpio .

pQd
fuente
1
¡mod_dumpio suena genial! Probablemente la forma más fácil de volcar la información si se usa SSL (aunque Wirehsark también puede hacerlo). +1 :-)
Kyle Brandt el
8

El rastreo básico de paquetes es fácil con ngrep, un híbrido de tcpdump y grep. En ciertos escenarios, si desea ver cómo los navegadores web se comunican con los servidores web e inspeccionar los encabezados HTTP.
En este ejemplo, ejecute un ngrep en un servidor web como este:

$ ngrep port 80

también puede optar por filtrar la solicitud http a la solicitud "GET /" al puerto 80 de la siguiente manera:

$ ngrep -q '^GET .* HTTP/1.[01]'

Del lado del cliente, hay una herramienta útil llamada Tamper Data, que es una extensión de Firefox que le permite ver, registrar e incluso modificar las solicitudes HTTP salientes.
Puedes encontrar más información aquí

Ali Mezgani
fuente
7

En lugar de usar tcpdump o wireshark, use tcpflow. Es un reemplazo directo de tcpdump, pero crea un archivo para cada lado de cada conexión, por lo que no tiene que intentar decodificar la transmisión usted mismo.

David Pashley
fuente
Gracias por esto. Estoy usando mod_negotiate y mi curl () recogió archivos .bak con preferencia a .php mientras que los navegadores encontraron el .php. Un hueso duro de roer.
mckenzm
0

Apache tiene esa funcionalidad incorporada; acaba de aumentar el nivel de registro de trace7o trace8:

LogLevel trace8

Tenga en cuenta que esto volcará muchos datos. Usted ha sido advertido.

Wouter Verhelst
fuente