DOS/DDOS攻撃中にWiresharkでキャプチャを開始して、パケットの性質を分析できるようにするために、VPSでイーサネットNICスループットレート/データ転送レートを取得しようとしています。
リングバッファと呼ばれるものを使用して、Wiresharkファイルのファイルサイズを制限し、Wiresharkを実行し続けることができることを認識しています。ただし、特定のネットワークトラフィックのしきい値に達したときにのみトラフィックのキャプチャを開始したいと思います。これにより、ファイルを検査する前にファイルを簡単に分離できるようになります。
Iftop、vnstat、nloadなどのいくつかのコマンドラインツールを見てきました。これらはすべて、ターミナルに出力を提供するという素晴らしい仕事をしています。
ただし、誰かがこれらのツールのいずれか、またはWiresharkキャプチャを開始できるDTRを単純にキャプチャする別の優れた方法でコマンドを手伝ってくれるでしょうか。それ以外の場合、これを可能にするTsharkの既存のコマンドはありますか?
次のオプションを使用して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を起動します。
これは、RX(受信データ)のLinuxインターフェイスデータを解析するPythonのソリューションです。これは、nload
の出力と厳密に一致しているようですが、より高いレポートが表示される場合があります。 nload
maxの倍数。
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."