ApacheでHTTPリクエスト全体をダンプする方法


27

ApacheによってHTTPリクエスト全体をダンプすることは可能ですか?着信リクエストのすべてのHTTPヘッダーを追跡する必要があります。どうやってするか?

回答:


30

Apacheの代わりに欲しいものは、パケットアナライザー、またはパケットスニファーとしても知られていると思います。最も人気のあるものの2つはおそらくTCPDumpWiresharkで、どちらも無料で、Windowsおよび* nixオペレーティングシステム用のバージョンがあります。これらは、Apacheが見るものだけでなく、インターフェイスに着信するすべてのトラフィックを表示します。ただし、フィルターを使用して、httpの80などの指定されたポートに制限することはできます。

tcpdump:
サーバーから次のコマンドを実行すると、ポート80宛てのすべてのパケットが表示されます。

sudo tcpdump -s 0 -X 'tcp dst port 80'

大文字のXスイッチは、ペイロードを16進数とASCIIでダンプします。0のsスイッチは、パケット全体を取得することを意味します。「tcp dst port 80」は、tcpヘッダーでポート80宛てのパケットのみをフィルタリングして表示することを意味します。

Wireshark:
より使いやすいバージョンでは、GUIを実行している場合、wireshark(正式にはethereal)を検討してください。


1
カイル、tcpdumpのuoutputからHTTPヘッダー情報を抽出するにはどうすればよいですか?
アレックス

1
アレックス:ご存知のように、Wiresharkはそれをずっと簡単にします。-r ファイル名を使用してダンプをファイルに保存してから、デスクトップ上のwiresharkで開くことができます。
カイルブラント

ああ、あなたも返信が必要な場合は「dst」をドロップします。
カイルブラント

1
-Aテキストのみ(16進ダンプなし):sudo tcpdump -A -s 0 'tcp dst port 80'
ブレントファウスト


8

基本的なパケットスニッフィングは、tcpdumpとgrepのハイブリッドであるngrepを使用すると簡単です。特定のシナリオで、WebブラウザーがWebサーバーと通信する方法を確認し、HTTPヘッダーを検査したい場合。
この例では、次のようなWebサーバーでngrepを実行します。

$ ngrep port 80

次の方法で、ポート80への「GET /」リクエストに対するHTTPリクエストをフィルタリングすることもできます。

$ ngrep -q '^GET .* HTTP/1.[01]'

クライアント側には、改ざんデータという便利なツールがあります。これは、Firefoxの拡張機能であり、送信HTTP要求を表示、記録、さらには変更することができます。
詳細はこちらをご覧ください


7

tcpdumpまたはwiresharkを使用するのではなく、tcpflowを使用します。これはtcpdumpに代わるものですが、すべての接続の両側にファイルを作成するため、自分でストリームをデコードする必要はありません。


これをありがとう。私はmod_negotiateを使用しており、curl()はブラウザが.phpを見つけたときに.phpよりも.bakファイルを選択しました。割れにくい堅いナット。
mckenzm

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.