web-dev-qa-db-ja.com

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

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

私は使ってみました:

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

それは私にヘッダーを与えましたが、コンテンツも含んでいました(大量のガベージを解析する必要がないので)。私は本当にヘッダーだけを気にします、それを取得する簡単な方法はありますか(自分でデータを解析する以外に)。

編集:複数のパケットにまたがる要求を追跡できるように、私はホスト/ポートにも注意を払う必要があります。

12
tzenes

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

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

18
heavyd

実際にできます!以前のすべての回答は非常に近いものでした。あなたに必要なのは -Oフラグ。HTTP以外のすべての情報を除外します。

tshark -O http -R http.request tcp port 80 or tcp port 443
5
Denis Bazhenov

@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
3
quickshiftin

簡単に読める独自のフィルターバージョン:

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

2
Miquel Adrover