6

GETサーバーからのリクエストを計算しようとしています。

私は使用しますtshark

次のコマンドを実行して、着信トラフィックをフィルタリングし、GETリクエストのみをフェッチします。

/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"'  

ご覧のとおり、フィルター処理された結果を最大サイズ 1G の名前の 1 つのファイルに保存するように定義しましたsamples.pcap

問題は、pcap ファイルを開こうとすると、次のように表示されることですtshark stored all traffic there

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

トラフィックが非常に多く、10 分間で pcap ファイル サイズが 950M になりました。そして、それを解析するのに約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
4

2 に答える 2

4

これは、-w と bpf パケット フィルターを組み合わせたい場合 (つまり、-f に何を追加したか) に機能するようです。

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

(最初の tcpdump を tshark に置き換えると、ローカル システムで次のエラーが発生します: tshark: Unrecognized libpcap format )

読み取りフィルター (-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>、処理パイプラインの任意の時点で使用できます。

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

output.txt という名前の 1024000 バイトのテキスト出力ファイルを生成するには、または

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

TCP ポート 80 用に事前にフィルター処理された 102400 バイトの pcap 入力を処理し、テキスト出力を output.txt というファイルに入れます。

于 2013-04-25T13:05:51.987 に答える
2

-w を使用しないでください。生データが保存されます。リダイレクト演算子 ">" を使用して宛先ディレクトリを指定する必要があります。

于 2017-07-28T15:43:52.907 に答える