tsharkからHttpヘッダーだけを返すにはどうすればよいですか?


12

私はtsharkを使用してパケットをスニッフィングし、httpヘッダーのみに関心があります(できれば送信された形式ですが、取得できるものを取得します)。

私は使用してみました:

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

これでヘッダーが得られましたが、コンテンツもありました(大量のゴミを解析する必要はありません)。私は本当にヘッダーのみに関心があります、それを取得する簡単な方法はありますか(自分でデータを解析する以外)。

編集:複数のパケットにまたがるリクエストを追跡できるように、ホスト/ポートも気にする必要があります。

回答:


18

特定の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"

注:これにより、ヘッダーだけが除外されるわけではなく、ヘッダーを含むパケットのみが除外されるため、データが得られる可能性は高くなりますが、データ量は他の場合よりも少なくなります。


en.wikipedia.orgのリクエストがあるかのように大量のデータについてまだ話しているのですが、実際にはヘッダーが1k未満しか必要ないのに750kが返ってきます。
tzenes

tsharkはパケットキャプチャツールです。Fiddlerまたは別のHTTP専用の分析ツールのようなものを調べてください。
10

私はフィドラーに精通していませんが、私の目標は接続スループットを追跡することなので、HTTPヘッダーを保持しながらrequesttime / firstbyte / lastbyteを知りたいです。tsharkは私の問題のほとんどをすでに解決しています。ヘッダーを取得するだけです。
tzenes

3
これは、生産: "無効なキャプチャフィルタtsharkの"(tsharkの2.0.2を)。回避策として、以下を使用しました。tshark -V -Y http.request tcp port 80 or tcp port 443
jfs


3

@heavydからの回答を組み合わせて、SO記事から取得したsedフィルターを介して実行することができました(FJの回答)。

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

1
恐ろしいsed原因私はそれを読むことができませんが、魅力のように働いた。
セザーロン

2

読みやすい独自のフィルターバージョン:

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情報は表示されません。


sudo tshark -V -s0 port 80 -Y "(http.request || http.response)" | awk "/ Hypertext Transfer Protocol /、/ ^ $ /"
Lmwangi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.