tcpdumpを使用したHTTPトラフィックの監視


42

サーバーとWebサーバーの間のHTTPトラフィックを監視するために、現在使用していtcpdumpます。これは、罰金に動作しますが、私は(私が知っている出力にいくつかの余分なデータを取り除くしたいtcpflowwireshark、彼らは私の環境で容易に入手できないです)。

tcpdumpmanページから:

ポート80との間のすべてのIPv4 HTTPパケットを印刷します。つまり、SYNおよびFINパケットやACKのみのパケットではなく、データを含むパケットのみを印刷します。

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

このコマンド

sudo tcpdump -A 'src example.com and tcp port 80 and(((ip [0]&0xf)<< 2))-((tcp [12]&0xf0)>> 2) )!= 0) '

次の出力を提供します。

19:44:03.529413 IP 192.0.32.10.http> 10.0.1.6.52369:フラグ[P。]、seq 918827135:918827862、ack 351213824、win 4316、オプション[nop、nop、TS val 4093273405 ecr 869959372]、長さ727

E ..... @ ....... .... P..6.0 ......... D ...... __ .. e = 3 ...__ HTTP / 1.1 200 OKサーバー:Apache / 2.2.3(Red Hat)Content-Type:text / html; charset = UTF-8日付:2009年11月14日(土)18:35:22 GMT年齢:7149
コンテンツの長さ:438

<HTML> <HEAD> <TITLE> Webページの例</ TITLE> </ HEAD> <body>
<p>このWebページに到達しました... </ p> </ BODY> </ HTML>

強調表示されている部分を除き、これはほぼ完璧です。これは何ですか、さらに重要なことですが、どうすればそれを取り除くことができますか?コマンドの最後の表現を少し調整しただけかもしれません。

回答:


39

tcpdumpは完全なパケットを出力します。表示される「ゴミ」は、実際にはTCPパッケージヘッダーです。

確かにperlスクリプトで出力をマッサージできますが、代わりにWiresharkのテキストバージョンであるtsharkを使用しないのはなぜですか?

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

tcpdump(同じライブラリ)と同じ引数を取りますが、アナライザーであるため、詳細なパケット検査を実行できるため、フィルターをさらに洗練させることができます。

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -R'http.request.method == "GET" || http.request.method == "HEAD"'


1
ありがとう-すべての提案を試した後、tsharkは仕事に最適なツールのようです。現在、「tshark -d tcp.port == 8070、http -R 'http.request or http.response'」を使用しています。これで、wiresharkができるようにtsharkを「tcpストリームに従う」ことができる場合にのみ(これは多くの質問を受けますが、まだ答えが見つかりません)。「-V」は、TCPおよびIPパケットなどに関する情報を表示しますが、これらは興味がありません。しかし、スクリプトを使用して削除できると思います。
otto.poellath 2009年

4
各文字のASCII値を照合することにより、キャプチャフィルターで「GET」を検索することもできますtcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420。しばらく前にWireshark Webサイトにページを追加して、文字列に一致するキャプチャフィルタを作成できるようにしました。wireshark.org
Gerald Combs

18

ngrepを見てください-それはあなたにとって役に立つかもしれません。

他の人への参照としてhttpry [サーバーは現在ダウンしているようですが、一時的であることを望みます]およびtsharkはパッシブプロトコル分析にも役立ちます。


2
ngrepの場合は+1。非常に便利なツール。
タイラー2009年

ngrepとhttpryは間違いなく便利に見えますが、ngrepはHTTPとAFAIKを認識していません。httpryはHTTPヘッダーでのみ機能し、ペイロードデータを表示できません。
otto.poellath 2009年

@sapporo-sure-ngrepはプロトコルに依存しませんが、pcapフィルター「ポート80」を追加して、[ほとんどの場合] HTTPトラフィックのみを取得できます。
pQd 2009年

Imo、ngrepはtcpdumpより100000倍優れています
ダニエルW.

5

httpryまたはjustnifferを試してください

Justnifferは、再送信とIPフラグメンテーションを並べ替えるTCPパケットでうまく機能します


1
ありがとう!justnifferは私が探していたものです(非常にシンプルリクエストの所要時間測定するのは言及した唯一のツールだと思います)。
gkop

1

後処理のためにすべてをpcapファイルに保存する、おおまかなtcpdumpコマンドラインを使用することをお勧めします。tcpflowの診断の正確な内容に応じて、通信を分析のために一貫した方法で元に戻すのに最適です。

httpryの使用法を含むその他の良い情報は、http://taosecurity.blogspot.com/2008/06/logging-web-traffic-with-httpry.htmlにあります。


0

使用しているWebサーバーはログを生成しませんか?確かにそれはHTTPトラフィックを監視するためのはるかに優れた方法であり、データを分析するためのツールが多数あり、有能なWebサーバーは信頼できるログを生成する必要があります。


4
明らかに。しかし、彼はすでにそれについて考えていたと思います。時にはそれは、点Aと点Bとの間で送信された実際のデータを監視するために便利です
tylerl

0

HTTPトラフィックを監視するために特別に設計されたいくつかのツールが市場で入手できます。Fiddler2(http://www.fiddler2.org)およびHTTP Debugger Proは、このようなツールの例です。


4
ご提案ありがとうございます。残念ながら、両方のツールはWindowsでのみ動作するようです。言及していませんでしたが、Linuxで動作するものを探しています。
otto.poellath
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.