Je souhaite afficher les en-têtes HTTP envoyés par Apache (écoute sur le port 80) à Tomcat (sur le port 4080) sur une machine Linux.
Selon Wikipedia ,
Les champs d'en-tête sont des paires nom-valeur séparées par deux-points dans un format de chaîne en texte clair.
J'ai essayé quelques variantes de la tcpdump
commande suivante :
$ sudo tcpdump -lnX dst port 4080 -c 10
11:29:28.605894 IP SOME_IP.33273 > SOME_IP.4080: P 0:49(49) ack 1 win 23 <nop,nop,timestamp 1191760962 509391143>
0x0000: 4500 0065 3a9f 4000 3f06 0084 628a 9ec4 E..e:.@.?...b...
0x0010: 628a 9c97 81f9 0ff0 9e87 eee0 144b 90e1 b............K..
0x0020: 8018 0017 fb43 0000 0101 080a 4708 d442 .....C......G..B
0x0030: 1e5c b127 4845 4144 202f 6461 7070 6572 .\.'HEAD./dapper
0x0040: 5f73 6572 7669 6e67 2f41 644d 6f6e 6b65 _serving/AdMonke
0x0050: 793f y?
Le résultat était toujours le même - un étrange mélange de charabia et de mots anglais (par exemple HEAD
).
Comment afficher les en-têtes dans un format lisible par l'homme?
http
rhel6
http-headers
tcpdump
Adam Matan
la source
la source
Réponses:
Voici un one-liner que j'ai créé pour afficher les en-têtes HTTP de requête et de réponse
tcpdump
(ce qui devrait également fonctionner pour votre cas):Il limite coupe le paquet à 10Kb et ne connaît que les commandes GET, POST et HEAD, mais cela devrait suffire dans la majorité des cas.
EDIT : modifié pour supprimer les tampons à chaque étape afin de le rendre plus réactif. A besoin de Perl et de stdbuf maintenant, utilisez donc la version originale si vous ne les avez pas: EDIT : modification des cibles de port de script de 80 à 4080, pour écouter le trafic déjà passé par apache au lieu du trafic extérieur direct arrivant au port. 80:
Quelques explications:
la source
Vous pouvez obtenir quelque chose de proche de ce que vous voulez en utilisant
-A
, par exempleN'oubliez pas d'utiliser
-s 0
pour vous assurer que vous obtenez le paquet entier.Vous pouvez également utiliser
wireshark
pour afficher les en-têtes de manière interactive.la source
-A
et-s 0
obtenu le même résultat.-X
.tcpdump -s 0 -A dst port 4080
donneE..e..@.?.$bb...b....:......w........Q.....G..1.b..HEAD /dapper_serving/AdMonkey?ping=1 HTTP/1.0
.-s 0
et qu'il n'y a rien aprèsHTTP/1.0
, il n'y a pas d'en-tête HTTP dans la demande.Essayez d'utiliser http://justniffer.sourceforge.net/ C'est un meilleur outil ou Wireshark avec l'option "Suivre le flux TCP", il y a juste beaucoup de meilleures options que tcpdump pour voir les en-têtes (requêtes / réponses)
la source