2013-04-17 9 views
5

私のサーバーからGETリクエストを計算しようとしています。ファイルに書き込む前にtsharkの結果をフィルタリングする方法は?

私はtsharkを使用します。 samples.pcap:あなたは、私が最大サイズ1Gと名前を持つ1つのファイルにフィルタリングされた結果を格納するために定義されて見たよう

/usr/sbin/tshark -b filesize:1024000 -b files:1 \ 
'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' \ 
-w samples.pcap -R 'http.request.method == "GET"' 

:私は実行

は、着信トラフィックをフィルタリングし、唯一GET要求を取得するためのコマンドを追いました。私はPCAPファイルサイズの950mのを取得する10分の間、

3245 172.692247 1.1.1.1 -> 2.2.2.2 HTTP [TCP Retransmission] Continuation or non-HTTP traffic 
3246 172.730928 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic 
3247 172.731944 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic 
3248 172.791934 1.1.1.1 -> 2.2.2.2 HTTP GET /services/client/client.php?cnc=13 HTTP/1.1 
3249 172.825303 1.1.1.1 -> 2.2.2.2 HTTP HTTP/1.1 200 OK [Unreassembled Packet [incorrect TCP checksum]] 
3250 172.826329 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic 
3251 172.826341 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic 
3252 172.826347 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic 
3253 172.826354 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic 
3254 172.826359 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic 

は、私は本当に大きなトラフィックを持っている:私はtshark stored all traffic thereことが分かりのpcapファイルを開こうとすると

問題が、あります。それを解析するのに約4分かかります。私はそれを実行しようとする

興味深いのは、(しかし、/ tmpの下の)ローカルファイルに格納することなく、次のとおりです。

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

3.776587 1.1.1.1 -> 2.2.2.2 HTTP GET /services/client/client.php?cnc=13 HTTP/1.1 
4.775624 1.1.1.1 -> 2.2.2.2 HTTP GET /services/client/clsWebClient.php HTTP/1.1 
8.804702 1.1.1.1 -> 2.2.2.2 HTTP GET /services/client/client.php?cnc=13 HTTP/1.1 

それは動作しますが、この場合には、私は/ tmpのいくつかの一時ファイルの下に持っています巨大なサイズの1G +です。

私は何かを見逃しましたか?

は========================================あなた

ありがとうございました===============

編集

ラースは-fを追加するように求め:

sudo /usr/sbin/tshark -T fields -e 'http.request.uri contains "cnc=13"' \ 
     -b filesize:1024000 -b files:1 \ 
     -f 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' \ 
     -w samples.pcap 

は助けにはならない、まだすべての店舗をsamples.pcap交通量:

74 6.908388 172.20.0.23 -> 89.78.170.96 HTTP Continuation or non-HTTP traffic 
75 6.908394 172.20.0.23 -> 89.78.170.96 HTTP Continuation or non-HTTP traffic 
+0

キャプチャフィルタ式に '-f'オプションを付けてみましたか? –

+0

私は試しましたが、まだすべてのトラフィックを取得します。あなたは '-f'をどこに置いていますか? –

+0

フィルタ式の直前、つまり '-f 'tcp ...' –

答えて

3

これは-wとBPFパケットフィルタを組み合わせたいと思い際に動作しているようです(つまり、あなたは、-fを置く何):

tcpdump -nli en1 -w - 'tcp port 80' | tshark -i - -R'http.request.method == "GET"' 

(中tsharkの結果と初期のtcpdumpを交換します tshark:認識できないlibpcap形式)

読み取りフィルター(-R)の結果の保存は、キャプチャー時(または読み取り時)バージョン1.4.0以降はサポートされていないようです。キャプチャ)し、結果を再度書き出します(http://ask.wireshark.org/questions/10397/read-filters-arent-supported-when-capturing-and-saving-the-captured-packets参照)。おそらく1.4.0より前のバージョンでは、pcapへの書き込みと出力の制限を-b(これはテストしていません)とすることができます。

-Rのテキスト出力(pcap出力ではなく)をしたい場合は、上記のコマンドはあなたの解決策になると思います。

(つまり、あなたはあなただけのサンプルを取りたい言及。)あなたの出力を制限するには、処理パイプラインの任意の時点でhead -c <bytes>を使用することができますと呼ばれる1024000バイトテキスト出力ファイルを生成するために

tcpdump -nli en1 -w - 'tcp port 80' | \ 
    tshark -i - -R'http.request.method == "GET"' | \ 
    head -c 1024000 > output.txt 

出力。TXTまたは

tcpdump -nli en1 -w - 'tcp port 80' | \ 
    head -c 1024000 | \ 
    tshark -i - -R'http.request.method == "GET"' > output.txt 

TCPポート80のためのプレフィルタ処理されたのpcap入力の102400バイトを処理し、よく

+0

あなたの例では、1分あたり100Mのトラフィックがある場合、 "GET"だけが捕捉され、 ?私は、tsharが/ tmpの下で行う一時ファイルの作成を防ぎたい。そのために私は '-w'を使用します –

+0

私のローカルシステム(Mac OS X)で見る限り、この方法は/ tmpの下に一時ファイルを生成せず、指定された出力ファイルに" GET "要求をキャプチャするだけです。 –

+0

あなたが投稿した1番目と2番目のコマンドが、 '/ tmp'フォルダの下に' etherXXXX ** 'ファイルが残っています。 –

1

OUTPUT.TXTというファイルにテキスト出力を置くために、-wを使用しないでください、それは生データを保存する場合は、リダイレクト演算子 ">"を使用して宛先ディレクトリを指定する必要があります。

関連する問題