単一のアプリケーションの発信HTTP要求を検査する方法は?


70

私のアプリケーションはHTTPリクエストを何らかのサーバーに送信していますが、送信している実際のデータを確認したいのです。私が見たいいくつかの詳細:

  • リクエストメソッド(GET / POST / PUTなど)
  • コンテンツタイプ

これを達成するための最良かつ簡単な方法は何ですか?


「リクエストの方法、コンテンツタイプ、本文など」HTTP固有の検査について話しているのですか?たぶんHTTPS(セキュリティで保護された)ですか?
gertvdijk

はい、あなたは正しいが、それは、ブラウザによって送信いない
megas

申し訳ありませんが、それは単なるHTTPリクエストです
メガ

3
さて、それで結構です。話しているサーバーは1つだけですか、それとも小さなセットですか?そして、他のアプリケーションはそれらのサーバーと通信していませんか?両方ともそうなら、Wiresharkについての答えは私が求めるものです。仕組みをご覧ください。そんなに難しくありません。
gertvdijk

回答:


71

まあ、それらすべてのtcpdumpファン=)

これらすべてのコマンドをルートとして実行します!!!

ターミナルでルートを取得

sudo -i

RAWパケットをキャプチャするには...

sudo tcpdump -i any -w /tmp/http.log &

これにより、すべてのポート、すべてのインターフェイスのすべての生パケットがキャプチャされ、ファイルに書き込まれます/tmp/http.log

アプリケーションを実行します。HTTP(Webブラウザー)を使用する他のアプリケーションを実行しない場合、明らかに役立ちます。

殺します tcpdump

killall tcpdump

ログを読み取るには、-Aフラグを使用し、出力をless次の場所にパイプします。

tcpdump -A -r /tmp/http.log | less

-Aフラグは「ペイロード」またはパケット内のASCIIテキストを出力します。これにより、出力がに送信されless、ページを上下に移動できます。終了するにはless、と入力しQます。

Googleにアクセスすると、次のように表示されます(生のパケットで):

20:42:38.179759 IP ufbt.local.56852 > sea09s02-in-f3.1e100.net.www: Flags [P.], seq 1:587, ack 1, win 913, options [nop,nop,TS val 25523484 ecr 492333202], length 586
E..~.v@.@..q......!#...P.(.gS.c..............u..Xh.GET /generate_204 HTTP/1.1
Host: clients1.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34
Referer: http://www.google.com/
Accept: */*
Accept-Encoding: gzip, deflate, x-gzip, x-deflate
Accept-Charset: utf-8,*;q=0.5
Accept-Language: en-US, en-US; q=0.8, en; q=0.6
Cookie: PREF=ID=dd958d4544461998:FF=0:TM=1323842648:LM=1360205486:S=Fg_QCDsLMr4ZepIo; NID=67=OQJWjIDHG-B8r4EuM19F3g-nkaMcbvYwoY_CsOjzvYTOAxwqAos5kfzsk6Q14E70gIfJjHat8d8PuQIloB12BE-JuSHgsKHR2QSpgN12qSWoxeqhdcSQgzw5CHKtbR_a

tcpdump送信元および宛先IPアドレスへのポートへのネットワークインターフェイスの指定からデータ収集を絞り込むための長いオプションセットがあります。復号化できません(したがって、HTTPSでは機能しません)。

興味のあることがわかったら、いくつかのオプションを使用しtcpdumpて、興味のあるデータのみを記録できます。一般的な戦略は、最初にすべてのパケットを記録し、生データを確認してから、目的のパケットのみをキャプチャすることです。

役に立つフラグ(オプション):

-i Specify an interface
-i eth0

tcp port xx
tcp port 80

dst 1.2.3.4
specify a destination ip address

tcpdump収集するデータの分析方法の使用と学習の両方について、学習曲線があります。さらに読むには、ダニエル・ミースラーのtcpdump入門書と例をお勧めします。


1
これは、Ubuntu 14.04で何もキャプチャしません。私のラップトップはwifiルーターを介してインターネットに接続します。それはtcpdumpの使用に違いを生むでしょうか?私がそれを殺すとき、それはただ言うだけですが0 packets captured 0 packets received by filter 0 packets dropped by kernel 、私はtcpdumpが監視していたときにChromeブラウザでたくさんのサイトを開きました。
faizal

1
ああリンクされた記事が助けた。tcpdump -i any -w /tmp/http.log &働いた。
ファイザー14

22

tcpflowUbuntu公式リポジトリから最初にインストールします。

sudo apt-get install tcpflow

次に、次のコマンドを実行して、標準ポートですべてのHTTP要求を検査します。

sudo tcpflow -p -c port 80

1
結果はどこで確認できますか?ありがとうございました!
ゲディミナス

2
@Gediminasでは、ターミナルで出力を確認できます。HTTPSトラフィックは表示されないことに注意してください。1のようなHTTPを訪れてみhttpvshttps.com
ヴァンニTotaro

1
要求を確認するだけで、すべてのTCP詳細(syn、ack ...)を処理する必要がない場合は、tcpdumpよりもはるかに便利です
herm

13

Wiresharkを試すことをお勧めしますWiresharkをインストールする

Wiresharkは非常に高度であるため、慣れるまで少し時間がかかる場合があることに注意してください。私はそれを数年使用していませんが、あなたが望んでいることにまだ完璧でなければなりません-少しでも機能がいっぱいではないにしても。

Wiresharkに関する情報とその使用方法は、Wiresharkのホームページで見つけることができます。


1
これは単一のプロセスでは機能しません。インターフェイス上のすべてのトラフィックを取得し、IP /プロトコルなどでフィルタリングする必要があります
。wireshark-

はい、しかし、wiresharkインターフェースで簡単に実現できます。
パンサー

2
以前にwiresharkを試したことがありますが、私にとっては高度すぎるため、別のオプションを探しています
-megas

4
他のオプションはtcpdumpです。tcpdumpはコマンドラインツールであり、簡単にジョブを実行できますが、学習曲線は急勾配です。danielmiessler.com/study/tcpdump
パンサー

1
@gertvdijk-あなたが望むように;)基本に自由に追加してください
パンサー

5

また、コマンドを使用することもできます。これにより、SSLの場合でも整然とした出力が得られます。

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