Comment vider des requêtes HTTP entières avec Apache

27

Est-il possible de vider des requêtes HTTP entières par apache? J'ai besoin de suivre tous les en-têtes HTTP des demandes entrantes. Comment faire ça?

Alex
la source

Réponses:

30

Je pense que ce que vous voulez au lieu d'Apache pourrait être un analyseur de paquets , également connu sous le nom de renifleur de paquets. Deux des plus populaires sont probablement TCPDump et Wireshark , qui sont tous deux gratuits et ont des versions pour les systèmes d'exploitation Windows et * nix. Ceux-ci vous montreront tout le trafic entrant sur une interface, pas seulement ce que Apache voit. Mais vous pouvez utiliser des filtres pour vous limiter à un port spécifié, tel que 80 pour http.

tcpdump:
La commande suivante exécutée à partir du serveur vous montrera tous les paquets destinés au port 80:

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

Le commutateur X majuscule vide la charge utile en hexadécimal et ASCII. Le commutateur s avec 0 signifie obtenir le paquet entier. 'tcp dst port 80' signifie filtrer et n'afficher que les paquets destinés au port 80 dans l'en-tête tcp.

Wireshark:
pour la version plus conviviale, si vous avez une interface graphique en cours d'exécution, pensez à Wireshark (officiellement appelé éthéré).

Kyle Brandt
la source
1
Merci Kyle, comment puis-je extraire les informations d'en-tête HTTP de la sortie utcpdump?
Alex
1
Alex: Vous savez quoi, Wireshark vous facilitera la tâche. Vous pouvez utiliser le nom de fichier -r pour enregistrer le vidage dans un fichier, puis l'ouvrir avec wirehark sur votre bureau.
Kyle Brandt
Oh, et laissez tomber le 'dst' si vous voulez aussi les réponses.
Kyle Brandt
1
-Apour le texte uniquement (pas de vidage hexadécimal):sudo tcpdump -A -s 0 'tcp dst port 80'
Brent Faust
12

peut-être le dumping de cookies ? sinon - regardez mod_dumpio .

pQd
la source
1
mod_dumpio semble cool! Probablement le moyen le plus simple de vider les informations si vous utilisez SSL (bien que wirehsark puisse le faire aussi). +1 :-)
Kyle Brandt
8

Le reniflage de paquets de base est facile avec ngrep, un hybride de tcpdump et grep. Dans certains scénarios, si vous souhaitez voir comment les navigateurs Web communiquent avec les serveurs Web et inspecter les en-têtes HTTP.
Dans cet exemple, exécutez un ngrep sur un serveur Web comme ceci:

$ ngrep port 80

vous pouvez également choisir de filtrer la requête http en requête "GET /" sur le port 80 en:

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

Côté client, il existe un outil utile nommé Tamper Data, c'est une extension Firefox qui vous permet de visualiser, d'enregistrer et même de modifier les requêtes HTTP sortantes.
Vous pouvez trouver plus d'informations ici

Ali Mezgani
la source
7

Plutôt que d'utiliser tcpdump ou wirehark, utilisez tcpflow. C'est un remplacement de tcpdump, mais crée un fichier pour chaque côté de chaque connexion, vous n'avez donc pas à essayer de décoder le flux vous-même.

David Pashley
la source
Merci pour cela. J'utilise mod_negotiate et mon curl () a pris les fichiers .bak de préférence au .php tandis que les navigateurs ont trouvé le .php. Un écrou dur à casser.
mckenzm
0

Apache a cette fonctionnalité intégrée; augmentez simplement le niveau de journalisation à trace7ou trace8:

LogLevel trace8

Notez que cela videra beaucoup de données. Tu étais prévenu.

Wouter Verhelst
la source