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 son 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 de contenu (que je ne veux pas comme une grande quantité de poubelles à analyser). Je me soucie vraiment seulement de l'en-tête, y a-t-il un moyen facile d'obtenir juste cela (autre que d'analyser les données moi-même).
EDIT: Je devrais qualifier Je me soucie également de l'hôte/du port afin que je puisse garder une trace des demandes sur plusieurs paquets.
Vous pouvez utiliser les filtres d'affichage d'en-tête HTTP spécifiques pour afficher uniquement les en-têtes de la requête, juste les en-têtes de réponse ou les deux.
Pour les en-têtes de la demande:
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 contenant les en-têtes, de sorte que vous obtiendrez probablement des données, mais que la quantité de données devrait être inférieure à ce que vous auriez autrement.
En fait, vous pouvez! Toutes les réponses précédentes étaient très proches. Tout ce dont tu as besoin c'est -O
Drapeau qui filtre toutes les informations mais http.
tshark -O http -R http.request tcp port 80 or tcp port 443
J'ai été capable de combiner la réponse de @heavyd et de l'exécuter à travers un filtre SED que j'ai reçu d'un SO article - (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
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 la propriété intellectuelle et TCP Informations, sans toutes les trucs de niveau bas, ainsi que les informations HTTP complètes.