web-dev-qa-db-ja.com

Wiresharkで使用するためのネットワークデータ転送速度/スループットを取得します

DOS/DDOS攻撃中にWiresharkでキャプチャを開始して、パケットの性質を分析できるようにするために、VPSでイーサネットNICスループットレート/データ転送レートを取得しようとしています。

リングバッファと呼ばれるものを使用して、Wiresharkファイルのファイルサイズを制限し、Wiresharkを実行し続けることができることを認識しています。ただし、特定のネットワークトラフィックのしきい値に達したときにのみトラフィックのキャプチャを開始したいと思います。これにより、ファイルを検査する前にファイルを簡単に分離できるようになります。

Iftop、vnstat、nloadなどのいくつかのコマンドラインツールを見てきました。これらはすべて、ターミナルに出力を提供するという素晴らしい仕事をしています。

ただし、誰かがこれらのツールのいずれか、またはWiresharkキャプチャを開始できるDTRを単純にキャプチャする別の優れた方法でコマンドを手伝ってくれるでしょうか。それ以外の場合、これを可能にするTsharkの既存のコマンドはありますか?

2
jonnyjandles

次のオプションを使用してTSharkを実行できます。

tshark -i 1 -a duration:30 -q -z io,stat,0

意味:

-i 1:最初のインターフェースで聞いてください。必要に応じて、必要なインターフェイスに合わせて調整します。 (tshark -Dを使用して、選択するインターフェースのリストを取得できます。)

-a duration:30:30秒後に自動停止

-q:キャプチャされたパケットを表示しません。最後に要約を表示するだけです

-z io,stat,0:ゼロ秒の間隔を使用して、最後にIO統計を収集して表示します。ゼロ間隔は、統計がすべてのパケットに対して計算されることを意味します。

キャプチャを実行します。 30秒後に停止します(または、通常は次の方法で早期に終了できます Ctrl+C)そしてあなたはこのような要約を得るでしょう:

12645 packets captured

=====================================
| IO Statistics                     |
|                                   |
| Duration: 29.1 secs               |
| Interval: 29.1 secs               |
|                                   |
| Col 1: Frames and bytes           |
|-----------------------------------|
|                |1                 |
| Interval       | Frames |  Bytes  |
|-----------------------------------|
| 0.000 <> 29.1  |  12645 | 8694272 |
=====================================

次に、8694272バイトを29.1秒で割ると、そのキャプチャウィンドウ中の毎秒298,772バイトのスループットを確認できます。

自動化するには、必要な頻度(おそらく5分ごと)で実行してから、お気に入りのツールで結果を解析して、期間と合計バイト数を引き出します。分割を実行し、スループットが指定されたしきい値を超えている場合はWiresharkを起動します。

1
Doug Deden

これは、RX(受信データ)のLinuxインターフェイスデータを解析するPythonのソリューションです。これは、nloadの出力と厳密に一致しているようですが、より高いレポートが表示される場合があります。 nloadmaxの倍数。

import subprocess
import time

while True:
    interface = "eno1"
    duration = 1
    output = subprocess.check_output("ip -s link show dev %s" % interface, stderr=subprocess.STDOUT, Shell=True)
    output_array = output.split("\n")
    rx_bytes_1 = int(output_array[3].split()[0])
    time.sleep(duration)
    output = subprocess.check_output("ip -s link show dev %s" % interface, stderr=subprocess.STDOUT, Shell=True)
    output_array = output.split("\n")
    rx_bytes_2 = int(output_array[3].split()[0])
    rx_rate = round((rx_bytes_2 - rx_bytes_1) / (duration * 1024.0 * 1024.0),4)
    print "Throughput: " + str(rx_rate) + " Mbps."
0
jonnyjandles