私はtsharkを使用してパケットをスニッフィングし、httpヘッダーのみに関心があります(できれば送信された形式ですが、取得できるものを使用します)。
私は使ってみました:
tshark tcp port 80 or tcp port 443 -V -R "http"
それは私にヘッダーを与えましたが、コンテンツも含んでいました(大量のガベージを解析する必要がないので)。私は本当にヘッダーだけを気にします、それを取得する簡単な方法はありますか(自分でデータを解析する以外に)。
編集:複数のパケットにまたがる要求を追跡できるように、私はホスト/ポートにも注意を払う必要があります。
特定のHTTPヘッダー表示フィルターを使用して、要求ヘッダーのみ、応答ヘッダーのみ、またはその両方を表示できます。
リクエストヘッダーのみ:
tshark tcp port 80 or tcp port 443 -V -R "http.request"
応答ヘッダーのみ:
tshark tcp port 80 or tcp port 443 -V -R "http.response"
また、リクエストヘッダーとレスポンスヘッダーの両方について:
tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response"
注:これは、ヘッダーだけではなく、ヘッダーを含むパケットのみをフィルターで除外するため、データを取得できる可能性がありますが、データ量は他の場合よりも少なくなります。
実際にできます!以前のすべての回答は非常に近いものでした。あなたに必要なのは -O
フラグ。HTTP以外のすべての情報を除外します。
tshark -O http -R http.request tcp port 80 or tcp port 443
@heavydからの回答を組み合わせ、それを SO記事 -(FJの回答)から取得したsedフィルターに通して、ヘッダーのみをフィルターで除外するこの赤ちゃんを調理することができました。 )
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
簡単に読める独自のフィルターバージョン:
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
この方法では、関連するIPとTCP情報のみが表示されます。低レベルの情報はすべて含まれず、完全なHTTP情報も表示されません。