我正在尝试获取 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."