Comment renvoyer juste l'en-tête Http de tshark?

12

J'utilise tshark pour renifler mes paquets et je ne suis concerné que par l'en-tête http (de préférence sous la forme envoyée, mais je prendrai ce que je peux obtenir).

J'ai essayé d'utiliser:

tshark tcp port 80 or tcp port 443 -V -R "http"

Ce qui m'a donné l'en-tête, mais aussi du contenu (que je ne veux pas car c'est une grande quantité de déchets à analyser). Je ne me soucie vraiment que de l'en-tête, existe-t-il un moyen facile d'obtenir exactement cela (autre que l'analyse des données moi-même).

Edit: je devrais être qualifié, je me soucie également de l'hôte / du port afin de pouvoir suivre les demandes sur plusieurs paquets.

tzenes
la source

Réponses:

18

Vous pouvez utiliser les filtres d'affichage d'en-tête HTTP spécifiques pour afficher uniquement les en-têtes de demande, uniquement les en-têtes de réponse ou les deux.

Pour les en-têtes de demande uniquement:

tshark tcp port 80 or tcp port 443 -V -R "http.request"

Pour les en-têtes de réponse uniquement:

tshark tcp port 80 or tcp port 443 -V -R "http.response"

Et pour les en-têtes de demande et de réponse:

tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response"

Remarque: cela ne filtre pas uniquement les en-têtes, juste les paquets qui contiennent les en-têtes, vous obtiendrez donc probablement toujours des données, mais la quantité de données devrait être inférieure à ce que vous auriez autrement.

lourd
la source
Nous parlons toujours d'une tonne de données comme si j'avais une demande pour en.wikipedia.org Je récupère 750k alors que je ne veux vraiment que moins de 1k en en-têtes.
tzenes
tshark est un outil de capture de paquets , vous voudrez peut-être examiner quelque chose comme Fiddler ou un autre outil d'analyse HTTP uniquement.
Heavyd
Je ne connais pas le violoniste, mais mon objectif est de suivre le débit de connexion, donc je veux connaître requesttime / firstbyte / lastbyte tout en conservant les en-têtes HTTP. tshark résout déjà la plupart de mes problèmes, il me suffit de récupérer les en-têtes.
tzenes
3
Il produit "tshark: filtre de capture non valide" (Tshark 2.0.2). Pour contourner ce tshark -V -Y http.request tcp port 80 or tcp port 443
problème
5

En fait, vous le pouvez! Toutes les réponses précédentes étaient très proches. Tout ce dont vous avez besoin est un -Odrapeau qui filtre toutes les informations sauf HTTP.

tshark -O http -R http.request tcp port 80 or tcp port 443
Denis Bazhenov
la source
1
Ceci est la bonne réponse.
Florin Andrei
3

J'ai pu combiner la réponse de @heavyd et l'exécuter à travers un filtre sed que j'ai obtenu d'un article SO - (réponse de FJ) pour préparer ce bébé, qui filtre uniquement les en-têtes :)

sudo tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response" | sed -rn '/Hypertext Transfer Protocol/{:a;N;/    \\r\\n:?/{/.*/p;d};ba}' >> /tmp/filtered
quickshiftin
la source
1
sed terrifiant car je ne peux pas le lire mais j'ai travaillé comme un charme.
Setheron
2

Ma propre version de filtre pour une lecture facile:

tshark -V -R "tcp.port ==80 && (http.request || http.response)" | awk "/Hypertext Transfer Protocol/,/Frame/ { print };/Transmission Control Protocol/{print};/Internet Protocol/{print}" | grep -v Frame

De cette façon, je ne vois que les informations IP et TCP pertinentes, sans toutes les informations de bas niveau, plus les informations HTTP complètes.

Miquel Adrover
la source
sudo tshark -V -s0 port 80 -Y "(http.request || http.response)" | awk "/ Hypertext Transfer Protocol /, / ^ $ /"
Lmwangi