获取 Wireshark 使用的网络数据传输速率/吞吐量

获取 Wireshark 使用的网络数据传输速率/吞吐量

我正在尝试获取 VPS 上的以太网 NIC 吞吐率/数据传输率,以便在 DOS/DDOS 攻击期间启动 Wireshark 上的捕获,这样我就可以分析数据包的性质。

我知道我可以使用环形缓冲区来限制 Wireshark 文件的文件大小,并保持 Wireshark 运行。但是,我希望仅在达到特定网络流量阈值后才开始捕获流量,因为这样我可以更轻松地在检查文件之前将它们分开。

我研究过几个命令行工具,例如 iftop、vnstat 和 nload,它们都可以很好地向终端提供输出。

但是,有人能帮我用其中一个工具中的命令或其他好方法简单地捕获 DTR 以允许我启动 wireshark 捕获吗? 另外,Tshark 中是否有现有命令允许这种情况发生?

答案1

您可以使用以下选项运行 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 字节。

要实现自动化,请按您想要的频率运行该程序(可能每五分钟一次),然后使用您喜欢的工具解析结果以提取持续时间和总字节数。进行除法,如果吞吐量超过指定阈值,则启动 Wireshark。

答案2

这是一个用 Python 编写的解决方案,它将解析 Linux 接口的 RX(接收数据)数据。它似乎与 的输出非常接近nload,但是,它有时会报告比nload最大值高出几倍。

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."

相关内容