Comment puis-je revenir juste l'en-tête Http de tshark?

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 vais prendre 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 le contenu (ce que je ne veux pas, c'est une grande quantité de déchets pour analyser). Je ne me soucie vraiment de l'en-tête, est-ce qu'il y a un moyen simple d'obtenir exactement cela (autrement que d'analyser les données moi-même).

Edit: Je devrais être admissible. Je me préoccupe également de l'hôte / du port afin que je puisse suivre les demandes sur plusieurs paquets.

4 Solutions collect form web for “Comment puis-je revenir juste l'en-tête Http de tshark?”

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

Pour les en-têtes des requêtes:

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

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

 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 probablement des données, mais la quantité de données devrait être inférieure à celle que vous auriez autrement.

J'ai pu combiner la réponse de @heavyd et l'exécuter à travers un filtre sèches que j'ai obtenu d'un article SO – (la réponse de FJ) pour cuisiner ce bébé, qui filtre juste 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 

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 vois uniquement les informations IP et TCP pertinentes, sans tous les éléments de bas niveau, plus les informations HTTP complètes.

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

 tshark -i docker0 -O http -R http.request tcp port 443 
  • Pourquoi un flux radio ne s'affiche-t-il pas sur un outil de surveillance de paquets?
  • X11 / XQuartz ne sera pas lancé automatiquement après la mise à niveau vers les Mavericks OS X?
  • Soyons le génie de l'ordinateur et du réseau.